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>
This commit is contained in:
commit
15c89c9038
22 changed files with 1397 additions and 0 deletions
54
docs/deploy.md
Normal file
54
docs/deploy.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# 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).
|
||||
Loading…
Add table
Add a link
Reference in a new issue