Setup Docker-Compose Services
Code:
1. Install Docker
curl -sSL https://get.docker.com | sh
2. Add permission to Pi User to run Docker Commands
sudo usermod -aG docker USERNAME
3. IMPORTANT! Install proper dependencies
sudo apt install libffi-dev libssl-dev -y
sudo apt install python3-dev -y
sudo apt install python3 python3-pip -y
sudo apt install python3-setuptools -y
sudo apt install python3-wheel -y
sudo apt install python3-cryptography -y
pip3 install wheel
4 Install Docker Compose
sudo pip3 install docker-compose
docker-compose --version
5. Create YAML-File
nano docker-compose.yml
# docker-compose -f docker-compose.yml up -d
version: "3.7"
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /root/.docker/config.json:/config.json
command: watchtower Node-Red grafana root_influxdb_1 bitwarden homeassistant mosquitto root_esphome_1 portainer --schedule '0 0 0 * * *' --cleanup --debug
environment:
- TZ='Europe/Berlin'
#- REPO_USER='githubuser'
#- REPO_PASS='password'
#- WATCHTOWER_NOTIFICATIONS=email
#- WATCHTOWER_NOTIFICATION_EMAIL_FROM=server@Domain.tld
#- WATCHTOWER_NOTIFICATION_EMAIL_TO=mail@domain.tld
#- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=mail.domain.tld
#- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=mail@domain.tld
#- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=Secret
restart: unless-stopped
portainer:
image: portainer/portainer
container_name: portainer
restart: unless-stopped
command: -H unix:///var/run/docker.sock
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/docker/portainer/data:/data
- /opt/docker/shared:/shared
healthcheck:
disable: true
homeassistant:
container_name: homeassistant
restart: unless-stopped
image: homeassistant/amd64-homeassistant
network_mode: "host"
devices:
- /dev/ttyUSB*
volumes:
- /opt/docker/homeassistant:/config
- /etc/localtime:/etc/localtime:ro
ports:
- "8123:8123"
privileged: true
healthcheck:
disable: true
environment:
- TZ=Europe/Berlin
mqtt:
container_name: mosquitto
image: eclipse-mosquitto:latest
user: "1003:998"
ports:
- "1883:1883"
- "9001:9001"
- "8883:8883"
depends_on:
- homeassistant
restart: unless-stopped
network_mode: host
volumes:
- /opt/docker/mosquitto/config:/mosquitto/config
- /opt/docker/mosquitto/log:/mosquitto/log
- /opt/docker/mosquitto/data/:/mosquitto/data
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=Europe/Berlin
bitwarden:
container_name: bitwarden
restart: unless-stopped
image: bitwardenrs/server
restart: unless-stopped
volumes:
- /opt/docker/bitwarden:/data
environment:
WEBSOCKET_ENABLED: "true" # Required to use websockets
SIGNUPS_ALLOWED: "false" # set to false to disable signups
INVITATIONS_ALLOWED: "true"
DOMAIN: "http://DOMAIN:PORT"
WEB_VAULT_ENABLED: "true"
SHOW_PASSWORD_HINT: "false"
DOMAIN: "https://DOMAIN:PORT"
SMTP_HOST: "MAILSERVER"
SMTP_FROM: "EMAIL"
SMTP_FROM_NAME: "Bitwarden Server"
SMTP_PORT: "587"
SMTP_SSL: "true"
SMTP_USERNAME: "EMAIL"
SMTP_PASSWORD: "PASSWORD"
ROCKET_WORKERS: "15"
ICON_CACHE_FOLDER: "/opt/docker/bitwarden/icon_cache"
ATTACMENTS_FOLDER: "/opt/docker/bitwarden/attachments"
ports:
- 3012:3012
- 8088:80
healthcheck:
disable: true
esphome:
image: esphome/esphome:latest
network_mode: "host"
restart: unless-stopped
environment:
ESPHOME_DASHBOARD_USE_PING: "true"
depends_on:
- homeassistant
ports:
- "6052-6052"
- "6123-6123"
volumes:
- /opt/docker/homeassistant/esphome:/config
healthcheck:
disable: true
influxdb:
image: influxdb:latest
restart: unless-stopped
volumes:
# Mount for influxdb data directory
- /opt/docker/influxdb/data:/var/lib/influxdb
environment:
- INFLUXDB_DB=home_automation
- INFLUXDB_HTTP_AUTH_ENABLED=true
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=PASSWORD
ports:
- 8086:8086
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
user: "0"
links:
- influxdb
volumes:
- /opt/docker/grafana:/var/lib/grafana
# sudo mkdir -p /srv/docker/grafana/data; chown 1003:998 /srv/docker/grafana/data
ports:
- 3000:3000
environment:
- GF_SERVER_ROOT_URL=DOMAIN:PORT
- GF_SECURITY_ADMIN_PASSWORD=PASSWORD
- GF_SECURITY_ADMIN_USER=admin
- GF_SMTP_ENABLED=true
- GF_SMTP_HOST=MAILSERVER:587
- GF_SMTP_USER=EMAIL
- GF_SMTP_FROM_ADDRESS=EMAIL
- GF_SMTP_PASSWORD=PASSWORD
- GF_USERS_ALLOW_SIGN_UP=false
- GF_ALERTING_ERROR_OR_TIMEOUT=keep_state
depends_on:
- influxdb
nodered:
image: nodered/node-red-docker
container_name: Node-Red
restart: unless-stopped
user: "1000:1000"
volumes:
- /opt/docker/nodered:/data
restart: unless-stopped
ports:
- "1880:1880"
6. Run Installation / Update
docker-compose -f docker-compose.yml up -d
7. Optional (NODE-RED Admin Auth in Docker)
7.1 npm install -g --unsafe-perm node-red-admin
7.2 cd /opt/docker/nodered
7.3 node-red-admin hash-pw
7.5 Copy hash-pw
7.4 nano settings.js
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "Enter hash-pw",
permissions: "*"
}]
},
8. Setup influxdb
8.1 docker container ls
8.2 docker exec -it CONTAINER_NAME_OF_INFLUX influx
8.3 create database DATABASENAME
8.4 show databases
8.5 use DATABASENAME
8.6 select * from WHATEVER_YOU_INPUT
8.7 exit