Files
pet-project-server/files/tududi/docker-compose.template.yml
T
av af14732652
Linting / YAML Lint (push) Canceled after 0s
Linting / Ansible Lint (push) Canceled after 0s
Tududi: update to 1.4.1
2026-08-21 17:50:49 +03:00

87 lines
4.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.4.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
# Ровно один хоп (Caddy). `true` доверяет всей цепочке X-Forwarded-For и
# позволяет подделать IP клиента; tududi с 1.3.x сам приводит его к 1 и ругается.
- TUDUDI_TRUST_PROXY=1
- 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
# MCP Server
- FF_ENABLE_MCP=true
# AI-фичи через Bifrost (drop-in OpenAI-эндпоинт в общей сети — НЕ localhost,
# это сам контейнер). С 1.3.1 модель задаётся переменной, а не захардкожена,
# поэтому шлём deepseek/deepseek-v4-pro сразу: Bifrost резолвит провайдера по
# префиксу, и подменять модель governance-правилом больше не нужно.
# Пара LLM_* имеет приоритет над устаревшей OPENAI_*, значения те же.
# С 1.4.1 запросы уходят с response_format=json_schema и strict=true; если
# DeepSeek за Bifrost ответит 400 со словом response_format, tududi сам
# повторит запрос без него — на другую формулировку ошибки fallback уже не
# сработает. Лимиты токенов (LLM_MAX_TOKENS_*) оставлены дефолтными.
- LLM_API_KEY={{ tududi_openai_api_key }}
- LLM_BASE_URL=http://bifrost_app:8080/openai
- LLM_MODEL=deepseek/deepseek-v4-pro
networks:
web_proxy_network:
external: true