marcio.fernandes 3d4a6455f8
All checks were successful
Portainer stack nginx / deploy (push) Successful in 2s
Update services/nginx/docker/nginx.conf.d/lms.lan.conf
2024-10-21 22:00:24 +00:00
2024-09-08 15:56:11 +01:00
2024-09-08 14:54:32 +01:00
2024-09-15 04:34:03 +01:00

homesrv01.dev.lan

Welcome to homesrv01.dev.lan git page.

This repository serves to document and maintain the server where the home assistant runs.

The idea was to create a server with docker where it would be possible to isolate all servers, services and communications related to home automation at network level.

The server itself is on its own vlan (Vlan: homesrv) but requires communication with the Vlans:

  • IOT

Table of Contents

Services

myInfra stack

docker, Portainer, promtail and telegraf maintained on myInfra repo.

SSH

Deployed and maintained by ansible role myInfra.dev.homesrv1.

nginx

Using portainer stack (stack name: nginx) connected to this repo. Docker Compose

All configuration is set during docker build.

code-server

Using custom code-server docker image, includes:

  • docker-cli
  • ansible
  • ansible-lint

For more flexibility on bind mount, stack is maintained directly on portainer (stack name: code-server).

docker-compose.yml example.

version: '3'
services:
  code-server:
    container_name: code
    image: git.limbosolutions.com/kb/code-server:latest
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/London
      - PASSWORD=${CODESERVER_PASSWORD}
      - DEFAULT_WORKSPACE=/config/workspace
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - code-server_config:/config
      - code-server_root:/root
      - has_config:/config/workspace/has/volumes/config
      - /:/mnt/hostfs
    networks:
      - code
      - reverseproxy_public
    ports:
      - 8444:8443
    restart: unless-stopped
volumes:
#  zigbee2mqtt_data:
#    name: zigbee2mqtt_data
#    external: true
  code-server_config:
  code-server_root:
  has_config:
    name: has_app_config
    external: true
  #mosquitto_config:
  #  external: true
  #mosquitto_data:
  #  external: true
networks:
  code:
  reverseproxy_public:
    external: true

Home Assistant

Git Repo

Lyrion Music Server (LMS)

Check git repo for more information how to setup Lyrion Music Server docker container. Or git repo for more information about home assistant integration.

Requires music docker volume.

Mosquitto

Git Repo

Wyoming

A peer-to-peer protocol for voice assistants (basically JSONL + PCM audio)

{ "type": "...", "data": { ... }, "data_length": ..., "payload_length": ... }
<data_length bytes (optional)>
<payload_length bytes (optional)>

Used in Rhasspy and Home Assistant for communication with voice services.

This is an open standard of the Open Home Foundation.

For more information about home assistant integration check home assistant repo.

Currently using portainer stack (name: wyoming) with git reference to this repo. docker compose file.

Gitea Continuous deploy action

Links:

Zigbee2mqtt

Zigbee to MQTT bridge, get rid of your proprietary Zigbee bridges

Currently using portainer stack (name: zigbee2mqtt) with git reference to this repo docker compose.

SONOFF Universal Zigbee 3.0 USB Dongle Plus attached on proxmox host.

Patch security on proxmox host. (usb passthrough to lxc container)

#on proxmox hosting server
chown 100000:100020 /dev/ttyUSB0
chown 100000:100020 /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0

Docker devices

....
    devices:
      # Make sure this matched your adapter location
      - /dev/ttyUSB0:/dev/ttyUSB0
....

Links

Proxmox - lxc container

Currently hosted on a proxmox ubuntu container.

#   cat /etc/pve/lxc/105.conf
arch: amd64
cmode: shell
cores: 2
features: fuse=1,keyctl=1,nesting=1
hostname: homesrv01
memory: 1500
net0: name=eth0,bridge=vmbr0,firewall=1,ip6=dhcp,...,type=veth
onboot: 1
ostype: ubuntu
protection: 1
rootfs: local-lvm:vm-105-disk-0,size=32G
swap: 1500
unprivileged: 1
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 none bind,optional,create=file
lxc.cgroup2.devices.allow: c 188:* rwm
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file

lxc.cgroup2.devices.allow and lxc.mount.entry identification

# identify usb pen
lsusb 

# example 
# Bus 001 Device 008: ID 10c4:ea60 Silicon Labs CP210x UART Bridge


#replace with bus and device id
ls -l /dev/bus/usb/001/008

#example result
# crw-rw-r-- 1 root root 189, 7 May 17 15:56 /dev/bus/usb/001/008

# so

#lxc.cgroup2.devices.allow: c 189:* rwm
#lxc.mount.entry: usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 none bind,optional,create=file

ls -l /dev/serial/by-id/
# example result
#lrwxrwxrwx 1 root root 13 May 17 15:56 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 -> ../../ttyUSB0

ls -l /dev/ttyUSB0
#example result
#crw-rw---- 1 root dialout 188, 0 May 17 15:56 /dev/ttyUSB0

#so

#lxc.cgroup2.devices.allow: c 188:* rwm
#lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file

Operating System

# lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:        24.04
Codename:       noble

# uname -r
6.8.4-3-pve

Development, Maintenance and Deployment

Using gitea action for continuous deploys, visual studio code (code workspace) on my machine for maintenance and development related to hosting server, and a docker container with code server for editing docker container volumes.

Ansible scripts can be used locally, remotely or by gitea actions.

Ansible roles

myInfra.dev.homesrv01.core

  • ssh server
  • admin user
  • git package
  • curl package
#execute local
sudo ansible-playbook --connection=local --inventory 127.0.0.1, --limit 127.0.0.1 ansible/core.yml

myInfra.dev.homesrv01

Requires myInfra stack.

#execute local
sudo ansible-playbook --connection=local --inventory 127.0.0.1, --limit 127.0.0.1 ansible/site.yml
# check auto update scripts logs
journalctl -r -t auto-update

fstab

# /etc/fstab
# used by docker volume music
sshfs#media@nas.lan:/home/media /mnt/media@sshfs:nas.lan fuse defaults,_netdev,allow_other,follow_symlinks 0 0
Description
No description provided
Readme 768 KiB
Languages
JSON 100%