networks: reverse_proxy: external: true volumes: linkding_data: miniflux_db: services: 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 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