From c0533f3ed91fd78856d0f01da3b234d3f969875e Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Sun, 7 Jun 2026 23:02:35 +0700 Subject: [PATCH] feat(infra): add deployment architecture docs and remove unused DNS secrets from telemetry workflow --- .github/workflows/telemetry-ci-cd.yml | 3 - infra/README.md | 140 ++++++++++++++++++++++++++ 2 files changed, 140 insertions(+), 3 deletions(-) create mode 100644 infra/README.md diff --git a/.github/workflows/telemetry-ci-cd.yml b/.github/workflows/telemetry-ci-cd.yml index 36e3396..c81b863 100644 --- a/.github/workflows/telemetry-ci-cd.yml +++ b/.github/workflows/telemetry-ci-cd.yml @@ -149,7 +149,6 @@ jobs: VPS_PORT: ${{ secrets.TELEMETRY_VPS_PORT || '22' }} VPS_USER: ${{ secrets.TELEMETRY_VPS_USER }} GHCR_PAT: ${{ secrets.GHCR_PAT }} - CF_DNS_API_TOKEN: ${{ secrets.CF_DNS_API_TOKEN }} SHA: ${{ steps.sha.outputs.sha }} run: | # Setup SSH key @@ -205,8 +204,6 @@ jobs: cat > .env << ENVEOF CLICKHOUSE_USER=${CLICKHOUSE_USER:-telemetry} CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD:-telemetry} - CF_DNS_API_TOKEN=${{ secrets.CF_DNS_API_TOKEN }} - LETS_ENCRYPT_EMAIL=${{ secrets.LETS_ENCRYPT_EMAIL || 'admin@asepharyana.my.id' }} ENVEOF # Login to GHCR diff --git a/infra/README.md b/infra/README.md new file mode 100644 index 0000000..e7afa1e --- /dev/null +++ b/infra/README.md @@ -0,0 +1,140 @@ +# Infra — ZeaVis Edu Multi-VPS Deployment + +## Arsitektur + +``` +┌─────────────────────────────────────────────┐ ┌──────────────────────────────────────────────┐ +│ App VPS (imrnes) │ │ Telemetry VPS (orange) │ +│ 100.108.1.124 │ │ 100.96.248.86 │ +│ Arch Linux │ │ Ubuntu │ +│ │ │ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ ┌──────────┐ ┌──────────────┐ │ +│ │ Web │ │ API │ │ ML │ │ │ │Prometheus│ │Metric │ │ +│ │:80 │ │:3000 │ │:8000 │ │ │ │:9090 │ │Ingester │ │ +│ │/metrics │ │/metrics │ │/metrics │ │ │ │ │ │:9091 │ │ +│ └──────────┘ └──────────┘ └──────────┘ │ │ └────┬─────┘ └──────┬───────┘ │ +│ ┌──────────────────────────────────────┐ │ │ │ │ │ +│ │ Node Exporter │ │ │ │ remote_write │ │ +│ │ :9100 │ │ │ ▼ ▼ │ +│ └──────────────────────────────────────┘ │ │ ┌──────────────────────────────────────┐ │ +│ │ │ │ Vector │ │ +│ ┌──────────────┐ │ │ │ :9001 │ │ +│ │ Traefik │ │ │ └────────────────┬─────────────────────┘ │ +│ │ (Coolify) │ │ │ │ │ +│ └──────────────┘ │ │ ▼ │ +│ │ │ ┌──────────────────────────────────────┐ │ +│ ZeaVis Edu Apps via │ │ │ ClickHouse │ │ +│ zeavisedu.asepharyana.my.id │ │ │ :8123 │ │ +│ │ │ └───────────────┬──────────────────────┘ │ +│ │ │ │ │ +│ │ │ ▼ │ +│ ==== Tailscale (WireGuard) ==== │ │ ┌──────────────────────────────────────┐ │ +│ │ │ │ Query Proxy │ │ +│ │ │ │ :9092 │ │ +│ │ │ └───────────────┬──────────────────────┘ │ +│ │ │ │ │ +│ │ │ ▼ │ +│ │ │ ┌──────────────────────────────────────┐ │ +│ │ │ │ Telemetry UI (nginx) │ │ +│ │ │ │ :8181 │ │ +│ │ │ └──────────────────────────────────────┘ │ +│ │ │ │ +│ │ │ Coolify + Traefik handles: │ +│ │ │ telemetry.zeavisedu.asepharyana.my.id │ +└─────────────────────────────────────────────┘ └──────────────────────────────────────────────┘ +``` + +## Prerequisites + +### GitHub Secrets (untuk CI/CD) + +**App VPS deploy (`.github/workflows/deploy.yml`):** +| Secret | Value | +|--------|-------| +| `VPS_HOST` | `100.108.1.124` (imrnes) | +| `VPS_USER` | `mytheclipse` | +| `VPS_SSH_KEY` | Private SSH key for imrnes | +| `VPS_PORT` | `22` | +| `DATABASE_URL` | PostgreSQL connection string | +| `SESSION_SECRET` | Random session secret | + +**Telemetry VPS deploy (`.github/workflows/telemetry-ci-cd.yml`):** +| Secret | Value | +|--------|-------| +| `TELEMETRY_VPS_HOST` | `100.96.248.86` (orange) | +| `TELEMETRY_VPS_USER` | SSH username for orange | +| `TELEMETRY_VPS_SSH_KEY` | Private SSH key for orange | +| `TELEMETRY_VPS_PORT` | `22` | +| `GHCR_PAT` | GitHub PAT with `write:packages` + `read:packages` | + +### VPS Setup + +#### 1. App VPS (imrnes — 100.108.1.124) + +```bash +# Create Docker network +docker network create app-shared-net +docker network create telemetry-net + +# ZeaVis Edu apps deploy automatically via GitHub Actions +``` + +#### 2. Telemetry VPS (orange — 100.96.248.86) + +Deploy via GitHub Actions workflow `.github/workflows/telemetry-ci-cd.yml`. + +Atau manual: +```bash +ssh mytheclipse@100.96.248.86 +mkdir -p /opt/telemetry +# ... sync files from telemetry/ directory ... +cd /opt/telemetry +docker compose up -d +bash clickhouse/init.sh +``` + +## Port yang dibuka + +### App VPS (imrnes) +| Port | Service | Akses | +|------|---------|-------| +| 80/443 | Web (via Traefik/Coolify) | Public | +| 3000 | API metrics | Tailscale-only | +| 8000 | ML service metrics | Tailscale-only | +| 9100 | Node Exporter | Tailscale-only | + +### Telemetry VPS (orange) +| Port | Service | Akses | +|------|---------|-------| +| 80/443 | Telemetry UI (via Coolify Traefik) | Public | +| 8181 | Telemetry UI (direct) | Tailscale-only | +| 9090 | Prometheus | Tailscale-only | +| 9091 | Metric Ingester | Tailscale-only | +| 9001 | Vector HTTP source | Tailscale-only | +| 8123 | ClickHouse HTTP | Tailscale-only | +| 9000 | ClickHouse Native | Tailscale-only | + +## Metrics Flow + +1. **App services** expose `/metrics` pada port masing-masing +2. **Prometheus** di orange VPS scrape via Tailscale IP (`100.108.1.124:PORT`) +3. **Prometheus** forward ke **Metric Ingester** via `remote_write` +4. **Metric Ingester** enrich → filter → forward ke **Vector** +5. **Vector** buffer → write ke **ClickHouse** +6. **Telemetry UI** query via **Query Proxy** → **ClickHouse** + +## Useful Commands + +```bash +# Telemetry stack status +make telemetry-status + +# View telemetry logs +make telemetry-logs s=prometheus + +# Send test metric +make telemetry-test-metric + +# Restart a service +make telemetry-restart s=vector +```