Перейти до основного вмісту

Розгортання

Розробка (Docker Compose)

Вкладений docker-compose.yml піднімає PostgreSQL і Redis:

docker compose up -d

Сервіси:

  • agentcore_postgres — PostgreSQL 16 + pgvector (порт 5432)
  • agentcore_redis — Redis 7 Alpine (порт 6379)

Обидва мають healthcheck і persistent volumes.

Dev Container

Тільки для розробки, Dockerfile:

docker build -t agentcore .
docker run -p 3000:3000 --env-file .env agentcore

Запускає npm run dev із hot reload.

Продакшн

Продакшн-деплой автоматизований у .github/workflows/deploy.yml. На кожен пуш у main GitHub Actions заходить по SSH на AX43, підтягує репозиторій, застосовує Prisma-міграції, білдить, перезапускає PM2-застосунок kalheon-api і виконує smoke-тести публічних health та OpenAPI ендпоінтів.

Див. runbook деплою Kalheon: drop/kalheon/DEPLOYMENT.md.

Передумови

  • Node.js 22+
  • PostgreSQL 16 з розширенням pgvector
  • Redis 7+
  • OpenAI API-ключ

Білд

npm ci
npx prisma generate
npm run build

База даних

DATABASE_URL=<production-url> npx prisma migrate deploy

Запуск

NODE_ENV=production npm start

Або через PM2:

pm2 start dist/server.js --name agentcore

Продакшн-чекліст

  • Виставте NODE_ENV=production
  • Згенеруйте сильний JWT_SECRET (32+ випадкових символів)
  • Згенеруйте PII_ENCRYPTION_KEY як 32-байтовий base64-ключ і тримайте його окремо від JWT_SECRET
  • Використовуйте managed PostgreSQL з pgvector (наприклад, Supabase, RDS)
  • Використовуйте managed Redis (наприклад, ElastiCache, Upstash)
  • Виставте ALLOWED_ORIGINS на продакшн-домен фронтенду
  • Сконфігуруйте креденшли WhatsApp Cloud API
  • Сконфігуруйте Telegram bot token
  • Налаштуйте reverse proxy (nginx) з SSL
  • Увімкніть Langfuse-трейсинг для моніторингу
  • Запустіть prisma migrate deploy
  • Налаштуйте process manager (PM2, systemd)
  • Налаштуйте ротацію логів

Reverse proxy (nginx)

server {
listen 443 ssl;
server_name api.yourdomain.com;

ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;

location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Змінні оточення

Повний список — у таблиці env у конфігурації. У продакшн:

  • виставляйте ALLOWED_ORIGINS тільки на точні фронтенд-origin; CORS-wildcard відхиляється;
  • задайте JWT_EXPIRES_IN один раз і покладайтесь на нього як на джерело правди для TTL токенів;
  • виставте PII_ENCRYPTION_KEY як стабільний 32-байтовий base64-ключ до того, як почнете обробляти живі розмови;
  • тримайте Redis доступним — від нього залежать BullMQ і rate-limit store у проді;
  • налаштовуйте WhatsApp Cloud API і Telegram-креденшли лише для тих каналів, які збираєтесь запускати.

Глобальний API rate limit — 100 запитів на хвилину на автентифікованого користувача або клієнтський IP. /api/v1/health і loopback-клієнти у whitelist.