Tududi: add task tracke application
Linting / YAML Lint (push) Has been cancelled
Linting / Ansible Lint (push) Has been cancelled

This commit is contained in:
av
2026-07-04 16:56:01 +03:00
parent 8ec0327851
commit 5cd66d01bc
11 changed files with 846 additions and 162 deletions
+75
View File
@@ -0,0 +1,75 @@
# 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