Розгортання API Kalheon
Продакшн-деплої йдуть через GitHub Actions, воркфлоу .github/workflows/deploy.yml.
Flow
- Комміт пушиться у
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-секрети налаштовані.
Deploy-скрипт використовує lock-файл /tmp/kalheon-api-deploy.lock, тож два деплої не можуть йти одночасно.
GitHub secrets
Обовʼязкові:
DEPLOY_SSH_KEY: приватний ключ, якому дозволено деплоїти на AX43.
Рекомендовані:
DEPLOY_KNOWN_HOSTS: закріплений host key SSH для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 bot token.TG_CHAT_ID: ID чату або каналу для сповіщень про деплой.
Якщо Telegram-секретів нема — деплой все одно працює і логує, що нотифікацію пропустили.
Bootstrap сервера
Один раз на 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
Після першого успішного bootstrap — додайте deploy public key у /home/claude/.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
Ручний rollback
Кращий варіант — revert-комміт у main: зберігає узгодженість продакшну з git-історією і запускає той самий pipeline:
git revert <bad_commit_sha>
git push origin main
Екстрений server-side rollback, коли 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
За замовчуванням DB-міграції йдуть тільки вперед. Якщо поганий деплой містив міграцію схеми — для rollback може знадобитись явна correcting-міграція.
Smoke-ендпоінти
Публічні smoke-ендпоінти:
https://api.kalheon.cloud/healthhttps://api.kalheon.cloud/docs/json
Version-aware health-маршрут лишається доступним за адресою https://api.kalheon.cloud/api/v1/health.