line-gestao-api/DEPLOYMENT.md

205 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 16 (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 <URL_DO_REPO_DA_API> line-gestao-api
# Front-end
git clone <URL_DO_REPO_DO_FRONTEND> 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=<CHAVE_FORTE>
# Seed de admin (usado no startup)
SEED_ADMIN_EMAIL=admin@seu-dominio.com
SEED_ADMIN_PASSWORD=<SENHA_FORTE>
# Banco
POSTGRES_PASSWORD=<SENHA_FORTE>
# Front-end
FRONTEND_PUBLIC_URL=https://seu-dominio.com
```
> **Importante:** não comite o `.env` no Git.
---
## 4) Subir a stack com Docker Compose
### Alternativa A (provisória e mais rápida): sem Caddy, expondo API direto
Se você ainda não tem acesso ao DNS/domínio no Wix, use o arquivo `docker-compose.prod.yml` deste repositório para publicar só a API (porta `8080`) e o banco.
```bash
cd ~/apps/line-gestao-api
docker compose -f docker-compose.prod.yml up -d --build
curl -i http://localhost:8080/health
```
Teste externo (do seu PC), trocando pelo IP público do servidor:
```bash
curl -i http://76.13.231.13:8080/health
```
> Se o UFW estiver ativo, libere a porta temporariamente: `sudo ufw allow 8080/tcp`.
### Stack completa (quando domínio/DNS estiver pronto)
```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:8080
```
- Logs do backend:
```bash
docker compose -f docker-compose.prod.yml logs api --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/Lets 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 <container_db> pg_dump -U <user> <db> > backup.sql
```
- Acompanhe logs:
```bash
docker compose logs -f --tail=200
```