API-Scardua/docs/deploy.md
Ricardo Leite 15c89c9038 Deploy inicial: API FastAPI + infra Podman/Caddy + docs
- App FastAPI (main.py, app/): rotas /health e /dados_retorno, middleware anti-scanner, logging configurado
- Config via configs.json (Pydantic); segredos fora do codigo e do git (.gitignore)
- Dockerfile (oracledb thin, HEALTHCHECK) + requirements.txt + .dockerignore
- Deploy Podman/Quadlet + Caddy em deploy/
- Docs: CLAUDE.md + docs/ (arquitetura, deploy, known-issues)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 16:37:13 -03:00

2.6 KiB

Deploy — API-Scardua

Ambiente: VPS Hostinger (Debian 13), Podman rootless + Quadlet, Caddy (proxy + TLS), user admin. No ar: https://api-scardua.flstecnologia.tech

Acesso à VPS

  • SSH: ssh vps-fls (alias já configurado → 179.197.230.154, porta 3115, user admin).
  • ⚠️ No Windows use o OpenSSH nativo (PowerShell/cmd) — o Git Bash não enxerga o known_hosts/config e falha.
  • Porta 22 é fechada no firewall. Sempre -p 3115 (ou o alias).
  • systemctl --user sempre (rootless) — nunca sudo systemctl pros containers.

Arquitetura

  • Imagem: hoje buildada local na VPS = localhost/api-scardua:latest (sem registry ainda).
  • Container api-scardua na rede fls — só o Caddy alcança; a porta 8000 não é publicada no host.
  • Config: configs.json montado read-only de ~/.config/api-scardua/configs.json.
  • Quadlet: ~/.config/containers/systemd/api-scardua.container.
  • Caddy: api-scardua.flstecnologia.techapi-scardua:8000, TLS automático (Let's Encrypt). Caddyfile em /srv/containers/stacks/caddy/Caddyfile.

Atualizar a app (hoje é manual)

# 1. copiar o código atualizado pro build dir da VPS (scp de main.py / app/ / etc.)
# 2. na VPS:
cd ~/build/api-scardua
podman build --format docker -t localhost/api-scardua:latest .   # --format docker é OBRIGATÓRIO
systemctl --user restart api-scardua

⚠️ --format docker: em formato OCI (padrão do Podman) o HEALTHCHECK do Dockerfile é ignorado.

Mexer no Caddy (com segurança)

cd /srv/containers/stacks/caddy
cp Caddyfile Caddyfile.bak                                        # backup
# editar Caddyfile...
podman exec caddy caddy validate --config /etc/caddy/Caddyfile    # valida ANTES
podman exec caddy caddy reload   --config /etc/caddy/Caddyfile    # recarrega sem downtime

Comandos úteis

systemctl --user status api-scardua        # estado do serviço
podman logs -f api-scardua                 # logs ao vivo
podman ps --filter name=api-scardua        # estado + health
podman healthcheck run api-scardua         # roda o healthcheck na hora

Healthcheck

Embutido na imagem (HEALTHCHECK no Dockerfile, exec-form). Bate em /health a cada 30s. É o sinal que o podman auto-update vai usar pra rollback quando o registry/CI estiver pronto.

Evolução planejada

  • Registry + CI (Forgejo Actions): buildar e publicar em git.flstecnologia.tech/<owner>/api-scardua, trocar o Quadlet pro alvo em deploy/api-scardua.container (imagem do registry + AutoUpdate=registry) → deploy pull-based.
  • Backup do Postgres da VPS (pendência geral do servidor).