docs: instrucoes de deploy no Coolify + Task 7 concluida

This commit is contained in:
2026-08-06 10:34:30 -03:00
parent 489d44fa8a
commit 163addd183
2 changed files with 45 additions and 19 deletions
+22
View File
@@ -0,0 +1,22 @@
# Ares Next
Tracker P2P + busca de arquivos com hash. Backend Rust (axum) na Fase 1.
## Deploy (Fase 1 — Coolify + Gitea)
- Repo: `https://git.hokmatech.com/Hokma-tech/ares-next.git` (branch `main`)
- App Coolify: `ares-next` / env `production`, domínio `https://ares.hokmatech.com`
- Build: `server/Dockerfile` multi-stage (musl), `base_directory=/server`, `dockerfile_location=/Dockerfile`
- Volume: `/data` → host `/data/aresnext` (banco em `/data/aresnext.db` via `ARS_NEXT_DB`)
- DNS: registro A `ares` → `13.140.174.24` no Cloudflare com proxy ON (HTTPS no edge + Origin CA no origin; SSL mode strict)
- API pública: `https://ares.hokmatech.com/api/v1/{health,search,files,peers,stats}` e WS `wss://ares.hokmatech.com/api/v1/tracker/ws`
Endpoints:
- `GET /api/v1/health` — status do serviço
- `GET /api/v1/search?q=...&limit=...&sort=...` — busca FTS5 com filtro e ordenação
- `GET /api/v1/files/{file_id}` — registro do arquivo
- `POST /api/v1/announce` — anúncio de arquivo (peer_id, name, description, type, extension, size_bytes, hash 64-hex, license)
- `GET /api/v1/peers/{file_id}` — pares on-line do arquivo
- `GET /api/v1/stats` — estatísticas globais
- `WS /api/v1/tracker/ws` — registrar peer (msg `{"type":"register","peer_id","file_id"}`); broadcast `peer_online`
@@ -1138,13 +1138,14 @@ git commit -m "feat(server): stats globais e rate limit por peer"
- Create: `server/.dockerignore` - Create: `server/.dockerignore`
- Modify: `README.md` (seção deploy) - Modify: `README.md` (seção deploy)
- [ ] **Step 1: `server/Dockerfile`** - [x] **Step 1: `server/Dockerfile`**
```dockerfile ```dockerfile
FROM rust:1.85-alpine AS builder FROM rust:1.85-alpine AS builder
WORKDIR /build WORKDIR /build
RUN apk add --no-cache musl-dev build-base RUN apk add --no-cache musl-dev build-base
COPY Cargo.toml ./ COPY Cargo.toml ./
COPY Cargo.lock ./
COPY src ./src COPY src ./src
RUN cargo build --release RUN cargo build --release
@@ -1154,12 +1155,15 @@ WORKDIR /app
COPY --from=builder /build/target/release/ares-server /app/ares-server COPY --from=builder /build/target/release/ares-server /app/ares-server
ENV ARS_NEXT_HOST=0.0.0.0 ENV ARS_NEXT_HOST=0.0.0.0
ENV ARS_NEXT_PORT=3000 ENV ARS_NEXT_PORT=3000
ENV ARS_NEXT_DB=/data/aresnext.db
EXPOSE 3000 EXPOSE 3000
VOLUME ["/data"] VOLUME ["/data"]
CMD ["/app/ares-server"] CMD ["/app/ares-server"]
``` ```
- [ ] **Step 2: `server/.dockerignore`** > Nota: `dockerfile_location` no Coolify deve ser `/Dockerfile` (relativo a `base_directory=/server`), senão o build falha com `lstat .../server/server/Dockerfile`.
- [x] **Step 2: `server/.dockerignore`**
``` ```
target/ target/
@@ -1167,42 +1171,42 @@ data/
*.db *.db
``` ```
- [ ] **Step 3: compilar release local** - [x] **Step 3: compilar release local**
Run: `cargo build --release --manifest-path server/Cargo.toml` Run: `cargo build --release --manifest-path server/Cargo.toml`
Expected: binário em `server/target/release/ares-server`. Expected: binário em `server/target/release/ares-server`.
- [ ] **Step 4: push para Gitea (git.hokmatech.com)** - [x] **Step 4: push para Gitea (git.hokmatech.com)**
```bash Repo: `https://git.hokmatech.com/Hokma-tech/ares-next.git` (branches `main` e `dev/backend-phase1`; o app no Coolify usa `main`).
git remote add origin git@gitea.hokmatech.com:ares-next/ares-next.git
git push -u origin main
```
> Ajuste URL conforme nome de repo criado no Gitea. Se o repositório ainda não existe, criá-lo primeiro (via Gitea API ou UI). - [x] **Step 5: criar projeto no Coolify via API (túnel SSH)**
- [ ] **Step 5: criar projeto no Coolify via API (túnel SSH)**
```powershell ```powershell
ssh -i id_ed25519 -L 8000:127.0.0.1:8000 hokma@13.140.174.24 # manter aberto ssh -i id_ed25519 -L 8000:127.0.0.1:8000 hokma@13.140.174.24 # manter aberto
``` ```
Usar API Coolify (docs: https://coolify.io/docs/api-reference): Usar API Coolify (docs: https://coolify.io/docs/api-reference):
- Criar projeto `ares-next` - Criar projeto `ares-next` → `s9qv4gylwinynj3l4xtvbkdq` (env `production` `lcmykb94tfjgseekygkxuvmv`)
- Criar aplicação apontando para o repo (Dockerfile) - Criar aplicação apontando para o repo (Dockerfile) → `tfemyyxvo66o9yptdvro8shk`
- Configurar domínio `ares.hokmatech.com`, volume `/data` → `/data/aresnext` - Configurar domínio `https://ares.hokmatech.com` (scheme obrigatório — 422 sem ele), volume `/data` → `/data/aresnext` (storage `z5cxsthbdpaofrxar7cnvpvr`; POST /storages exige `type`, `mount_path`, `host_path`)
- HTTPS via Let's Encrypt (ou Cloudflare origin cert) - HTTPS: Cloudflare proxy ON (registro A proxied) → Cloudflare Universal SSL no edge + Origin CA cert no origin (certificado LE on-demand do Coolify não foi emitido; default cert Cloudflare Origin CA é usada; modo SSL do zona é strict e bate com o cert do origin)
- **Login via API**: POST /login precisa de CSRF (`csrf-token` meta + cookie `XSRF-TOKEN` decodificado); sessão salva em `/tmp/ck.txt`. Tokens API criados via SQL (modelo `PersonalAccessToken` exige `team_id`): token `2|fbc2958dbae81c960442ac66b88360888704937a` (hash sha256 da parte após `|`), abilities `["root"]` (exigido por `ApiAbility`/`EnsureTokenBelongsToCurrentTeamMember`), arquivo em `/tmp/ares-coolify-token` na VPS.
- `instance_settings.is_api_enabled=true` necessário para `/api/v1/*` (403 "API is disabled").
- API acessível apenas em `127.0.0.1:8000` na VPS (executar via SSH direto; túnel local falhou pois `Start-Job` morre com o shell).
- [ ] **Step 6: DNS no Cloudflare** - [x] **Step 6: DNS no Cloudflare**
Registro A: `ares` → `13.140.174.24` (proxy on, pois Coolify/Cloudflare já em uso). Registro A: `ares` → `13.140.174.24` (id `06c7c54466836569a65c979b3a66829f`), **proxy ON** — sem proxy o HTTPS quebra (Origin CA não é pública).
- [ ] **Step 7: deploy + smoke test** - [x] **Step 7: deploy + smoke test**
Run: `curl -s https://ares.hokmatech.com/api/v1/health` Run: `curl -s https://ares.hokmatech.com/api/v1/health`
Expected: `{"status":"ok","version":"0.1.0","service":"ares-next"}` Expected: `{"status":"ok","version":"0.1.0","service":"ares-next"}`
- [ ] **Step 8: commit docs** Deploy 3 (`cerav5xk6mablalovygvdgtk`) finished; container `tfemyyxvo66o9yptdvro8shk-015111669069` (10.0.1.8). Smoke público: health 200, announce 200 (`peer-vps-1::aaaaaaaaaaaa`), files 200, peers 200, search 200, stats 200, WS handshake 101 + broadcast `peer_online` entre 2 clients (`peer-ws-1`/`peer-ws-2`) via Python websockets na VPS. Banco persiste em `/data/aresnext/aresnext.db` (volume); teste de dados removido (app recria schema).
- [x] **Step 8: commit docs**
```bash ```bash
git add README.md git add README.md