Migrations e Seed
TL;DR: num deploy via DevOps, migrations e seed são automáticos no boot do
container — você não roda nada à mão. As migrations sempre aplicam; o seed
só roda quando HSBR_RUN_SEED=1.
O que acontece no boot do hsbr-back
O entrypoint do container faz, nesta ordem:
- Migrations —
npx prisma migrate deploy(a menos queSKIP_MIGRATIONS=1). Aplica as migrations pendentes no banco que você proveu. É engine-aware: escolheprisma/migrationsouprisma/migrations-sqlserverconformeDB_ENGINE. Uma falha é logada e não derruba o boot (migrate failed — continuing) — então confira os logs. - Seed — se
RUN_SEED=1, rodanpm run db:seed(idempotente). Se o seed falhar aqui, o boot aborta de propósito (um container saudável sem usuário =401no login, o que é pior que falhar visível). - Start do app.
HSBR_RUN_SEEDno.envviraRUN_SEEDdentro do container (mapeado nodocker-compose.yml). Sim,HSBR_RUN_SEEDestá no.env.example(grupo[D] HSBR BACKEND, default0).
Migrations — automático, você não precisa rodar
- Toda subida/atualização (
deploy-stack.sh,update-stack.sh,up-hsbr.sh) reinicia ohsbr-back, e o entrypoint aplica as migrations pendentes. Não há passo manual para um deploy. - Não existe verbo de migrate por engine em produção — o
migrate deployjá é engine-aware viaprisma.config.ts. - São duas histórias de migration (Postgres vs SQL Server) — veja Bancos Suportados.
- Escape hatch: a imagem respeita
SKIP_MIGRATIONS=1, mas o compose do DevOps não expõe essa variável — então, num deploy DevOps, as migrations sempre rodam. (Pular só faz sentido num caso raro de banco migrado por fora.)
Seed — controlado por HSBR_RUN_SEED
HSBR_RUN_SEED | Quando usar | Efeito |
|---|---|---|
1 | primeiro boot de um banco vazio | roda db:seed: cria o admin (HSBR_ADMIN_*), o usuário E2E, ativo_status, níveis, processos, produtos, ZPL e as tabelas de EPC <empresa>… |
0 (default) | depois do primeiro boot | não semeia (não sobrescreve dados) |
HSBR_RUN_SEED=0 = login 401Sem seed, não há usuário admin. No primeiro boot de um tenant novo use
HSBR_RUN_SEED=1; depois do boot verde, volte para 0 e re-suba:
# em .env.<grupo>: HSBR_RUN_SEED=0
./scripts/up-hsbr.sh --env <grupo> --no-build # ou deploy-stack.sh <grupo>
O seed é idempotente, mas manter 0 evita surpresas em restart. O
new-group.sh já gera o .env.<grupo> com HSBR_RUN_SEED=1 para o 1º boot.
Banco da licença (profile license/all)
A licença tem suas próprias migrations + seed, que não rodam no
entrypoint do hsbr-back. Use o verbo manual:
./scripts/migrate.sh --env <env> # licença: migrate deploy + seed (no license-worker)
./scripts/migrate.sh --env <env> --fresh # sobe um migrator efêmero (migrate + seed + keygen)
Grupos comerciais (COMPOSE_PROFILES=hsbr) não rodam isto — consomem a
licença remota por HTTP.
Verbo manual: migrate.sh
| Profile | ./scripts/migrate.sh --env X faz | Flags |
|---|---|---|
license / all | migrate deploy + seed da licença | --fresh (migrator efêmero), --seed-only |
hsbr | npm run db:seed no hsbr-back (⚠ pode sobrescrever; pede confirmação) | --force (pula a confirmação), --seed-only |
Para HSBR o schema do ga6 já é migrado no boot — migrate.sh no profile
hsbr serve para (re)semear sob demanda.
Criar NOVAS migrations (desenvolvimento)
Isso é tarefa de dev no repo do back, não do deploy:
- Edite
prisma/schema.prisma(canônico). npm run db:migrate— usaMIGRATE_URL_POSTGRES/MIGRATE_URL_SQLSERVERdo.envdo back (vejaHSBR-Gestao-Ativos-Back/.env.example).- Commite os arquivos gerados em
prisma/migrations(+prisma/migrations-sqlserver).
O deploy depois só aplica o que está commitado. Detalhes em Bancos Suportados.
Resumo
| Situação | O que fazer |
|---|---|
| Deploy / update normal | nada — migrate roda no boot |
| Primeiro boot de tenant novo | HSBR_RUN_SEED=1 (depois volte p/ 0) |
| Re-semear o HSBR | ./scripts/migrate.sh --env <grupo> --force |
| Migrar/semear a licença | ./scripts/migrate.sh --env <env> (ou --fresh) |
| Pular migrate | raro; SKIP_MIGRATIONS=1 não é exposto no compose DevOps |