Add app stacks: Home Assistant, Immich (ML), Nextcloud, Paperless-NGX, Jellyfin; NFS volumes, Traefik labels, DB/secret references

This commit is contained in:
admin
2025-08-24 17:50:35 -04:00
parent 802a6916ab
commit e5197b6d0e
5 changed files with 233 additions and 0 deletions

View File

@@ -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

56
stacks/apps/immich.yml Normal file
View File

@@ -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

52
stacks/apps/jellyfin.yml Normal file
View File

@@ -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

42
stacks/apps/nextcloud.yml Normal file
View File

@@ -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

50
stacks/apps/paperless.yml Normal file
View File

@@ -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