d_personal/docker-compose.yml

275 lines
9.0 KiB
YAML
Raw Normal View History

2022-07-24 15:24:53 +02:00
version: '3.6'
#
# 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 12:04:59 +02:00
gladys_network:
name: gladys_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-07-24 15:24:53 +02:00
services:
2022-07-24 15:24:53 +02:00
#
# NGINX AND CERTBOT
#
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 12:04:59 +02:00
- gladys
2022-07-25 16:19:03 +02:00
- kimai
- kimai_db
2022-07-25 23:14:17 +02:00
- photoprism
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
- ${NGINX_LOG_DIR}/:/logs
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 12:04:59 +02:00
- gladys_network
2022-07-25 16:19:03 +02:00
- kimai_network
2022-07-25 23:14:17 +02:00
- photoprism_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
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
- /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 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
#restart: unless-stopped
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
PHOTOPRISM_PUBLIC: "false" # no authentication required (disables password protection)
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
PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description
PHOTOPRISM_SITE_AUTHOR: "spanskiduh" # meta site author
devices:
- "/dev/dri:/dev/dri"
working_dir: "/photoprism" # do not change or remove
volumes:
- "/home/hsrv/d_personal/data/nextcloud/data/spanskiduh/files/InstantUpload/Camera:/photoprism/originals" # Original media files (DO NOT REMOVE)
- "${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-07-25 12:04:59 +02:00
gladys:
image: gladysassistant/gladys:v4
container_name: gladys
privileged: true
restart: unless-stopped
environment:
NODE_ENV: production
SQLITE_FILE_PATH: /var/lib/gladysassistant/gladys-production.db
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ${DOCKER_DATA_DIR}/gladysassistant:/var/lib/gladysassistant
- /dev:/dev
networks:
- gladys_network
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