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