feat(infra): add deployment architecture docs and remove unused DNS secrets from telemetry workflow
This commit is contained in:
@@ -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
|
||||
|
||||
+140
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user