- 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>
54 lines
2.6 KiB
Markdown
54 lines
2.6 KiB
Markdown
# 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.tech` → `api-scardua:8000`, TLS automático (Let's Encrypt).
|
|
Caddyfile em `/srv/containers/stacks/caddy/Caddyfile`.
|
|
|
|
## Atualizar a app (hoje é manual)
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
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
|
|
```bash
|
|
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).
|