# 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//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).