Перейти к основному содержимому

Развёртывание

Разработка (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-контейнер

Dockerfile рассчитан только на разработку:

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

Запустит npm run dev с hot reload.

Production

Автоматический production-деплой настроен в .github/workflows/deploy.yml. На каждый push в 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

Production checklist

  • Поставить NODE_ENV=production.
  • Сгенерировать сильный JWT_SECRET (32+ случайных символа).
  • Сгенерировать PII_ENCRYPTION_KEY — 32-байтовый ключ в Base64, хранить отдельно от JWT_SECRET.
  • Использовать managed PostgreSQL с pgvector (Supabase, RDS и т.п.).
  • Использовать managed Redis (ElastiCache, Upstash и т.п.).
  • Прописать ALLOWED_ORIGINS на production-домен фронтенда.
  • Настроить креды WhatsApp Cloud API.
  • Настроить токен Telegram-бота.
  • Поставить reverse proxy (nginx) с SSL.
  • Включить Langfuse tracing для мониторинга.
  • Прогнать 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;
}
}

Переменные окружения

Полный список — в таблице переменных. В production:

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

Глобальный API rate limit — 100 запросов в минуту на каждого аутентифицированного пользователя или IP клиента. /api/v1/health и feedback-клиенты в allowlist.