infra/bootstrap.sh é o script que prepara o ambiente antes de qualquer docker compose up. Ele não sobe containers — só deixa o terreno pronto.

Quando rodar

  • Primeira instalação do servidor.
  • Servidor novo (mudança de máquina), depois de copiar /opt/server/infra/.
  • Sempre que adicionar um novo serviço com .env.example e quiser gerar segredos.
É idempotente — rodar de novo não sobrescreve nada.

O que ele faz

1

Cria a rede Docker `server_net`

Se já existir, deixa quieto. Sem essa rede, nenhum compose sobe (todos declaram external: true).
2

Copia .env.example → .env em cada serviço

Só se o .env ainda não existe. Você nunca perde um .env configurado.
3

Gera senhas aleatórias nos campos vazios

Usa openssl rand -hex 24 (48 caracteres hex). Substitui apenas onde está vazio ou changeme:
  • POSTGRES_PASSWORD → senha do superuser do Postgres
  • REDIS_PASSWORD → senha do Redis
  • N8N_ENCRYPTION_KEY → chave que o n8n usa pra criptografar credenciais salvas
4

Ajusta o dono de n8n/data/

O n8n roda como user node (UID 1000) dentro do container e não faz self-chown do volume (diferente de postgres/redis). Se a pasta estiver com dono errado, o bootstrap roda um container alpine descartável pra corrigir:
docker run --rm -v $(pwd)/n8n/data:/data alpine chown -R 1000:1000 /data
Sem sudo, sem senha — só precisa de Docker acessível.
5

Imprime os próximos passos

Lista a ordem de subir os containers e o que mais precisa ser feito (ex.: criar o DB do n8n).

O que ele NÃO faz

  • Não sobe nenhum serviço da stack (docker compose up continua manual). Roda apenas um alpine descartável pra corrigir permissão.
  • Não cria os bancos das aplicações (isso é o create-db.sh).
  • Não configura proxy hosts no NPM (isso é via UI em :81).

Como rodar

cd /opt/server/infra
./bootstrap.sh
Saída esperada na primeira execução:
==> docker network
  created network server_net
==> shared .env
  created ./.env from example
==> postgres
  created postgres/.env from example
  generated POSTGRES_PASSWORD
==> redis
  created redis/.env from example
  generated REDIS_PASSWORD
==> n8n
  created n8n/.env from example
  generated N8N_ENCRYPTION_KEY
==> data directory ownership
  n8n/data: chowned to 1000:1000

Bootstrap complete.

Next steps:
  1. cd postgres && docker compose up -d
  ...

Onde estão os segredos depois

Cada serviço tem seu próprio .env:
infra/postgres/.env   # POSTGRES_PASSWORD
infra/redis/.env      # REDIS_PASSWORD
infra/n8n/.env        # N8N_ENCRYPTION_KEY
E os DBs criados via create-db.sh salvam em infra/postgres/secrets/<nome>.env (modo 600).