diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..3d4fde5 --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,183 @@ +# Deploy (Servidor Ubuntu) — LineGestao API + Front-end + +Este guia consolida os passos para subir **back-end (API)** e **front-end** no seu servidor, usando Docker/Compose, com foco no cenário descrito (Ubuntu + usuário `deploy`). + +> **Pré-requisitos** +> - Você já executou os passos 1–6 (SSH, updates, criação do usuário, Docker/Compose e UFW). +> - Você tem acesso ao repositório da API **e** ao repositório do front-end. + +--- + +## 1) Estrutura de pastas recomendada + +O `docker compose` do projeto da API referencia o front-end via caminho relativo. Mantenha as pastas como **irmãs**: + +``` +/home/deploy/apps/ +├─ line-gestao-api +└─ line-gestao-frontend +``` + +Assim o compose consegue resolver algo como `../line-gestao-frontend`. + +--- + +## 2) Clonar os repositórios no servidor + +Como usuário `deploy`: + +```bash +mkdir -p ~/apps +cd ~/apps + +# API +git clone line-gestao-api + +# Front-end +git clone line-gestao-frontend +``` + +Se não puder usar Git, faça upload por SCP mantendo as pastas irmãs. + +--- + +## 3) Criar o arquivo `.env` de produção + +No servidor, dentro da pasta da API, crie/edite o `.env`: + +```bash +cd ~/apps/line-gestao-api +nano .env +``` + +Exemplo (ajuste para o seu ambiente): + +``` +# Backend +ASPNETCORE_ENVIRONMENT=Production +JWT_KEY= + +# Seed de admin (usado no startup) +SEED_ADMIN_EMAIL=admin@seu-dominio.com +SEED_ADMIN_PASSWORD= + +# Banco +POSTGRES_PASSWORD= + +# Front-end +FRONTEND_PUBLIC_URL=https://seu-dominio.com +``` + +> **Importante:** não comite o `.env` no Git. + +--- + +## 4) Subir a stack com Docker Compose + +```bash +cd ~/apps/line-gestao-api + +docker compose up -d --build +``` + +Verificar containers e logs: + +```bash +docker compose ps + +docker compose logs -f --tail=200 +``` + +--- + +## 5) Validação rápida + +- API respondendo: + +```bash +curl -I http://SEU_SERVIDOR:4000 +``` + +- Logs do backend: + +```bash +docker compose logs backend --tail=200 +``` + +- Login admin: + - Use `SEED_ADMIN_EMAIL` e `SEED_ADMIN_PASSWORD` do `.env`. + +--- + +## 6) HTTPS (domínio público) + +Você pode colocar **Nginx/Caddy** no host ou **Traefik** via Docker. + +### Opção A — Traefik (recomendado em stack Docker) + +- Traefik cuida do TLS/Let’s Encrypt. +- Exponha apenas **80/443**. +- API + Front ficam internos. + +### Opção B — Nginx/Caddy no host + +- Instala o Nginx/Caddy diretamente no VPS. +- Faz proxy para o container do front e da API. + +> Se quiser, indique se prefere **subdomínios** (ex.: `api.seu-dominio.com` e `www.seu-dominio.com`) ou **mesmo domínio** (`/api` e `/`), para eu te passar o `docker-compose.prod.yml` com labels/rotas prontas. + +--- + +## 7) Subir automaticamente após reboot (systemd) + +Crie o serviço: + +```bash +sudo nano /etc/systemd/system/linegestao.service +``` + +Conteúdo (ajuste o path se necessário): + +``` +[Unit] +Description=LineGestao Docker Compose +Requires=docker.service +After=docker.service + +[Service] +Type=oneshot +RemainAfterExit=yes +WorkingDirectory=/home/deploy/apps/line-gestao-api +ExecStart=/usr/bin/docker compose up -d +ExecStop=/usr/bin/docker compose down +TimeoutStartSec=0 + +[Install] +WantedBy=multi-user.target +``` + +Ativar: + +```bash +sudo systemctl daemon-reload +sudo systemctl enable linegestao +sudo systemctl start linegestao +sudo systemctl status linegestao +``` + +--- + +## 8) Boas práticas (produção) + +- **Não exponha** Postgres (porta 5432) publicamente. +- Tenha rotina de **backup**: + +```bash +docker exec -t pg_dump -U > backup.sql +``` + +- Acompanhe logs: + +```bash +docker compose logs -f --tail=200 +```