Развёртывание
Production-поставка ITAM в контейнерной платформе на примере Dokploy.
Перед первым деплоем
Подготовьте PostgreSQL database и отдельную schema, DNS-имя с HTTPS, SMTP с
подтверждённым sender и длинные случайные secrets. Runtime user должен иметь
DML-доступ; для DDL можно задать отдельный MIGRATION_DATABASE_URL.
Обязательные production-переменные:
DATABASE_URL="postgresql://app:secret@db:5432/database?schema=itam"
DATABASE_SCHEMA="itam"
MIGRATION_DATABASE_URL="postgresql://migration:secret@db:5432/database?schema=itam"
BETTER_AUTH_SECRET="at-least-32-random-characters"
BETTER_AUTH_URL="https://itam.example.com"
AUTH_ADMIN_NAME="Initial Owner"
AUTH_ADMIN_EMAIL="owner@example.com"
AUTH_ADMIN_PASSWORD="one-time-strong-password"
SMTP_HOST="smtp.example.com"
SMTP_PORT="587"
SMTP_SECURE="false"
SMTP_USER="smtp-user"
SMTP_PASSWORD="smtp-password"
SMTP_FROM="ITAM <no-reply@example.com>"
CRON_SECRET="independent-long-random-secret"AUTH_ADMIN_* нужны для bootstrap Owner. Не храните значения в Git и смените
пароль сразу после первого входа. NEXT_PUBLIC_* попадают в browser bundle и не
должны содержать secrets.
Startup sequence
При старте production-контейнер:
Проверяет и при необходимости создаёт DATABASE_SCHEMA.
Выполняет prisma migrate deploy только для закоммиченных migrations.
Инвалидирует существующие Better Auth sessions.
При полном наборе AUTH_ADMIN_* запускает идемпотентный seed.
Запускает Next.js на порту 3000.
Ошибка любого startup-шага должна остановить новую версию. При стратегии
start-first старый healthy container может продолжать обслуживать домен, даже
если новый image успешно собрался, но не прошёл migration или seed.
Проверка после деплоя
curl --fail https://itam.example.com/healthОжидаемый ответ:
{"status":"ok"}Дополнительно проверьте login, открытие registry и asset detail, запись в Audit Log, отправку тестового письма и ручной запуск обоих cron endpoint.
Rollback
- Зафиксируйте failing commit, startup log и migration name.
- Если схема совместима, верните предыдущий image и дождитесь healthy status.
- Если migration необратимо изменила данные, остановите запись и восстановите проверенный backup в согласованную точку.
- Повторите smoke test и зафиксируйте incident.
Не откатывайте Prisma migration вручную
Возврат к старому image не отменяет уже применённый DDL. Сначала оцените совместимость схемы и данных; для разрушительного изменения используйте проверенное восстановление, а не удаление записей из migration history.

