۱۸ — Deploy و DNS
فلو
GitHub (stage) → GitHub Actions → SSH → stage.takeeat.ir| محیط | URL | سرور |
|---|---|---|
| Stage | https://stage.takeeat.ir | Eco-Small4 193.176.242.38 |
Stage از ایندکس موتور جستجو و crawlerهای AI دور نگه داشته میشود:
BLOCK_SEARCH_INDEXING=trueدر.env.localrobots.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
| Workflow | Trigger | کار |
|---|---|---|
ci.yml | PR به develop / stage / production | unit/API mock + integration test + build |
deploy-stage.yml | push به stage | test:ci → deploy خودکار → smoke |
deploy-prod.yml | دستی از production | test:ci → deploy (با Environment approval) |
Secrets (Settings → Secrets and variables → Actions)
| Secret | مقدار |
|---|---|
STAGE_HOST | 193.176.242.38 |
STAGE_USER | ubuntu |
STAGE_SSH_PRIVATE_KEY | کلید خصوصی deploy (فقط GitHub Actions) |
Environment production
در GitHub → Settings → Environments → production → Required 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.irNS دامنه (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.ir | Uptime Kuma |
→ SSL: docs و status در scripts/obtain-origin-certs.sh
→ راهاندازی: 23-self-host-ops.md
احراز دسترسی فنی (IRNIC)
دامنه باید از اینترنت در دسترس باشد (HTTP یا HTTPS).
روش پیشنهادی: فایل HTML/TXT
- در پنل nic.ir نام فایل و محتوا را ببینید
- روی سرور:
cd /opt/takeeat
bash scripts/set-nic-verify.sh "نام-فایل.txt" "محتوای-کد"- تست:
curl https://takeeat.ir/نام-فایل.txt
→ Deploy و ops: 21-ops-runbook.md
→ لانچ prod: 19-production-launch-checklist.md
اگر هنوز NS عوض نشده
در nic.ir → ردیفهای میزبانی دامنه (Host):
| Host | Type | Value |
|---|---|---|
@ | A | 193.176.242.38 |
این کار قبل از NS آروان هم HTTP verify را ممکن میکند.
SSL اوریجین (Let's Encrypt + DNS-01 آروان)
دو لایه SSL داریم:
| لایه | مسئول | دامنهها |
|---|---|---|
| CDN (لبه) | آروان managed | takeeat.ir, *.takeeat.ir |
| Origin (سرور) | Let's Encrypt | stage.takeeat.ir, takeeat.ir, www.takeeat.ir |
برای صدور اولیه (یکبار):
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-challengeTXT میسازند/پاک میکنند (scripts/certbot-arvan-*.sh) - بعد از تمدید موفق، Caddy خودکار reload میشود
تست بدون صدور واقعی:
sudo certbot renew --dry-runDeploy دستی روی سرور
cd /opt/takeeat
git pull origin stage
bash scripts/deploy-stage.sh