Files
pet-project-server/files/tududi/docker-compose.template.yml
T
av 5cd66d01bc
Linting / YAML Lint (push) Has been cancelled
Linting / Ansible Lint (push) Has been cancelled
Tududi: add task tracke application
2026-07-04 16:56:01 +03:00

76 lines
3.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tududi — планировщик задач (github.com/chrisvel/tududi).
# See versions: https://hub.docker.com/r/chrisvel/tududi/tags
#
# Образ стартует entrypoint'ом от root, chown'ит /app/backend на PUID:PGID и
# сбрасывает права через su-exec — поэтому НЕ задаём `user:`, только PUID/PGID
# (совпадают с системным пользователем tududi, владельцем смонтированных каталогов).
#
# Внутренний порт — 3002 (frontend отдаётся тем же backend'ом). Caddy проксирует
# tududi.vakhrushev.me -> tududi_app:3002. Аутентификация — собственный OIDC-логин
# tududi к Authelia (НЕ forward_auth), поэтому в Caddy домен открыт.
services:
tududi_app:
image: chrisvel/tududi:1.1.1
container_name: tududi_app
restart: unless-stopped
networks:
- "web_proxy_network"
volumes:
- "{{ db_dir }}:/app/backend/db"
- "{{ uploads_dir }}:/app/backend/uploads"
environment:
- PUID={{ app_owner_uid }}
- PGID={{ app_owner_gid }}
- NODE_ENV=production
- PORT=3002
- DB_FILE=db/production.sqlite3
- TUDUDI_UPLOAD_PATH=/app/backend/uploads
- BASE_URL=https://tududi.vakhrushev.me
- TUDUDI_ALLOWED_ORIGINS=https://tududi.vakhrushev.me
- TUDUDI_TRUST_PROXY=true
- TUDUDI_SESSION_SECRET={{ tududi_session_secret }}
# Чистый OIDC: сид-админ не создаётся (TUDUDI_USER_EMAIL/PASSWORD не заданы),
# первый вход через Authelia сам заводит пользователя и выдаёт ему admin по
# OIDC_ADMIN_EMAIL_DOMAINS. Локальный парольный вход выключен.
- PASSWORD_AUTH_ENABLED=false
# OIDC (Authelia). Redirect URI регистрируется в Authelia как
# https://tududi.vakhrushev.me/api/oidc/callback/{OIDC_PROVIDER_SLUG}.
- OIDC_ENABLED=true
- OIDC_PROVIDER_NAME=Authelia
- OIDC_PROVIDER_SLUG=authelia
- OIDC_ISSUER_URL=https://auth.vakhrushev.me
- OIDC_CLIENT_ID={{ tududi_oidc_client_id }}
- OIDC_CLIENT_SECRET={{ tududi_oidc_client_secret }}
- OIDC_SCOPE=openid profile email
- OIDC_AUTO_PROVISION=true
# Домен email, чьим пользователям при auto-provision выдаётся роль админа
# (должен совпадать с доменом email в id_token от Authelia).
- OIDC_ADMIN_EMAIL_DOMAINS=vakhrushev.me
# Почта (Yandex Cloud Postbox, те же секреты, что у outline/authelia).
- ENABLE_EMAIL=true
- EMAIL_SMTP_HOST={{ postbox_host }}
- EMAIL_SMTP_PORT={{ postbox_port }}
- EMAIL_SMTP_SECURE=false
- EMAIL_SMTP_USERNAME={{ postbox_user }}
- EMAIL_SMTP_PASSWORD={{ postbox_pass }}
- EMAIL_FROM_ADDRESS=tududi@vakhrushev.me
- EMAIL_FROM_NAME=Tududi
# AI-фичи через Bifrost (drop-in OpenAI-эндпоинт в общей сети — НЕ localhost,
# это сам контейнер). Модель у tududi захардкожена как gpt-4o-mini; Bifrost
# по governance-правилу роутит её на deepseek-v4-pro. openai-node сам
# подхватывает OPENAI_BASE_URL.
- OPENAI_API_KEY={{ tududi_openai_api_key }}
- OPENAI_BASE_URL=http://bifrost_app:8080/openai
networks:
web_proxy_network:
external: true