CI / ruff · mypy · pytest (pull_request) Successful in 4m3s
- infra/runner/tgit-runner: deploy/restart/remove/list по SSH forced command; аргументы не исполняются и не глобятся; архив — только файлы и папки, без «..», ≤ 20 МБ, есть main.py; health_url — только localhost - песочница: uid 10001, read-only, tmpfs noexec, cap-drop ALL, no-new-privileges, 128 МБ без swap, 0.25 CPU, 64 PID, --network none (сеть — только по egress-allow админа), лимит 10 сервисов, 2 образа - новая версия стартует рядом (-next) и заменяет старую, только став healthy; иначе удаляется, старая работает, exit 3 - бот: после push git archive изменённых services/<name>/ → runner; автору — «🚀 работает» или «⛔ не развёрнут» с логом, команде — алерт ⛔; удалённая папка → remove; «♻️ Перезапустить» в «Статусе» для админа (S-5) - examples/escape_attempts: все попытки выбраться — BLOCKED на живом Docker - install.sh, authorized_keys.example; CD бота обновляет runner на хосте Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
48 lines
2.7 KiB
Bash
48 lines
2.7 KiB
Bash
# tgit — пример конфигурации. Скопировать в .env и заполнить: `cp .env.example .env`.
|
|
# .env не коммитится. Секреты помечены (secret).
|
|
|
|
# --- Telegram (#4, #25) ---
|
|
TELEGRAM_BOT_TOKEN= # (secret) токен от @BotFather
|
|
ADMIN_IDS= # Telegram ID первых администраторов через запятую
|
|
LOG_LEVEL=INFO
|
|
TELEGRAM_PROXY_URL= # (secret) http://user:pass@host:port или socks5://… — на RF-сервере Telegram недоступен напрямую
|
|
|
|
# --- База данных ---
|
|
POSTGRES_PASSWORD=tgit # (secret на сервере) пароль Postgres в Compose
|
|
# DATABASE_URL задаётся в docker-compose.yml; для запуска без Docker:
|
|
# DATABASE_URL=postgresql+asyncpg://tgit:tgit@localhost:5432/tgit
|
|
|
|
# --- SourceCraft (#7, #10) ---
|
|
SOURCECRAFT_TOKEN= # (secret) персональный токен API
|
|
SOURCECRAFT_UPLOADS_REPO=rogachevegorushka/tgit-uploads
|
|
# SOURCECRAFT_RUN_URL_TEMPLATE=https://sourcecraft.dev/{repo}/cicd/runs/{run}
|
|
|
|
# --- Git: коммиты в репозиторий загрузок (#7, #9) ---
|
|
GIT_SSH_KEY_PATH= # путь к приватному deploy-ключу бота (монтируется read-only);
|
|
# публичная часть — deploy key с правом записи в tgit-uploads
|
|
GIT_SSH_KEY_B64= # (secret) для Docker: тот же ключ в base64 — base64 -w0 ~/.ssh/tgit_bot_ed25519
|
|
GIT_UPLOADS_URL=git@ssh.sourcecraft.dev:rogachevegorushka/tgit-uploads.git
|
|
# GIT_CLONE_DIR=data/uploads # локальный клон репозитория загрузок (в Docker — volume /data/uploads)
|
|
|
|
# --- Docker: раздел «Статус» (#14) ---
|
|
# В Compose задан сам: http://docker-proxy:2375. Без него (make run) «Статус» отвечает «Docker недоступен».
|
|
# DOCKER_URL=
|
|
# DOCKER_LABEL=tgit.managed=true
|
|
|
|
# --- Runner: деплой сервисов из репозитория загрузок (#13, infra/runner/) ---
|
|
# RUNNER_HOST=host.docker.internal # пусто — бот сервисы не разворачивает
|
|
# RUNNER_USER=tgit-deploy
|
|
# RUNNER_SSH_KEY_B64= # (secret) base64 ключа, прибитого к tgit-runner в authorized_keys
|
|
|
|
# --- LLM (#17) ---
|
|
LLM_PROVIDER=mock # mock | openai_compat; при mock агент логов выключен (#18)
|
|
LLM_BASE_URL=
|
|
LLM_MODEL=
|
|
LLM_API_KEY= # (secret)
|
|
|
|
# --- Для Claude Code: трекер (не нужно боту) ---
|
|
GITEA_URL=https://gitea.24studbank.ru
|
|
GITEA_REPO=HSE/tgit
|
|
GITEA_USER=
|
|
GITEA_TOKEN= # (secret)
|