# sudo docker compose down --volumes # sudo docker compose up -d --remove-orphans name: server services: # --- NGINX Proxy Manager --- nginx-proxy-manager: image: "docker.io/jc21/nginx-proxy-manager:latest" restart: unless-stopped container_name: nginx-proxy-manager ports: - "80:80" - "81:81" # Admin interface - "443:443" environment: - DISABLE_IPV6=true volumes: - ${NGINX_DATA}:/data - ${NGINX_LETSENCRYPT}:/etc/letsencrypt networks: - server-network # --- Nextcloud --- nextcloud: # :80 image: nextcloud:latest restart: unless-stopped container_name: nextcloud depends_on: - nextcloud-db - nextcloud-redis environment: - POSTGRES_HOST=nextcloud-db - POSTGRES_DB=nextcloud - POSTGRES_USER=nextcloud - POSTGRES_PASSWORD=${NEXTCLOUD_DB_PASSWORD} - NEXTCLOUD_TRUSTED_DOMAINS=localhost volumes: - ${NEXTCLOUD_DATA}:/var/www/html networks: - server-network - nextcloud-network nextcloud-db: image: postgres:latest restart: unless-stopped container_name: nextcloud-db environment: - POSTGRES_DB=nextcloud - POSTGRES_USER=nextcloud - POSTGRES_PASSWORD=${NEXTCLOUD_DB_PASSWORD} volumes: - ${NEXTCLOUD_DB_DATA}:/var/lib/postgresql/data networks: - nextcloud-network nextcloud-redis: image: redis:alpine restart: unless-stopped container_name: nextcloud-redis command: redis-server --requirepass ${REDIS_PASSWORD} networks: - nextcloud-network # --- Gitea --- gitea: # :3000 image: gitea/gitea:latest container_name: gitea restart: unless-stopped volumes: - ${GITEA}:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro networks: - server-network ports: - "22:22" # # --- Immich Server --- # immich-server: # immich-server:2283 # container_name: immich-server # image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # # extends: # # file: hwaccel.transcoding.yml # # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding # volumes: # # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file # - ${IMMICH_UPLOAD_LOCATION}:/usr/src/app/upload # - /etc/localtime:/etc/localtime:ro # env_file: # - .env # depends_on: # - redis # - database # restart: unless-stopped # healthcheck: # disable: false # networks: # - server-network # immich-machine-learning: # container_name: immich-machine-learning # # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # # Example tag: ${IMMICH_VERSION:-release}-cuda # image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} # # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # # file: hwaccel.ml.yml # # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable # volumes: # - model-cache:/cache # env_file: # - .env # restart: unless-stopped # healthcheck: # disable: false # networks: # - server-network # redis: # container_name: immich-redis # image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177 # healthcheck: # test: redis-cli ping || exit 1 # restart: unless-stopped # networks: # - server-network # database: # container_name: immich-postgres # image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0 # environment: # POSTGRES_PASSWORD: ${IMMICH_DB_PASSWORD} # POSTGRES_USER: ${IMMICH_DB_USERNAME} # POSTGRES_DB: ${IMMICH_DB_DATABASE_NAME} # POSTGRES_INITDB_ARGS: "--data-checksums" # # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs # B_STORAGE_TYPE: "HDD" # volumes: # # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file # - ${IMMICH_DB_DATA_LOCATION}:/var/lib/postgresql/data # restart: unless-stopped # networks: # - server-network # # --- Home Assistant --- # homeassistant: # container_name: homeassistant # image: "ghcr.io/home-assistant/home-assistant:stable" # env_file: # - .env # volumes: # - ${HA_CONFIG}:/config # - /etc/localtime:/etc/localtime:ro # - /run/dbus:/run/dbus:ro # restart: unless-stopped # # devices: # # - /dev/ttyUSB0:/dev/ttyUSB0 # privileged: true # network_mode: host # # ports: # # - "8123:8123" # esphome: # container_name: esphome # image: ghcr.io/esphome/esphome:latest # volumes: # - ${ESPHOME_CONFIG}:/config # - /etc/localtime:/etc/localtime:ro # restart: unless-stopped # privileged: true # network_mode: host # # ports: # # - "6052:6052" # env_file: # - .env # # openwakeword: # # image: homeassistant/amd64-addon-openwakeword:latest # # container_name: openwakeword # # entrypoint: python3 # # command: > # # -m wyoming_openwakeword # # --uri 'tcp://0.0.0.0:10400' # # --preload-model 'ok_nabu' # # --custom-model-dir /share/openwakeword # # env_file: # # - .env # # ports: # # - 10400:10400 # # volumes: # # - ${OWW_DATA}:/data # # - ${OWW_CUSTOM_MODEL_DIR}:/share/openwakeword # # restart: unless-stopped # piper: # image: homeassistant/amd64-addon-piper:latest # container_name: piper # entrypoint: python3 # command: > # -m wyoming_piper # --piper '/usr/share/piper/piper' # --uri 'tcp://0.0.0.0:10200' # --length-scale "1" # --noise-scale "0.667" # --speaker "0" # --voice "en_US-lessac-medium" # --max-piper-procs "1" # --data-dir /data # --data-dir /share/piper # --download-dir /data # network_mode: host # # ports: # # - "10200:10200" # volumes: # - ${PIPER_DATA}:/data # restart: unless-stopped # whisper: # image: homeassistant/amd64-addon-whisper:latest # container_name: whisper # entrypoint: python3 # command: > # -m wyoming_faster_whisper # --uri tcp://0.0.0.0:10300 # --model small-int8 # --beam-size 1 # --language en # --data-dir /data # --download-dir /data # network_mode: host # Needed to use localhost in HA interface # # ports: # # - "10300:10300" # env_file: # - .env # volumes: # - ${WHISPER_DATA}:/data # restart: unless-stopped # # --- Pi-hole --- # # pihole: # # container_name: pihole # # image: pihole/pihole:latest # # ports: # # # DNS Ports # # - "53:53/tcp" # # - "53:53/udp" # # # Default HTTP Port # # - "2100:80/tcp" # # - "2101:443/tcp" # # env_file: # # - .env # # volumes: # # - "${PIHOLE}:/etc/pihole" # # cap_add: # # # Optional, if Pi-hole should get some more processing time # # - SYS_NICE # # restart: unless-stopped # # --- Prosody XMPP Server --- # prosody: # image: prosody/prosody:latest # container_name: prosody # restart: unless-stopped # ports: # - "5222:5222" # XMPP client connections # - "5269:5269" # XMPP server-to-server connections # - "5280:5280" # HTTP/WebSocket connections # - "5281:5281" # HTTPS/WebSocket connections (if SSL configured) # volumes: # - ${PROSODY_CONFIG}:/etc/prosody # - ${PROSODY_LOGS}:/var/log/prosody # - ${PROSODY_MODULES}:/usr/lib/prosody-modules # env_file: # - .env # # --- N8n Automation --- # n8n: # image: n8nio/n8n:latest # restart: always # # N8n will not be directly exposed to the host, Nginx Proxy Manager will proxy to it # # Therefore, no 'ports' mapping is needed here for external access. # # It will be accessible on the Docker network by Nginx Proxy Manager. # environment: # - N8N_HOST=${N8N_HOST} # - N8N_PORT=5678 # - N8N_PROTOCOL=https # Nginx Proxy Manager will handle HTTPS # - NODE_ENV=production # - WEBHOOK_URL=https://${N8N_HOST}/ # - GENERIC_TIMEZONE=${TZ} # - N8N_RUNNERS_ENABLED=true # - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true # volumes: # - ${N8N_DATA}:/home/node/.n8n # - ${N8N_FILES}:/files # env_file: # - .env volumes: model-cache: networks: server-network: driver: bridge nextcloud-network: driver: bridge homeassistant-network: driver: bridge