# 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 (Caddy) ### 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. > Se você viu erro do tipo `client version 1.24 is too old` no Traefik, use este modo com Caddy: ele não depende da API Docker para criar rotas e evita esse problema. ### 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 Caddy ```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 Caddy em `443` (HTTPS). - Defina valores fortes para `JWT_KEY`, `SEED_ADMIN_PASSWORD` e `POSTGRES_PASSWORD`.