121 lines
2.7 KiB
Markdown
121 lines
2.7 KiB
Markdown
# Deploy rápido (API + Postgres)
|
|
|
|
## Erro: `no configuration file provided: not found`
|
|
Esse erro acontece quando o `docker compose` é executado em uma pasta sem `docker-compose.yml`.
|
|
|
|
Este repositório inclui `docker-compose.yml` na raiz do projeto.
|
|
|
|
## Opção 1: subir via IP (rápido)
|
|
|
|
1. Entre na pasta da API:
|
|
|
|
```bash
|
|
cd ~/apps/line-gestao-api
|
|
```
|
|
|
|
2. Crie o `.env` a partir do exemplo:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
nano .env
|
|
```
|
|
|
|
3. Suba os containers:
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
4. Verifique o status e logs:
|
|
|
|
```bash
|
|
docker compose ps
|
|
docker compose logs -f --tail=200
|
|
```
|
|
|
|
5. Teste healthcheck da API:
|
|
|
|
```bash
|
|
curl -I http://SEU_SERVIDOR:4000/health
|
|
```
|
|
|
|
## Opção 2: subir já com domínio + HTTPS automático (Traefik)
|
|
|
|
### Pré-requisitos
|
|
- O DNS do domínio/subdomínio da API deve apontar para o IP do servidor (registro `A`).
|
|
- Portas 80 e 443 abertas no firewall/security group.
|
|
|
|
### 1) Ajuste o `.env`
|
|
Na pasta da API:
|
|
|
|
```bash
|
|
cd ~/apps/line-gestao-api
|
|
cp .env.example .env
|
|
nano .env
|
|
```
|
|
|
|
Preencha obrigatoriamente:
|
|
- `API_DOMAIN` (ex.: `api.seudominio.com`)
|
|
- `ACME_EMAIL` (email para emitir certificado)
|
|
- `FRONTEND_PUBLIC_URL` (URL pública do front)
|
|
- `JWT_KEY`, `SEED_ADMIN_*`, `POSTGRES_PASSWORD`
|
|
|
|
### 2) Suba em modo produção com Traefik
|
|
|
|
```bash
|
|
docker compose -f docker-compose.prod.yml up -d --build
|
|
```
|
|
|
|
### 3) Verifique saúde e certificado
|
|
|
|
```bash
|
|
docker compose -f docker-compose.prod.yml ps
|
|
docker compose -f docker-compose.prod.yml logs -f --tail=200
|
|
curl -i https://SEU_API_DOMAIN/health
|
|
```
|
|
|
|
## Checklist de confirmação (API realmente no ar)
|
|
Considere que o deploy está concluído quando **todos** os itens abaixo estiverem OK:
|
|
|
|
```bash
|
|
docker compose ps
|
|
curl -i http://127.0.0.1:4000/health
|
|
curl -i http://SEU_IP_PUBLICO:4000/health
|
|
```
|
|
|
|
Para produção com domínio:
|
|
|
|
```bash
|
|
docker compose -f docker-compose.prod.yml ps
|
|
curl -i https://SEU_API_DOMAIN/health
|
|
```
|
|
|
|
Resultado esperado:
|
|
- container `linegestao-api` com status `healthy`;
|
|
- container `linegestao-db` com status `healthy`;
|
|
- endpoint `/health` respondendo `HTTP/1.1 200 OK`.
|
|
|
|
## Atualizando um clone já existente no servidor
|
|
|
|
```bash
|
|
cd ~/apps/line-gestao-api
|
|
git fetch --all --prune
|
|
git pull --rebase origin NOME_DA_BRANCH
|
|
```
|
|
|
|
Depois de atualizar, suba com o arquivo que você usa:
|
|
|
|
```bash
|
|
# modo IP
|
|
docker compose up -d --build
|
|
|
|
# modo domínio + HTTPS
|
|
docker compose -f docker-compose.prod.yml up -d --build
|
|
```
|
|
|
|
## Observações
|
|
- O Postgres **não é exposto** para fora do Docker (sem `5432:5432`).
|
|
- No modo IP, a API sobe na porta `4000` do host (`4000:8080`).
|
|
- No modo domínio, a API fica atrás do Traefik em `443` (HTTPS).
|
|
- Defina valores fortes para `JWT_KEY`, `SEED_ADMIN_PASSWORD` e `POSTGRES_PASSWORD`.
|