2022-07-24 15:24:53 +02:00
|
|
|
version: '3.6'
|
|
|
|
|
2022-07-25 15:24:57 +02:00
|
|
|
#
|
|
|
|
# ISOLATED NETWORKS
|
|
|
|
#
|
|
|
|
|
2022-07-24 15:24:53 +02:00
|
|
|
networks:
|
2022-07-25 23:40:38 +02:00
|
|
|
transmission_network:
|
|
|
|
name: transmission_network
|
|
|
|
jellyfin_network:
|
|
|
|
name: jellyfin_network
|
|
|
|
gitea_network:
|
|
|
|
name: gitea_network
|
|
|
|
nextcloud_network:
|
|
|
|
name: nextcloud_network
|
2022-07-24 21:27:44 +02:00
|
|
|
autism_app_network:
|
|
|
|
name: autism_app_network
|
2022-07-25 16:19:03 +02:00
|
|
|
kimai_network:
|
|
|
|
name: kimai_network
|
2022-07-25 23:14:17 +02:00
|
|
|
photoprism_network:
|
|
|
|
name: photoprism_network
|
2022-08-06 11:22:43 +02:00
|
|
|
ha_network:
|
|
|
|
name: ha_network
|
2022-07-24 15:24:53 +02:00
|
|
|
|
|
|
|
services:
|
2022-07-25 15:24:57 +02:00
|
|
|
|
2022-07-24 15:24:53 +02:00
|
|
|
#
|
|
|
|
# NGINX AND CERTBOT
|
|
|
|
#
|
2022-07-25 15:24:57 +02:00
|
|
|
|
2022-07-24 15:24:53 +02:00
|
|
|
nginx:
|
|
|
|
image: nginx:latest
|
|
|
|
container_name: nginx
|
|
|
|
restart: unless-stopped
|
|
|
|
depends_on:
|
|
|
|
- transmission
|
|
|
|
- jellyfin
|
|
|
|
- gitea
|
|
|
|
- nextcloud
|
2022-07-24 16:11:50 +02:00
|
|
|
- nextcloud_db
|
2022-07-24 21:27:44 +02:00
|
|
|
- autism_app
|
2022-07-25 16:19:03 +02:00
|
|
|
- kimai
|
|
|
|
- kimai_db
|
2022-07-25 23:14:17 +02:00
|
|
|
- photoprism
|
2022-08-06 11:22:43 +02:00
|
|
|
- homeassistant
|
|
|
|
- ha_postgres
|
|
|
|
- mqtt
|
2022-07-24 15:24:53 +02:00
|
|
|
ports:
|
|
|
|
- 80:80
|
|
|
|
- 443:443
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_CONFIG_DIR}/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
|
|
|
- ${DOCKER_CONFIG_DIR}/certbot/conf:/etc/letsencrypt:ro
|
|
|
|
- ${DOCKER_CONFIG_DIR}/certbot/www:/var/www/certbot:ro
|
2022-08-06 11:22:43 +02:00
|
|
|
- ${DOCKER_LOG_DIR}/:/logs
|
2022-07-24 15:24:53 +02:00
|
|
|
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
|
|
|
|
networks:
|
2022-07-25 23:40:38 +02:00
|
|
|
- transmission_network
|
|
|
|
- jellyfin_network
|
|
|
|
- gitea_network
|
|
|
|
- nextcloud_network
|
2022-07-24 21:27:44 +02:00
|
|
|
- autism_app_network
|
2022-07-25 16:19:03 +02:00
|
|
|
- kimai_network
|
2022-07-25 23:14:17 +02:00
|
|
|
- photoprism_network
|
2022-08-06 11:22:43 +02:00
|
|
|
- ha_network
|
2022-07-24 15:24:53 +02:00
|
|
|
|
|
|
|
certbot:
|
|
|
|
image: certbot/certbot:latest
|
|
|
|
container_name: certbot
|
|
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_CONFIG_DIR}/certbot/conf:/etc/letsencrypt:rw
|
|
|
|
- ${DOCKER_CONFIG_DIR}/certbot/www:/var/www/certbot:rw
|
|
|
|
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
|
|
|
|
|
|
|
|
#
|
2022-07-24 20:50:52 +02:00
|
|
|
# HOMESERVER SERVICES
|
2022-07-24 15:24:53 +02:00
|
|
|
#
|
|
|
|
|
|
|
|
transmission:
|
|
|
|
image: lscr.io/linuxserver/transmission:latest
|
|
|
|
container_name: transmission
|
|
|
|
restart: unless-stopped
|
|
|
|
environment:
|
|
|
|
- PUID=1000
|
|
|
|
- PGID=1000
|
|
|
|
- TZ=Europe/London
|
|
|
|
- TRANSMISSION_WEB_HOME=/combustion-release/
|
|
|
|
- USER=${TRANSMISSION_USERNAME}
|
|
|
|
- PASS=${TRANSMISSION_PASSWORD}
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_CONFIG_DIR}/transmission/config:/config
|
|
|
|
- ${DOCKER_DATA_DIR}/transmission/downloads:/downloads
|
|
|
|
- ${DOCKER_DATA_DIR}/transmission/watch:/watch
|
|
|
|
networks:
|
2022-07-25 23:40:38 +02:00
|
|
|
- transmission_network
|
2022-07-24 15:24:53 +02:00
|
|
|
|
|
|
|
jellyfin:
|
|
|
|
image: lscr.io/linuxserver/jellyfin:latest
|
|
|
|
container_name: jellyfin
|
|
|
|
restart: unless-stopped
|
2022-07-25 15:24:57 +02:00
|
|
|
group_add:
|
|
|
|
- "109" # cat /etc/group | grep render
|
|
|
|
- "44" # cat /etc/group | grep video
|
2022-07-24 15:24:53 +02:00
|
|
|
environment:
|
|
|
|
- PUID=1000
|
|
|
|
- PGID=1000
|
|
|
|
- TZ=Europe/London
|
|
|
|
- JELLYFIN_PublishedServerUrl=${JELLYFIN_DOMAIN_NAME}
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_CONFIG_DIR}/jellyfin/library:/config
|
|
|
|
- /mnt/drive-one/media/series:/data/series
|
|
|
|
- /mnt/drive-one/media/movies:/data/movies
|
2022-07-25 15:24:57 +02:00
|
|
|
- /dev/shm/JellyfinTranscode:/transcode
|
|
|
|
devices:
|
|
|
|
- /dev/dri/renderD128:/dev/dri/renderD128
|
|
|
|
- /dev/dri/card0:/dev/dri/card0
|
2022-07-24 15:24:53 +02:00
|
|
|
networks:
|
2022-07-25 23:40:38 +02:00
|
|
|
- jellyfin_network
|
2022-07-24 15:24:53 +02:00
|
|
|
|
|
|
|
gitea:
|
|
|
|
image: gitea/gitea:latest
|
|
|
|
container_name: gitea
|
|
|
|
restart: unless-stopped
|
|
|
|
environment:
|
|
|
|
- USER_UID=1000
|
|
|
|
- USER_GID=1000
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_DATA_DIR}/gitea:/data
|
|
|
|
- /etc/timezone:/etc/timezone:ro
|
|
|
|
- /etc/localtime:/etc/localtime:ro
|
|
|
|
networks:
|
2022-07-25 23:40:38 +02:00
|
|
|
- gitea_network
|
2022-07-24 15:24:53 +02:00
|
|
|
|
|
|
|
nextcloud:
|
|
|
|
image: nextcloud:latest
|
|
|
|
container_name: nextcloud
|
|
|
|
restart: unless-stopped
|
|
|
|
depends_on:
|
2022-07-24 16:11:50 +02:00
|
|
|
- nextcloud_db
|
2022-07-24 15:24:53 +02:00
|
|
|
environment:
|
|
|
|
- POSTGRES_HOST=nextcloud_db
|
|
|
|
- POSTGRES_DB=nextcloud
|
|
|
|
- POSTGRES_USER=${POSTGRES_NEXTCLOUD_USERNAME}
|
|
|
|
- POSTGRES_PASSWORD=${POSTGRES_NEXTCLOUD_PASSWORD}
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_DATA_DIR}/nextcloud:/var/www/html
|
|
|
|
networks:
|
2022-07-25 23:40:38 +02:00
|
|
|
- nextcloud_network
|
2022-07-24 15:24:53 +02:00
|
|
|
|
|
|
|
nextcloud_db:
|
|
|
|
image: postgres:latest
|
|
|
|
container_name: nextcloud_db
|
|
|
|
hostname: nextcloud_db
|
|
|
|
restart: unless-stopped
|
|
|
|
environment:
|
|
|
|
- POSTGRES_DB=nextcloud
|
|
|
|
- POSTGRES_USER=${POSTGRES_NEXTCLOUD_USERNAME}
|
|
|
|
- POSTGRES_PASSWORD=${POSTGRES_NEXTCLOUD_PASSWORD}
|
2022-07-25 12:04:59 +02:00
|
|
|
volumes:
|
|
|
|
- ${DOCKER_DATA_DIR}/nextcloud_db:/var/lib/postgresql/data
|
2022-07-24 15:24:53 +02:00
|
|
|
networks:
|
2022-07-25 23:40:38 +02:00
|
|
|
- nextcloud_network
|
2022-07-25 15:24:57 +02:00
|
|
|
|
2022-07-25 16:20:06 +02:00
|
|
|
kimai: # https://techoverflow.net/2021/03/08/a-modern-kimai-setup-using-docker-compose-and-nginx/
|
2022-07-25 16:19:03 +02:00
|
|
|
image: kimai/kimai2:apache-debian-master-prod
|
|
|
|
container_name: kimai
|
|
|
|
restart: unless-stopped
|
|
|
|
environment:
|
|
|
|
- APP_ENV=prod
|
|
|
|
- TRUSTED_HOSTS=localhost,${KIMAI_HOSTNAME}
|
|
|
|
- ADMINMAIL=${KIMAI_ADMIN_EMAIL}
|
|
|
|
- ADMINPASS=${KIMAI_ADMIN_PASSWORD}
|
|
|
|
- DATABASE_URL=mysql://kimai:${KIMAI_MARIADB_PASSWORD}@kimai_db/kimai
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_DATA_DIR}/kimai:/opt/kimai/var
|
|
|
|
depends_on:
|
|
|
|
- kimai_db
|
|
|
|
networks:
|
|
|
|
- kimai_network
|
|
|
|
|
|
|
|
kimai_db:
|
|
|
|
image: mariadb:latest
|
|
|
|
container_name: kimai_db
|
|
|
|
restart: unless-stopped
|
|
|
|
environment:
|
|
|
|
- MYSQL_DATABASE=kimai
|
|
|
|
- MYSQL_USER=kimai
|
|
|
|
- MYSQL_PASSWORD=${KIMAI_MARIADB_PASSWORD}
|
|
|
|
- MYSQL_ROOT_PASSWORD=${KIMAI_MARIADB_ROOT_PASSWORD}
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_DATA_DIR}/kimai_db:/var/lib/mysql
|
|
|
|
command: --default-storage-engine innodb
|
|
|
|
healthcheck:
|
|
|
|
test: mysqladmin -p${KIMAI_MARIADB_ROOT_PASSWORD} ping -h localhost
|
|
|
|
interval: 20s
|
|
|
|
start_period: 10s
|
|
|
|
timeout: 10s
|
|
|
|
retries: 3
|
|
|
|
networks:
|
|
|
|
- kimai_network
|
|
|
|
|
2022-07-25 23:40:38 +02:00
|
|
|
photoprism: # https://docs.photoprism.app/getting-started/docker-compose/#command-line-interface
|
2022-07-25 23:14:17 +02:00
|
|
|
image: photoprism/photoprism:latest
|
2022-08-07 14:49:54 +02:00
|
|
|
restart: unless-stopped
|
2022-07-25 23:14:17 +02:00
|
|
|
container_name: photoprism
|
|
|
|
security_opt:
|
|
|
|
- seccomp:unconfined
|
|
|
|
- apparmor:unconfined
|
|
|
|
environment:
|
|
|
|
PHOTOPRISM_ADMIN_PASSWORD: "insecure" # YOUR INITIAL ADMIN PASSWORD (MINIMUM 8 CHARACTERS, USERNAME "admin")
|
|
|
|
PHOTOPRISM_SITE_URL: "https://photos.spanskiduh.xyz/" # public server URL incl http:// or https:// and /path, :port is optional
|
|
|
|
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video)
|
|
|
|
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip)
|
|
|
|
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic
|
2022-08-06 11:22:43 +02:00
|
|
|
PHOTOPRISM_PUBLIC: "false" # no authentication required (disables password protection)
|
2022-07-25 23:14:17 +02:00
|
|
|
PHOTOPRISM_READONLY: "true" # do not modify originals directory (reduced functionality)
|
|
|
|
PHOTOPRISM_EXPERIMENTAL: "true" # enables experimental features
|
|
|
|
PHOTOPRISM_DISABLE_CHOWN: "false" # disables storage permission updates on startup
|
|
|
|
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server
|
|
|
|
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API
|
|
|
|
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow
|
|
|
|
PHOTOPRISM_DISABLE_FACES: "false" # disables facial recognition
|
|
|
|
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification
|
|
|
|
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW files
|
|
|
|
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW files (reduces performance)
|
|
|
|
PHOTOPRISM_JPEG_QUALITY: 85 # image quality, a higher value reduces compression (25-100)
|
|
|
|
PHOTOPRISM_DETECT_NSFW: "true" # flag photos as private that MAY be offensive (requires TensorFlow)
|
|
|
|
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive
|
2022-08-06 11:22:43 +02:00
|
|
|
PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server
|
2022-07-25 23:14:17 +02:00
|
|
|
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
|
|
|
|
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description
|
2022-08-06 11:22:43 +02:00
|
|
|
PHOTOPRISM_SITE_AUTHOR: "spanskiduh" # meta site author
|
2022-07-25 23:14:17 +02:00
|
|
|
devices:
|
|
|
|
- "/dev/dri:/dev/dri"
|
|
|
|
working_dir: "/photoprism" # do not change or remove
|
|
|
|
volumes:
|
2022-08-06 11:22:43 +02:00
|
|
|
- "/home/hsrv/d_personal/data/nextcloud/data/spanskiduh/files/InstantUpload/:/photoprism/originals" # Original media files (DO NOT REMOVE)
|
2022-07-25 23:14:17 +02:00
|
|
|
- "${DOCKER_DATA_DIR}/photoprism:/photoprism/storage" # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE)
|
|
|
|
networks:
|
|
|
|
- photoprism_network
|
|
|
|
|
2022-07-24 20:50:52 +02:00
|
|
|
#
|
2022-07-25 23:40:38 +02:00
|
|
|
# IOT MANAGEMENT & DASHBOARD (todo)
|
2022-07-24 20:50:52 +02:00
|
|
|
#
|
|
|
|
|
2022-08-06 11:22:43 +02:00
|
|
|
|
|
|
|
mqtt:
|
|
|
|
image: eclipse-mosquitto:latest
|
|
|
|
container_name: mqtt
|
|
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
|
|
- 1883:1883
|
|
|
|
- 9001:9001
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_LOG_DIR}:/mosquitto/log
|
|
|
|
- ${DOCKER_DATA_DIR}/mqtt:/mosquitto/data
|
|
|
|
- ${DOCKER_CONFIG_DIR}/mqtt:/mosquitto/config
|
|
|
|
networks:
|
|
|
|
- ha_network
|
|
|
|
|
|
|
|
ha_postgres:
|
|
|
|
image: postgres:latest
|
|
|
|
container_name: ha_postgres
|
2022-07-25 12:04:59 +02:00
|
|
|
restart: unless-stopped
|
|
|
|
environment:
|
2022-08-06 11:22:43 +02:00
|
|
|
- POSTGRES_DB=ha
|
|
|
|
- POSTGRES_USER=${POSTGRES_HA_USERNAME}
|
|
|
|
- POSTGRES_PASSWORD=${POSTGRES_HA_PASSWORD}
|
2022-07-25 12:04:59 +02:00
|
|
|
volumes:
|
2022-08-06 11:22:43 +02:00
|
|
|
- ${DOCKER_DATA_DIR}/ha_postgres:/var/lib/postgresql/data
|
|
|
|
- /etc/localtime:/etc/localtime:ro
|
|
|
|
networks:
|
|
|
|
- ha_network
|
|
|
|
|
|
|
|
homeassistant:
|
|
|
|
depends_on:
|
|
|
|
- ha_postgres
|
|
|
|
container_name: homeassistant
|
|
|
|
image: homeassistant/home-assistant:latest
|
|
|
|
restart: unless-stopped
|
|
|
|
privileged: true
|
|
|
|
command: [ "python", "-m", "homeassistant", "--config", "/config", "--log-rotate-days", '3' ]
|
|
|
|
volumes:
|
|
|
|
- ${DOCKER_CONFIG_DIR}/homeassistant:/config
|
|
|
|
- /etc/localtime:/etc/localtime:ro
|
|
|
|
- /etc/timezone:/etc/timezone:ro
|
2022-07-25 12:04:59 +02:00
|
|
|
networks:
|
2022-08-06 11:22:43 +02:00
|
|
|
- ha_network
|
2022-07-25 12:04:59 +02:00
|
|
|
|
2022-07-24 20:50:52 +02:00
|
|
|
#
|
|
|
|
# OTHER SERVICES
|
|
|
|
#
|
2022-07-25 12:04:59 +02:00
|
|
|
|
2022-07-24 21:27:44 +02:00
|
|
|
autism_app:
|
|
|
|
container_name: autism_app
|
|
|
|
image: autism_app
|
2022-07-25 12:04:59 +02:00
|
|
|
restart: unless-stopped
|
2022-07-24 21:27:44 +02:00
|
|
|
build:
|
|
|
|
context: ./autism-app
|
|
|
|
volumes:
|
|
|
|
- ./autism-app/src:/app/src
|
|
|
|
networks:
|
|
|
|
- autism_app_network
|