پرش به محتویات

Deploy، Verification و Rollback

این Runbook نخستین Push، بررسی سلامت و Rollback دستی Stack فرانت‌اند را پوشش می‌دهد.

مخاطب: DevOps/SRE و Maintainer دارای دسترسی Environment.

خارج از دامنه: تغییر Backend، Nginx مشترک خارج از Host مربوط و Stackهای دیگر.

۱۱. ترتیب نخستین Deploy

پیش از Push این موارد باید آماده باشند:

  1. Directory و .env فرانت‌اند روی VPS؛
  2. Login کاربر deploy به GHCR؛
  3. Secretها و Variableهای Environment development؛
  4. DNS، Certificate و Nginx مربوط به ui.iranihosts.com؛
  5. Backend سالم با Alias tripylon-api روی Network dong_frontend.

سپس Branch را Push و Pull Request بسازید. Merge به main Workflow Build and deploy development را اجرا می‌کند:

  1. Typecheck، Lint، Test و Audit؛
  2. Build چندمعماری Image؛
  3. Push به ghcr.io/hoa-building-management/frontend؛
  4. Deploy با Digest تغییرناپذیر؛
  5. Liveness داخلی و Readiness Backend؛
  6. Smoke Test عمومی HTTPS؛
  7. Rollback خودکار در شکست.

۱۲. بررسی نتیجه

روی VPS برای Commandهای Compose، IMAGE_REF لازم است. مقدار Container جاری را موقت Export کنید:

cd /opt/applications/tripylon-frontend
export IMAGE_REF="$(cat current-image-ref)"
docker compose -f compose.production.yml ps
docker compose -f compose.production.yml logs --tail=100 web
docker compose -f compose.production.yml exec -T web node -e "fetch('http://127.0.0.1:3000/api/health/ready').then(async(r)=>{console.log(r.status,await r.text());if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"
  • current-image-ref Digest موفق جاری را نگه می‌دارد.
  • ps فقط Stack با Project Name ثابت tripylon-frontend را نمایش می‌دهد.
  • logs --tail=100 خروجی را محدود می‌کند.
  • دستور exec هم سلامت Next.js و هم اتصال آن به Backend را بررسی می‌کند.

بررسی عمومی از سیستم محلی:

curl.exe --fail --show-error https://ui.iranihosts.com/api/health/live
curl.exe --fail --show-error https://ui.iranihosts.com/api/health/ready

۱۳. Rollback دستی

Digest قبلی را از previous-image-ref یا یک Run موفق GitHub بردارید:

cd /opt/applications/tripylon-frontend
export IMAGE_REF='ghcr.io/hoa-building-management/frontend@sha256:PREVIOUS_DIGEST'
docker compose -f compose.production.yml config --quiet
docker compose -f compose.production.yml pull web
docker compose -f compose.production.yml up -d --remove-orphans --wait --wait-timeout 180
docker compose -f compose.production.yml exec -T web node -e "fetch('http://127.0.0.1:3000/api/health/ready').then((r)=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"
printf '%s\n' "$IMAGE_REF" > current-image-ref
  • config --quiet Manifest و Variableها را بدون تغییر Container بررسی می‌کند.
  • pull web فقط Image سرویس فرانت‌اند را می‌گیرد.
  • --remove-orphans فقط Orphanهای Compose Project ثابت tripylon-frontend را حذف می‌کند.
  • هیچ دستور down، prune یا Restart برای Stack دیگر اجرا نمی‌شود.

۱۴. حدود امنیت و عملیات

  • .env، Private SSH Key و GHCR Token Commit نمی‌شوند.
  • StrictHostKeyChecking غیرفعال نمی‌شود.
  • Port داخلی 3000 و Backend مستقیما روی اینترنت منتشر نمی‌شوند.
  • HTML و API احراز هویت‌شده در Cloudflare Cache نمی‌شوند.
  • Renewal Certificate، Rotation Key/Token، Patch VPS و Alert سلامت پیش از Production زمان‌بندی می‌شوند.
  • افزایش CPU، Memory، Retry یا Cache فقط پس از Metric و بررسی Core Web Vitals انجام می‌شود.

بازگشت به فهرست عملیات Frontend