diff --git a/stacks/apps/homeassistant.yml b/stacks/apps/homeassistant.yml new file mode 100644 index 0000000..60621c2 --- /dev/null +++ b/stacks/apps/homeassistant.yml @@ -0,0 +1,33 @@ +version: '3.9' + +services: + homeassistant: + image: ghcr.io/home-assistant/home-assistant:2024.8.3 + environment: + - TZ=America/New_York + volumes: + - ha_config:/config + networks: + - traefik-public + deploy: + placement: + constraints: + - "node.labels.role==core" + labels: + - traefik.enable=true + - traefik.http.routers.ha.rule=Host(`ha.localhost`) + - traefik.http.routers.ha.entrypoints=websecure + - traefik.http.routers.ha.tls=true + - traefik.http.services.ha.loadbalancer.server.port=8123 + +volumes: + ha_config: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,rw + device: :/export/homeassistant/config + +networks: + traefik-public: + external: true diff --git a/stacks/apps/immich.yml b/stacks/apps/immich.yml new file mode 100644 index 0000000..6ce97e2 --- /dev/null +++ b/stacks/apps/immich.yml @@ -0,0 +1,56 @@ +version: '3.9' + +services: + immich_server: + image: ghcr.io/immich-app/immich-server:v1.119.0 + environment: + DB_HOST: postgresql_primary + DB_PORT: 5432 + DB_USERNAME: postgres + DB_PASSWORD_FILE: /run/secrets/pg_root_password + DB_DATABASE_NAME: immich + secrets: + - pg_root_password + networks: + - traefik-public + - database-network + volumes: + - immich_data:/usr/src/app/upload + deploy: + labels: + - traefik.enable=true + - traefik.http.routers.immich.rule=Host(`immich.localhost`) + - traefik.http.routers.immich.entrypoints=websecure + - traefik.http.routers.immich.tls=true + - traefik.http.services.immich.loadbalancer.server.port=3001 + + immich_machine_learning: + image: ghcr.io/immich-app/immich-machine-learning:v1.119.0 + deploy: + resources: + reservations: + devices: + - capabilities: [gpu] + device_ids: ["0"] + volumes: + - immich_ml:/cache + +volumes: + immich_data: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,rw + device: :/export/immich/data + immich_ml: + driver: local + +secrets: + pg_root_password: + external: true + +networks: + traefik-public: + external: true + database-network: + external: true diff --git a/stacks/apps/jellyfin.yml b/stacks/apps/jellyfin.yml new file mode 100644 index 0000000..b4db50e --- /dev/null +++ b/stacks/apps/jellyfin.yml @@ -0,0 +1,52 @@ +version: '3.9' + +services: + jellyfin: + image: jellyfin/jellyfin:10.9.10 + environment: + - JELLYFIN_PublishedServerUrl=jellyfin.localhost + volumes: + - jellyfin_config:/config + - jellyfin_cache:/cache + - media_movies:/media/movies:ro + - media_tv:/media/tv:ro + networks: + - traefik-public + deploy: + resources: + reservations: + devices: + - capabilities: [gpu] + device_ids: ["0"] + labels: + - traefik.enable=true + - traefik.http.routers.jellyfin.rule=Host(`jellyfin.localhost`) + - traefik.http.routers.jellyfin.entrypoints=websecure + - traefik.http.routers.jellyfin.tls=true + - traefik.http.services.jellyfin.loadbalancer.server.port=8096 + +volumes: + jellyfin_config: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,rw + device: :/export/jellyfin/config + jellyfin_cache: + driver: local + media_movies: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,ro + device: :/export/media/movies + media_tv: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,ro + device: :/export/media/tv + +networks: + traefik-public: + external: true diff --git a/stacks/apps/nextcloud.yml b/stacks/apps/nextcloud.yml new file mode 100644 index 0000000..3cb9551 --- /dev/null +++ b/stacks/apps/nextcloud.yml @@ -0,0 +1,42 @@ +version: '3.9' + +services: + nextcloud: + image: nextcloud:27.1.3 + environment: + - MYSQL_HOST=mariadb_primary + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud + - MYSQL_PASSWORD_FILE=/run/secrets/nextcloud_db_password + secrets: + - nextcloud_db_password + volumes: + - nextcloud_data:/var/www/html + networks: + - traefik-public + - database-network + deploy: + labels: + - traefik.enable=true + - traefik.http.routers.nextcloud.rule=Host(`nextcloud.localhost`) + - traefik.http.routers.nextcloud.entrypoints=websecure + - traefik.http.routers.nextcloud.tls=true + - traefik.http.services.nextcloud.loadbalancer.server.port=80 + +volumes: + nextcloud_data: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,rw + device: :/export/nextcloud/html + +secrets: + nextcloud_db_password: + external: true + +networks: + traefik-public: + external: true + database-network: + external: true diff --git a/stacks/apps/paperless.yml b/stacks/apps/paperless.yml new file mode 100644 index 0000000..d8540c5 --- /dev/null +++ b/stacks/apps/paperless.yml @@ -0,0 +1,50 @@ +version: '3.9' + +services: + paperless: + image: paperlessngx/paperless-ngx:2.10.3 + environment: + PAPERLESS_REDIS: redis://redis_master:6379 + PAPERLESS_DBHOST: postgresql_primary + PAPERLESS_DBNAME: paperless + PAPERLESS_DBUSER: postgres + PAPERLESS_DBPASS_FILE: /run/secrets/pg_root_password + secrets: + - pg_root_password + volumes: + - paperless_data:/usr/src/paperless/data + - paperless_media:/usr/src/paperless/media + networks: + - traefik-public + - database-network + deploy: + labels: + - traefik.enable=true + - traefik.http.routers.paperless.rule=Host(`paperless.localhost`) + - traefik.http.routers.paperless.entrypoints=websecure + - traefik.http.routers.paperless.tls=true + - traefik.http.services.paperless.loadbalancer.server.port=8000 + +volumes: + paperless_data: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,rw + device: :/export/paperless/data + paperless_media: + driver: local + driver_opts: + type: nfs + o: addr=omv800.local,nolock,soft,rw + device: :/export/paperless/media + +secrets: + pg_root_password: + external: true + +networks: + traefik-public: + external: true + database-network: + external: true