d_personal/docker-compose.yml

319 lines
9.5 KiB
YAML

version: '3.6'
#
# INTERNAL NETWORKS
#
networks:
nextcloud_network:
name: nextcloud_network
ha_network:
name: ha_network
joplin_network:
name: joplin_network
services:
#
# CERTIFICATE RENEWAL
#
certbot:
image: certbot/certbot:latest
container_name: certbot
restart: unless-stopped
volumes:
- /etc/letsencrypt:/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;'"
#
# MOVIE AND SERIES MANAGEMENT
#
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
- ${TRANSMISSION_DOWNLOAD_DIR}:/downloads
- ${DOCKER_DATA_DIR}/transmission/watch:/watch
ports:
- 9091:9091
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
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- JELLYFIN_PublishedServerUrl=${JELLYFIN_DOMAIN_NAME}
#- DOCKER_MODS=linuxserver/mods:jellyfin-amd
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/:/dev/dri/
ports:
- 8096:8096
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- ${DOCKER_CONFIG_DIR}/radarr:/config
- /mnt/drive-one/media/movies:/movies
- ${TRANSMISSION_DOWNLOAD_DIR}:/downloads
ports:
- 7878:7878
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- ${DOCKER_CONFIG_DIR}/sonarr:/config
- /mnt/drive-one/media/series:/tv
- ${TRANSMISSION_DOWNLOAD_DIR}:/downloads
ports:
- 8989:8989
#
# SELFHOSTED GIT
#
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
ports:
- 3080:3000
#
# SELFHOSTED CLOUD
#
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: unless-stopped
depends_on:
- nextcloud_db
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
ports:
- 42069:80
networks:
- nextcloud_network
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}
volumes:
- ${DOCKER_DATA_DIR}/nextcloud_db:/var/lib/postgresql/data
networks:
- nextcloud_network
#
# SELFHOSTED PHOTOS
#
photoprism: # https://docs.photoprism.app/getting-started/docker-compose/#command-line-interface
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/:/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)
ports:
- 2080:2342
#
# NOTE TAKING
#
joplin_server:
image: joplin/server:latest
container_name: joplin_server
depends_on:
- joplin_db
restart: unless-stopped
environment:
- APP_PORT=22300
- APP_BASE_URL=https://joplin.spanskiduh.xyz
- DB_CLIENT=pg
- POSTGRES_PASSWORD=${JOPLIN_POSTGRES_PASSWORD}
- POSTGRES_DATABASE=${JOPLIN_POSTGRES_DATABASE}
- POSTGRES_USER=${JOPLIN_POSTGRES_USER}
- POSTGRES_PORT=${JOPLIN_POSTGRES_PORT}
- POSTGRES_HOST=joplin_db
ports:
- "22300:22300"
networks:
- joplin_network
joplin_db:
image: postgres:latest
container_name: joplin_db
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=${JOPLIN_POSTGRES_PASSWORD}
- POSTGRES_USER=${JOPLIN_POSTGRES_USER}
- POSTGRES_DB=${JOPLIN_POSTGRES_DATABASE}
volumes:
- ${DOCKER_DATA_DIR}/postgres:/var/lib/postgresql/data
networks:
- joplin_network
#
# MQTT, IOT DATABASE AND HOMEASSISTANT
#
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:/osquitto/config
networks:
- ha_network
ha_postgres:
image: postgres:latest
container_name: ha_postgres
restart: unless-stopped
environment:
- POSTGRES_DB=ha
- POSTGRES_USER=${POSTGRES_HA_USERNAME}
- POSTGRES_PASSWORD=${POSTGRES_HA_PASSWORD}
volumes:
- ${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
- ${DOCKER_DATA_DIR}/motioneye/:/media
ports:
- 8123:8123
networks:
- ha_network
#
# CAMERA SYSTEM
#
motioneye:
container_name: motion_eye
image: ccrisan/motioneye:master-amd64
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- ${DOCKER_CONFIG_DIR}/motioneye/:/etc/motioneye
- ${DOCKER_DATA_DIR}/motioneye/:/var/lib/motioneye
ports:
- 8765:8765
- 8081:8081
#
# AUTISM APPLICATION
#
autism_app:
container_name: autism_app
image: autism_app
restart: unless-stopped
build:
context: ./autism-app
volumes:
- ./autism-app/src:/app/src
ports:
- 3000:3000