homelab/files/docker/rss/docker-stack.yaml

198 lines
5.5 KiB
YAML

networks:
reverse_proxy:
external: true
volumes:
linkding_data:
linkding_db:
miniflux_db:
readeck:
driver: rclone
driver_opts:
remote: 'homelab-s3:docker-volume-readeck'
allow_other: 'true'
vfs_cache_mode: full
poll_interval: 0
services:
readeck:
image: codeberg.org/readeck/readeck:latest
networks:
- default
- reverse_proxy
environment:
- READECK_LOG_LEVEL=debug
- READECK_ALLOWED_HOSTS=readeck.alecodes.page
env_file:
- .env
volumes:
- readeck:/readeck
restart: unless-stopped
healthcheck:
test: ["CMD", "/bin/readeck", "healthcheck", "-config", "config.toml"]
interval: 30s
timeout: 2s
retries: 3
deploy:
rollback_config:
failure_action: continue
update_config:
delay: 2s
failure_action: rollback
order: start-first
placement:
constraints:
- node.labels.services_kind==${SERVICE_KIND:-common}
labels:
- traefik.enable=true
- traefik.http.routers.readeck.rule=Host(`readeck.alecodes.page`)
- traefik.http.services.readeck.loadbalancer.server.port=8000
miniflux:
image: miniflux/miniflux:latest
restart: unless-stopped
networks:
- default
- reverse_proxy
environment:
DATABASE_URL: "user=${MF_DB_USER} password=${MF_DB_PASS} dbname=miniflux host=tasks.miniflux_db sslmode=disable"
RUN_MIGRATIONS: 1
BASE_URL: https://rss.alecodes.page
LOG_LEVEL: debug
OIDC_ENABLED: 1
DISABLE_LOCAL_AUTH: 1
OAUTH2_USER_CREATION: 1
OAUTH2_PROVIDER: oidc
OAUTH2_OIDC_DISCOVERY_ENDPOINT: https://auth.alecodes.page
OAUTH2_REDIRECT_URL: https://rss.alecodes.page/oauth2/oidc/callback
OAUTH2_CLIENT_ID: ${MF_OIDC_CLIENT_ID}
OAUTH2_CLIENT_SECRET: ${MF_OIDC_CLIENT_SECRET}
deploy:
rollback_config:
failure_action: continue
update_config:
delay: 2s
failure_action: rollback
order: start-first
placement:
constraints:
- node.labels.services_kind==${SERVICE_KIND:-common}
labels:
- traefik.enable=true
- traefik.http.routers.miniflux.rule=Host(`rss.alecodes.page`)
- traefik.http.services.miniflux.loadbalancer.server.port=8080
miniflux_db:
image: postgres:latest
environment:
POSTGRES_USER: ${MF_DB_USER}
POSTGRES_PASSWORD: ${MF_DB_PASS}
POSTGRES_DB: miniflux
volumes:
- miniflux_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
start_period: 30s
deploy:
rollback_config:
failure_action: continue
update_config:
delay: 2s
failure_action: rollback
order: start-first
placement:
constraints:
- node.labels.services_kind==${SERVICE_KIND:-common}
miniflux-archiver:
image: git.alecodes.page/alecodes/miniflux-archive:latest
restart: unless-stopped
command: ["archive", "linkding", "--archive-starred"]
environment:
MFA_MINIFLUX_HOST: http://tasks.miniflux:8080
MFA_MINIFLUX_TOKEN: ${MFA_MINIFLUX_TOKEN}
MFA_MINIFLUX_FEED_ID: 16
MFA_SERVICE_HOST: https://bookmarks.alecodes.page
MFA_SERVICE_TOKEN: ${MFA_SERVICE_TOKEN}
MFA_SERVICE_MAX_REQUEST: 3
MFA_CRON: "0 */1 * * *"
deploy:
rollback_config:
failure_action: continue
update_config:
delay: 2s
failure_action: rollback
order: start-first
placement:
constraints:
- node.labels.services_kind==${SERVICE_KIND:-common}
linkding:
image: sissbruecker/linkding:latest
restart: unless-stopped
networks:
- default
- reverse_proxy
volumes:
- linkding_data:/etc/linkding/data
environment:
LD_ENABLE_OIDC: "True"
OIDC_OP_AUTHORIZATION_ENDPOINT: https://auth.alecodes.page/api/oidc/authorization
OIDC_OP_TOKEN_ENDPOINT: https://auth.alecodes.page/api/oidc/token
OIDC_OP_USER_ENDPOINT: https://auth.alecodes.page/api/oidc/userinfo
OIDC_OP_JWKS_ENDPOINT: https://auth.alecodes.page/jwks.json
OIDC_RP_CLIENT_ID: ${LD_OIDC_CLIENT_ID}
OIDC_RP_CLIENT_SECRET: ${LD_OIDC_CLIENT_SECRET}
LD_CSRF_TRUSTED_ORIGINS: https://bookmarks.alecodes.page
LD_DB_HOST: tasks.linkding_db
LD_DB_ENGINE: postgres
LD_DB_DATABASE: linkding
LD_DB_USER: linkding
LD_DB_PASSWORD: ${LD_DB_PASSWORD}
deploy:
rollback_config:
failure_action: continue
update_config:
delay: 2s
failure_action: rollback
order: start-first
placement:
constraints:
- node.labels.services_kind==${SERVICE_KIND:-common}
labels:
- traefik.enable=true
- traefik.http.routers.linkding.rule=Host(`bookmarks.alecodes.page`)
- traefik.http.services.linkding.loadbalancer.server.port=9090
linkding_db:
image: postgres:latest
environment:
POSTGRES_USER: linkding
POSTGRES_PASSWORD: ${LD_DB_PASSWORD}
POSTGRES_DB: linkding
volumes:
- linkding_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "linkding"]
interval: 10s
start_period: 30s
deploy:
rollback_config:
failure_action: continue
update_config:
delay: 2s
failure_action: rollback
order: start-first
placement:
constraints:
- node.labels.services_kind==${SERVICE_KIND:-common}