From 163addd183105f08d2c94d8cd63238c396294b11 Mon Sep 17 00:00:00 2001 From: HOKMA-TECH Date: Thu, 6 Aug 2026 10:34:30 -0300 Subject: [PATCH] docs: instrucoes de deploy no Coolify + Task 7 concluida --- README.md | 22 ++++++++++ .../plans/2026-08-05-ares-backend-phase1.md | 42 ++++++++++--------- 2 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..44fbb11 --- /dev/null +++ b/README.md @@ -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` \ No newline at end of file diff --git a/docs/superpowers/plans/2026-08-05-ares-backend-phase1.md b/docs/superpowers/plans/2026-08-05-ares-backend-phase1.md index 92586d7..c28db8c 100644 --- a/docs/superpowers/plans/2026-08-05-ares-backend-phase1.md +++ b/docs/superpowers/plans/2026-08-05-ares-backend-phase1.md @@ -1138,13 +1138,14 @@ git commit -m "feat(server): stats globais e rate limit por peer" - Create: `server/.dockerignore` - Modify: `README.md` (seção deploy) -- [ ] **Step 1: `server/Dockerfile`** +- [x] **Step 1: `server/Dockerfile`** ```dockerfile FROM rust:1.85-alpine AS builder WORKDIR /build RUN apk add --no-cache musl-dev build-base COPY Cargo.toml ./ +COPY Cargo.lock ./ COPY src ./src RUN cargo build --release @@ -1154,12 +1155,15 @@ WORKDIR /app COPY --from=builder /build/target/release/ares-server /app/ares-server ENV ARS_NEXT_HOST=0.0.0.0 ENV ARS_NEXT_PORT=3000 +ENV ARS_NEXT_DB=/data/aresnext.db EXPOSE 3000 VOLUME ["/data"] 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/ @@ -1167,42 +1171,42 @@ data/ *.db ``` -- [ ] **Step 3: compilar release local** +- [x] **Step 3: compilar release local** Run: `cargo build --release --manifest-path server/Cargo.toml` 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 -git remote add origin git@gitea.hokmatech.com:ares-next/ares-next.git -git push -u origin main -``` +Repo: `https://git.hokmatech.com/Hokma-tech/ares-next.git` (branches `main` e `dev/backend-phase1`; o app no Coolify usa `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). - -- [ ] **Step 5: criar projeto no Coolify via API (túnel SSH)** +- [x] **Step 5: criar projeto no Coolify via API (túnel SSH)** ```powershell 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): -- Criar projeto `ares-next` -- Criar aplicação apontando para o repo (Dockerfile) -- Configurar domínio `ares.hokmatech.com`, volume `/data` → `/data/aresnext` -- HTTPS via Let's Encrypt (ou Cloudflare origin cert) +- Criar projeto `ares-next` → `s9qv4gylwinynj3l4xtvbkdq` (env `production` `lcmykb94tfjgseekygkxuvmv`) +- Criar aplicação apontando para o repo (Dockerfile) → `tfemyyxvo66o9yptdvro8shk` +- 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: 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` 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 git add README.md