# 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" - "443:443" environment: # Uncomment this if IPv6 is not enabled on your host - DISABLE_IPV6=true # Uncomment this if IPv6 is not enabled on your host volumes: - ${NGINX_DATA}:/data - ${NGINX_LETSENCRYPT}:/etc/letsencrypt networks: - server-network # --- 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 # --- File Browser --- filebrowser: # Replace with nextcloud image: filebrowser/filebrowser:latest container_name: filebrowser restart: unless-stopped ports: - "8080:80" volumes: - ${FILEBROWSER_DATA}:/srv - ${FILEBROWSER_CONFIG}:/config - ${FILEBROWSER_DATABASE}:/database environment: - FB_DATABASE=/database/filebrowser.db - FB_CONFIG=/config/filebrowser.json env_file: - .env # --- Gitea --- gitea: image: gitea/gitea:latest restart: unless-stopped volumes: - ${GITEA}:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3001:3000" - "22:22" # --- 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 homeassistant-network: driver: bridge