docs: instrucoes de deploy no Coolify + Task 7 concluida
This commit is contained in:
@@ -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`
|
||||
- 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
|
||||
|
||||
Reference in New Issue
Block a user