{
  "title": "معماری دامنه و DNS",
  "slug": "team/devops/domain-architecture",
  "url": "/docs/team/devops/domain-architecture",
  "frontmatter": {
    "layout": "doc",
    "title": "معماری دامنه و DNS",
    "description": "تعریف دامنه‌های اصلی، ساب‌دامنه سرویس‌ها و استراتژی پیکربندی DNS",
    "version": "1.0.0",
    "status": "PRIVATE",
    "author": "Antigravity",
    "owner": "Devops Team",
    "created_at": "2026-06-16",
    "updated_at": "2026-06-16",
    "tags": "",
    "reviewers": ""
  },
  "sections": [
    {
      "level": 1,
      "heading": "معماری دامنه و DNS",
      "content": "**Domain & DNS Architecture**\n\n---"
    },
    {
      "level": 2,
      "heading": "۱. اصول معماری",
      "content": "1. **هیچ دامنه‌ای Hard-Coded نیست** — همه آدرس‌ها از طریق Helm Values / Environment Variables قابل تغییر هستند.\n2. **یک دامنه اصلی، چند ساب‌دامنه** — سرویس‌ها روی ساب‌دامنه‌های `{service}.nons.{tld}` در دسترس هستند.\n3. **DNS در لایه Ingress مدیریت می‌شود** — نه در کد سرویس.\n4. **TLS برای همه دامنه‌های عمومی اجباری است** — فقط HTTPS پذیرفته می‌شود.\n\n---"
    },
    {
      "level": 2,
      "heading": "۲. دامنه‌های اصلی (Primary Domains)",
      "content": "| دامنه | نوع | کاربرد | وضعیت |\n|-------|-----|--------|-------|\n| `nons.ir` | TLD ایران | دامنه اصلی پلتفرم برای کاربران ایرانی | 🟡 ثبت شده — تأیید شود |\n| `nons.app` | TLD بین‌الملل | دامنه دوم برای دسترسی بین‌الملل | 🟡 ثبت شده — تأیید شود |\n\n**خط‌مشی:** `nons.ir` دامنه اصلی است. `nons.app` به عنوان fallback و برای کاربران بین‌الملل استفاده می‌شود. تمام تنظیمات DNS ابتدا روی `nons.ir` اعمال و سپس برای `nons.app` تکرار می‌شود.\n\n---"
    },
    {
      "level": 2,
      "heading": "۳. ساب‌دامنه سرویس‌ها (Service Domains)",
      "content": ""
    },
    {
      "level": 3,
      "heading": "۳.۱ سرویس‌های فعلی (MVP)",
      "content": "| ساب‌دامنه | سرویس مقصد | Ingress Route | Port |\n|-----------|-----------|--------------|------|\n| `api.nons.ir` | API Gateway (Traefik) | همه مسیرهای `/v1/*` | ۴۴۳ |\n| `auth.nons.ir` | Auth Service (مستقیم) | مسیرهای OAuth2 | ۴۴۳ |\n| `kratos.nons.ir` | Ory Kratos (ادمین) | مدیریت هویت | ۴۴۳ |"
    },
    {
      "level": 3,
      "heading": "۳.۲ سرویس‌های آینده",
      "content": "| ساب‌دامنه | سرویس | فاز |\n|-----------|-------|-----|\n| `iam.nons.ir` | IAM Service | فاز ۲ |\n| `marketplace.nons.ir` | Marketplace Service | فاز ۲ |\n| `order.nons.ir` | Order Service | فاز ۳ |\n| `payment.nons.ir` | Payment Service | فاز ۳ |\n| `chat.nons.ir` | Chat Service | فاز ۳ |\n| `storage.nons.ir` | Storage Service | فاز ۴ |\n| `monitor.nons.ir` | Monitoring (Grafana) | فاز ۲ |"
    },
    {
      "level": 3,
      "heading": "۳.۳ الگوی نام‌گذاری",
      "content": "```\n{service}.nons.ir\n{service}.nons.app\n```\n\n| مؤلفه | قانون | مثال |\n|-------|-------|------|\n| پیشوند سرویس | اسم سرویس بدون خط تیره | `auth`, `api`, `kratos` |\n| دامنه اصلی | `nons.ir` یا `nons.app` | `nons.ir` |\n| الگوی کامل | `{service}.nons.ir` | `api.nons.ir` |\n| Environment | فقط در Production | — |\n\n---"
    },
    {
      "level": 2,
      "heading": "۴. پیکربندی در Helm Values",
      "content": "همه دامنه‌ها از طریق `values.yaml` در Helm قابل تنظیم هستند. هیچ دامنه‌ای در کد سرویس Hard-Code نمی‌شود."
    },
    {
      "level": 3,
      "heading": "۴.۱ Gateway Ingress",
      "content": "```yaml"
    },
    {
      "level": 1,
      "heading": "deploy/environments/production/values.yaml",
      "content": "gateway:\n  ingress:\n    enabled: true\n    hosts:\n      - host: api.nons.ir\n        paths:\n          - /v1/auth/*\n          - /v1/protected\n      - host: auth.nons.ir\n        paths:\n          - /\n    tls:\n      - hosts:\n          - api.nons.ir\n          - auth.nons.ir\n        secretName: nons-tls\n```"
    },
    {
      "level": 3,
      "heading": "۴.۲ سرویس‌های داخلی",
      "content": "سرویس‌ها از متغیرهای محیطی برای آدرس‌دهی استفاده می‌کنند:\n\n```yaml"
    },
    {
      "level": 1,
      "heading": "deploy/helm/auth-service/values.yaml",
      "content": "env:\n  KRATOS_PUBLIC: \"http://nons-kratos:4433\"\n  KRATOS_ADMIN: \"http://nons-kratos:4434\"\n  HYDRA_PUBLIC: \"http://nons-hydra:4444\"\n  HYDRA_ADMIN: \"http://nons-hydra:4445\"\n  LOGIN_APP: \"http://auth.nons.ir\"\n```\n\nدر محیط توسعه محلی:\n\n```yaml"
    },
    {
      "level": 1,
      "heading": "deploy/environments/local/values.yaml",
      "content": "env:\n  KRATOS_PUBLIC: \"http://localhost:4433\"\n  LOGIN_APP: \"http://localhost:3001\"\n```\n\n---"
    },
    {
      "level": 2,
      "heading": "۵. استراتژی DNS",
      "content": ""
    },
    {
      "level": 3,
      "heading": "۵.۱ نوع رکوردها",
      "content": "| نوع رکورد | مقدار | کاربرد |\n|-----------|-------|--------|\n| `A` | IP سرور K3s |指向 مستقیم به سرور |\n| `CNAME` | `api`, `auth`, ... |指向 به دامنه اصلی |\n| `TXT` | `v=spf1 ...` | احراز هویت ایمیل (آینده) |"
    },
    {
      "level": 3,
      "heading": "۵.۲ نمونه رکوردها",
      "content": "```dns\n; nons.ir — Zone File Example\n@     IN A      185.xxx.xxx.xxx\napi   IN CNAME  @\nauth  IN CNAME  @\nkratos IN CNAME @\n```"
    },
    {
      "level": 3,
      "heading": "۵.۳ تأمین TLS (cert-manager)",
      "content": "```yaml\napiVersion: cert-manager.io/v1\nkind: Certificate\nmetadata:\n  name: nons-tls\n  namespace: nons-system\nspec:\n  secretName: nons-tls\n  issuerRef:\n    name: letsencrypt-prod\n    kind: ClusterIssuer\n  dnsNames:\n    - api.nons.ir\n    - auth.nons.ir\n    - kratos.nons.ir\n```\n\n---"
    },
    {
      "level": 2,
      "heading": "۶. معماری شبکه",
      "content": "```\nUser\n  ↓ (HTTPS — api.nons.ir)\nInternet\n  ↓ (Port 443)\nTraefik Ingress (nons-system)\n  ↓ (Internal K8s Service Discovery)\nauth-service.nons-platform.svc.cluster.local:3001\n  ↓\nkratos.nons-platform.svc.cluster.local:4433\nhydra.nons-platform.svc.cluster.local:4444\n```\n\n**قوانین:**\n\n- خارج از کلاستر: فقط از طریق Ingress (HTTPS) — پورت‌های مستقیم بسته هستند\n- داخل کلاستر: از طریق K8s Service Discovery — `{release}.{namespace}.svc.cluster.local:{port}`\n- Gateway تنها نقطه ورود خارجی است — سرویس‌ها مستقیماً暴露 نمی‌شوند\n\n---"
    },
    {
      "level": 2,
      "heading": "۷. خلاصه",
      "content": "| حوزه | تصمیم |\n|------|--------|\n| دامنه اصلی | `nons.ir` (ایران) + `nons.app` (بین‌الملل) |\n| الگوی ساب‌دامنه | `{service}.nons.ir` |\n| پیکربندی | Helm Values — هیچ دامنه‌ای Hard-Coded نیست |\n| TLS | cert-manager + Let's Encrypt برای همه دامنه‌ها |\n| DNS Provider | بر اساس Registrar (تأیید نشده) |\n| ورود خارجی | فقط از طریق Gateway (Traefik) روی پورت ۴۴۳ |\n| ارتباط داخلی | K8s Service Discovery |"
    }
  ]
}