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`
|
- 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
|
||||||
|
|||||||
Reference in New Issue
Block a user