Deploy، Verification و Rollback
این Runbook نخستین Push، بررسی سلامت و Rollback دستی Stack فرانتاند را پوشش میدهد.
مخاطب: DevOps/SRE و Maintainer دارای دسترسی Environment.
خارج از دامنه: تغییر Backend، Nginx مشترک خارج از Host مربوط و Stackهای دیگر.
۱۱. ترتیب نخستین Deploy
پیش از Push این موارد باید آماده باشند:
- Directory و
.envفرانتاند روی VPS؛ - Login کاربر
deployبه GHCR؛ - Secretها و Variableهای Environment
development؛ - DNS، Certificate و Nginx مربوط به
ui.iranihosts.com؛ - Backend سالم با Alias
tripylon-apiروی Networkdong_frontend.
سپس Branch را Push و Pull Request بسازید. Merge به main Workflow Build and deploy development را اجرا میکند:
- Typecheck، Lint، Test و Audit؛
- Build چندمعماری Image؛
- Push به
ghcr.io/hoa-building-management/frontend؛ - Deploy با Digest تغییرناپذیر؛
- Liveness داخلی و Readiness Backend؛
- Smoke Test عمومی HTTPS؛
- 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-refDigest موفق جاری را نگه میدارد.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 --quietManifest و 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 انجام میشود.