Деплой Kalheon API
Production-деплои оркестрируются GitHub Actions в .github/workflows/deploy.yml.
Поток
- Коммит уходит в
main. - GitHub Actions открывает SSH-сессию к
claude@157.180.103.168. - Удалённый репозиторий
/home/claude/projects/kalheon_agentsfast-forward-ится доorigin/main. - На сервере запускается
scripts/deploy-production.sh:- тянет
main; - запускает
npm ci; - запускает
npx prisma generate; - запускает
npm run db:migrate:deploy; - запускает
npm run build; - перезапускает PM2-приложение
kalheon-api; - smoke-тестирует
https://api.kalheon.cloud/health; - smoke-тестирует
https://api.kalheon.cloud/docs/json.
- тянет
- GitHub Actions шлёт Telegram-уведомление об успехе или ошибке, если прописаны Telegram-секреты.
Скрипт деплоя использует /tmp/kalheon-api-deploy.lock — два деплоя одновременно не запустятся.
GitHub secrets
Обязательные:
DEPLOY_SSH_KEY— приватный ключ, разрешённый для деплоя на AX43.
Рекомендованные:
DEPLOY_KNOWN_HOSTS— закреплённая запись SSH host key для157.180.103.168.
Опциональные override-ы:
DEPLOY_HOST— дефолт157.180.103.168;DEPLOY_PORT— дефолт22;DEPLOY_USER— дефолтclaude;DEPLOY_REPO_DIR— дефолт/home/claude/projects/kalheon_agents;PM2_APP— дефолтkalheon-api;SMOKE_HEALTH_URL— дефолтhttps://api.kalheon.cloud/health;SMOKE_DOCS_URL— дефолтhttps://api.kalheon.cloud/docs/json.
Telegram-уведомления:
TG_BOT_TOKEN— токен Telegram-бота;TG_CHAT_ID— ID чата или канала для уведомлений о деплое.
Если Telegram-секретов нет, деплой всё равно проходит, а про пропущенное уведомление остаётся запись в логах.
Первичный запуск на сервере
Прогоните один раз на AX43, прежде чем включать ограниченный deploy-ключ:
ssh claude@157.180.103.168
cd /home/claude/projects/kalheon_agents
git fetch origin main
git checkout main
git pull --ff-only origin main
chmod +x scripts/deploy-production.sh
scripts/deploy-production.sh
После первого успешного прогона добавьте публичный deploy-ключ в ~/.ssh/authorized_keys.
Более безопасная ограниченная форма:
command="/home/claude/projects/kalheon_agents/scripts/deploy-production.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAA... kalheon-deploy
С forced command GitHub Actions этим ключом может запустить только deploy-скрипт — ничего больше.
Ручной деплой
ssh claude@157.180.103.168
cd /home/claude/projects/kalheon_agents
DEPLOY_BRANCH=main PM2_APP=kalheon-api scripts/deploy-production.sh
Ручной откат
Предпочтительный откат — revert-коммит, запушенный в main: история production и git остаётся консистентной, и катится тот же пайплайн:
git revert <bad_commit_sha>
git push origin main
Аварийный откат на стороне сервера, когда revert не успеть:
ssh claude@157.180.103.168
cd /home/claude/projects/kalheon_agents
git fetch origin main
git checkout <last_good_sha>
npm ci
npx prisma generate
npm run db:migrate:deploy
npm run build
pm2 restart kalheon-api --update-env
curl -fsS https://api.kalheon.cloud/health > /dev/null
curl -fsS https://api.kalheon.cloud/docs/json > /dev/null
Миграции БД по умолчанию forward-only. Если плохой деплой включал миграцию схемы, для отката может потребоваться отдельная compensating-миграция.
Smoke-эндпоинты
Публичные smoke-эндпоинты:
https://api.kalheon.cloud/healthhttps://api.kalheon.cloud/docs/json
Версионированный health-маршрут остаётся доступным на https://api.kalheon.cloud/api/v1/health.