Add app stacks: Home Assistant, Immich (ML), Nextcloud, Paperless-NGX, Jellyfin; NFS volumes, Traefik labels, DB/secret references
This commit is contained in:
33
stacks/apps/homeassistant.yml
Normal file
33
stacks/apps/homeassistant.yml
Normal 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
56
stacks/apps/immich.yml
Normal 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
52
stacks/apps/jellyfin.yml
Normal 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
42
stacks/apps/nextcloud.yml
Normal 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
50
stacks/apps/paperless.yml
Normal 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
|
||||||
Reference in New Issue
Block a user