Este projeto foi reorganizado para rodar direto no Docker, com acesso unico pela URL definida em WEB_URL, persistencia de dados, backup automatico e atualizacao simplificada por PowerShell.
Toda a configuracao do projeto agora fica centralizada no .env da raiz. Isso vale para Docker e tambem para execucao local de backend/frontend.
- acesso publico so pela URL configurada em
WEB_URLna porta80 mysqleuploadspersistidos em volumes Docker- backup automatico do banco e dos uploads
- backup manual com um comando
- atualizacao com
git pull, rebuild, migracao e recriacao da stack sem apagar dados - uma documentacao operacional unica neste
README.md
- Docker Desktop em execucao
- PowerShell
- Git
docker/compose.full.yml: ambiente completo em Docker (database + backend + frontend)docker/compose.dev.yml: ambiente de desenvolvimento com somente database.env.example: modelo unico de configuracao localdocker.ps1: operacao de ambientes Dockerinfra/scripts/gcp: scripts de deploy e manutencao GCP (uso local, fora do Git)
- Criar o arquivo de ambiente:
Copy-Item .env.example .env- Editar o minimo necessario em
.env:
MYSQL_ROOT_PASSWORDJWT_SECRETDATABASE_URLse for rodar backend fora do DockerMYSQL_BIND_ADDRESSeMYSQL_HOST_PORTse quiser acessar o MySQL pela maquina hostTOTP_ENCRYPTION_KEYePII_MASTER_KEYse quiser deixar a seguranca pronta desde o inicioBACKUP_PATHse quiser salvar backups fora do repositorio
- Subir o ambiente completo em Docker:
.\docker.ps1 up -Environment fullO script valida automaticamente:
- se o Docker Desktop esta em execucao
- se
.envtem as chaves minimas obrigatorias - se algum valor com
$foi deixado sem aspas simples
- Ajustar a URL publica no
.env:
- em maquina local:
WEB_URL=http://localhost - em servidor/LAN:
WEB_URL=http://192.168.1.250ou seu dominio
- Acessar:
URL definida em WEB_URL
Opcao para desenvolvimento com hot reload (somente banco em Docker):
.\docker.ps1 up -Environment dev
cd backend; npm run start:dev
cd ../frontend; npm run devImportante:
- o seed de demonstracao nao roda por padrao
backend/.envefrontend/.envnao sao mais necessarioslocalhost:3000elocalhost:3001nao sao mais o caminho oficial de acesso- para acesso por IP ou dominio, ajuste
WEB_URLe os callbacks OAuth no.env
- banco: volume Docker
terceirogestor_mysql_data - uploads: volume Docker
terceirogestor_uploads_data - backups: pasta definida em
BACKUP_PATH
Padrao de backup:
storage/backups
Isso significa:
docker compose downpara os containers, mas nao apaga dadosdocker compose down -vapaga os volumes e deve ser evitadogit pulle rebuild nao apagam banco nem uploads
Subir ou religar a stack completa:
.\docker.ps1 up -Environment fullSubir somente database para desenvolvimento local:
.\docker.ps1 up -Environment devVer status:
docker compose psVer logs:
docker compose logs -f nginx
docker compose logs -f backend
docker compose logs -f mysql
docker compose logs -f backupParar a stack:
docker compose downO servico backup roda automaticamente em cron e salva:
- dump do MySQL
- arquivo compactado dos uploads
Configuracoes no .env:
BACKUP_SCHEDULE: horario do backupBACKUP_KEEP_DAYS: quantos dias manterBACKUP_PATH: onde salvarTZ: fuso horario do cron e dos nomes dos arquivos
Exemplo padrao:
BACKUP_SCHEDULE=0 3 * * *
BACKUP_KEEP_DAYS=14
TZ=America/Sao_Paulo
O servico mysql pode ser acessado pela maquina host com estas variaveis no .env:
MYSQL_BIND_ADDRESS: IP de bind da porta publicada. Padrao seguro:127.0.0.1MYSQL_HOST_PORT: porta publicada no host. Padrao:3307
Exemplo padrao para testes locais:
MYSQL_BIND_ADDRESS=127.0.0.1
MYSQL_HOST_PORT=3307
String de conexao a partir do host:
mysql://root:SUA_SENHA@127.0.0.1:3307/terceirogestor?allowPublicKeyRetrieval=true&ssl=false
Se precisar acessar de outra maquina da rede, troque por algo como:
MYSQL_BIND_ADDRESS=0.0.0.0
MYSQL_HOST_PORT=3306
Atencao:
- isso expõe o banco para a rede e deve ser combinado com firewall ou rede privada
- se ja existir outro MySQL usando a mesma porta no host, altere
MYSQL_HOST_PORT - depois de mudar o
.env, reaplique a stack com.\script\up.ps1
Para operacoes de backup/restore legadas, use os scripts movidos para docker/scripts.
Atualize o codigo com Git e reaplique o ambiente Docker:
git pull --ff-only
.\docker.ps1 up -Environment full -BuildFluxo recomendado:
- garantir backup de seguranca
- executar
git pull --ff-only - rebuildar imagens com
.\docker.ps1 up -Environment full -Build - validar migrations/backfills conforme necessidade
Use seeds destrutivos somente em ambiente de desenvolvimento controlado.
Scripts legados de restore estao em docker/scripts.
.\script\restore.ps1Restaurar somente uploads usando o ultimo backup:
.\script\restore.ps1 -DatabaseBackup "--skip" -UploadsBackup "--latest"Restaurar arquivos especificos:
.\script\restore.ps1 -DatabaseBackup "C:\server\system_development\storage\backups\terceirogestor-db-20260401-030000.sql.gz"
.\script\restore.ps1 -DatabaseBackup "--skip" -UploadsBackup "C:\server\system_development\storage\backups\terceirogestor-uploads-20260401-030000.tar.gz"Atencao:
- restaurar uploads substitui o conteudo atual do volume de uploads
- restaure primeiro em homologacao se estiver em duvida
MYSQL_ROOT_PASSWORD: senha do MySQLMYSQL_DATABASE: nome do bancoJWT_SECRET: segredo principal da aplicacaoWEB_URL: URL externa do sistema. Exemplo local:http://localhost. Exemplo LAN:http://192.168.1.250NEXT_PUBLIC_API_URL: mantenha/apiGOOGLE_OAUTH_REDIRECT_URI: callback publica do GoogleMICROSOFT_OAUTH_REDIRECT_URI: callback publica da Microsoft
Observacao importante:
- use apenas caracteres seguros para URL em
MYSQL_ROOT_PASSWORDcomo letras, numeros, ponto, underscore e hifen - se algum segredo tiver
$, use aspas simples no.envda raiz para o Docker Compose nao interpretar isso como variavel
Se o PowerShell bloquear execucao de script:
powershell -ExecutionPolicy Bypass -File .\script\up.ps1Se o script reclamar que o Docker nao esta pronto:
- abra o Docker Desktop
- espere o status ficar como ativo
- rode o comando novamente
Se quiser recriar tudo sem perder dados:
.\script\up.ps1Se algo falhar depois de uma atualizacao:
- confira os logs com
docker compose logs -f - use o backup gerado pelo
update.ps1 - rode
.\script\restore.ps1se precisar voltar o banco
- editar codigo
- fazer commit e push
- no servidor ou maquina principal, rodar
.\script\update.ps1 - acessar a URL configurada em
WEB_URL