۲۳ — Self-host Ops Stack
Uptime Kuma + backup Postgres + سایت داک VitePress — روی همان VPS stage.
معماری
| سرویس | URL | runtime |
|---|---|---|
| Docs | https://docs.takeeat.ir | static (Caddy file_server) |
| Monitoring | https://status.takeeat.ir | Uptime Kuma (docker) + Caddy basic auth |
| Backup | /opt/backups/ | cron روزانه ۰۳:۰۰ |
doc/*.md → vitepress build → docs-site/.vitepress/dist → Caddy
deploy/docker-compose.ops.yml → uptime-kuma :3001 → Caddy (basic auth)
Postgres → backup-db.sh → /opt/backups/takeeat-*.sql.gzSetup اولیه (یکبار روی سرور)
bash
cd /opt/takeeat
bash scripts/bootstrap-stage-server.sh # اگر سرور تازه است
bash scripts/setup-ops.sh # Kuma + Caddy auth + cron + DNSDNS (خودکار اگر ARVAN_API_KEY در .env.local)
bash
bash scripts/setup-ops-dns.shA records: docs و status → 193.176.242.38
Uptime Kuma admin (یکبار ~۲ دقیقه)
- باز کنید
https://status.takeeat.ir(user/pass از/etc/caddy/ops.env— موقع setup-ops چاپ میشود) - ساخت admin در UI خود Kuma
- افزودن به
/opt/takeeat/.env.local:
env
KUMA_USERNAME=your-admin
KUMA_PASSWORD=your-password- deploy بعدی یا
node scripts/seed-kuma-monitors.mjs→ monitors seed
Deploy (خودکار)
develop → PR → stage branch → GitHub Actions → deploy-stage.shهر deploy:
npm run docs:builddocker compose -f deploy/docker-compose.ops.yml up -dbash scripts/setup-ops.sh(idempotent)
دستورات روزمره
| کار | دستور |
|---|---|
| backup دستی | bash scripts/backup-db.sh |
| restore | bash scripts/restore-db.sh /opt/backups/takeeat-....sql.gz --yes |
| seed monitors | node scripts/seed-kuma-monitors.mjs |
| docs لوکال | npm run docs:dev |
| build docs | npm run docs:build |
SSL برای subdomainهای ops
بعد از اضافه شدن DNS، cert را renew/expand کنید:
bash
cd /opt/takeeat
bash scripts/obtain-origin-certs.sh # شامل docs + status
sudo systemctl restart caddyenv vars (server)
| var | کجا | نقش |
|---|---|---|
ARVAN_API_KEY | .env.local | DNS automation |
KUMA_USERNAME / KUMA_PASSWORD | .env.local | seed monitors |
OPS_BASIC_AUTH_* | /etc/caddy/ops.env | Caddy basic auth (status) |
→ جزئیات backup/monitoring: 21-ops-runbook.md
Troubleshooting
| مشکل | کار |
|---|---|
| docs 404 | npm run docs:build + sudo systemctl reload caddy |
| status 502 | docker compose -f deploy/docker-compose.ops.yml ps |
| Caddy auth fail | sudo cat /etc/caddy/ops.env |
| backup empty | docker-compose ps — postgres up? |
| Kuma seed skip | creds در .env.local |
فایلهای repo
| path | نقش |
|---|---|
docs-site/.vitepress/ | VitePress config (RTL, sidebar) |
deploy/docker-compose.ops.yml | Uptime Kuma |
deploy/caddy/Caddyfile.stage | docs + status blocks |
scripts/setup-ops.sh | orchestrator |
scripts/backup-db.sh | pg_dump |
scripts/setup-ops-dns.sh | Arvan A records |
scripts/seed-kuma-monitors.mjs | monitors |