Skip to content

۱۸ — Deploy و DNS

فلو

GitHub (stage) → GitHub Actions → SSH → stage.takeeat.ir
محیطURLسرور
Stagehttps://stage.takeeat.irEco-Small4 193.176.242.38

Stage از ایندکس موتور جستجو و crawlerهای AI دور نگه داشته می‌شود:

  • BLOCK_SEARCH_INDEXING=true در .env.local
  • robots.txt با Disallow: / برای GPTBot، Google-Extended، CCBot و …
  • هدر X-Robots-Tag: noindex, … در Caddy و Next.js proxy
  • <meta name="robots" content="noindex"> در layout

| Prod | https://app.takeeat.ir | (بعداً) | | Marketing | https://takeeat.ir | (بعداً) | | Docs | https://docs.takeeat.ir | static VitePress — noindex | | Monitoring | https://status.takeeat.ir | Uptime Kuma — basic auth |

→ راه‌اندازی ops: 23-self-host-ops.md

GitHub Actions

WorkflowTriggerکار
ci.ymlPR به develop / stage / productionunit/API mock + integration test + build
deploy-stage.ymlpush به stagetest:ci → deploy خودکار → smoke
deploy-prod.ymlدستی از productiontest:ci → deploy (با Environment approval)

Secrets (Settings → Secrets and variables → Actions)

Secretمقدار
STAGE_HOST193.176.242.38
STAGE_USERubuntu
STAGE_SSH_PRIVATE_KEYکلید خصوصی deploy (فقط GitHub Actions)

Environment production

در GitHub → Settings → Environments → productionRequired reviewers
تا deploy پروداکشن بدون تأیید انسان اجرا نشود.

فلو

PR → CI (`npm run test:ci` + build)
develop → stage (PR) → Deploy Stage → stage.takeeat.ir
stage → production (PR) → Deploy Production (دستی + approval) → app.takeeat.ir

NS دامنه (Arvan CDN)

در nic.ir → دامنه‌های من → takeeat.ir → کارگزار DNS:

f.ns.arvancdn.ir
r.ns.arvancdn.ir

بعد از propagate، CDN آروان status: active می‌شود.

subdomainهای ops

Subdomainنقش
docs.takeeat.irمستندات VitePress
status.takeeat.irUptime Kuma

→ SSL: docs و status در scripts/obtain-origin-certs.sh
→ راه‌اندازی: 23-self-host-ops.md

احراز دسترسی فنی (IRNIC)

دامنه باید از اینترنت در دسترس باشد (HTTP یا HTTPS).

روش پیشنهادی: فایل HTML/TXT

  1. در پنل nic.ir نام فایل و محتوا را ببینید
  2. روی سرور:
bash
cd /opt/takeeat
bash scripts/set-nic-verify.sh "نام-فایل.txt" "محتوای-کد"
  1. تست: curl https://takeeat.ir/نام-فایل.txt

→ Deploy و ops: 21-ops-runbook.md
→ لانچ prod: 19-production-launch-checklist.md

اگر هنوز NS عوض نشده

در nic.ir → ردیف‌های میزبانی دامنه (Host):

HostTypeValue
@A193.176.242.38

این کار قبل از NS آروان هم HTTP verify را ممکن می‌کند.

SSL اوریجین (Let's Encrypt + DNS-01 آروان)

دو لایه SSL داریم:

لایهمسئولدامنه‌ها
CDN (لبه)آروان managedtakeeat.ir, *.takeeat.ir
Origin (سرور)Let's Encryptstage.takeeat.ir, takeeat.ir, www.takeeat.ir

برای صدور اولیه (یک‌بار):

bash
cd /opt/takeeat
# ARVAN_API_KEY باید در .env.local باشد
bash scripts/obtain-origin-certs.sh
sudo systemctl restart caddy

تمدید خودکار

  • certbot.timer روزی دو بار certbot renew را اجرا می‌کند
  • هوک‌های DNS از API آروان _acme-challenge TXT می‌سازند/پاک می‌کنند (scripts/certbot-arvan-*.sh)
  • بعد از تمدید موفق، Caddy خودکار reload می‌شود

تست بدون صدور واقعی:

bash
sudo certbot renew --dry-run

Deploy دستی روی سرور

bash
cd /opt/takeeat
git pull origin stage
bash scripts/deploy-stage.sh