ЦЗ Цахим Засаг
GitHub Нэвтрэх

Архитектур

dgov.mn доорх бүх зүйл нэг цөмөөс ирдэг: Gerege Nexus. Нэвтрэлт, тенант, өгөгдлийн сан ба түүний тусгаарлалт, OAuth2/OIDC сервер, ДАН ба E-ID, RBAC, аудит, аппын gate, цэс, HTTP сервер, бүрхүүл — бүгд цөмийнх. Байрлуулалт бүр цөмөөс юуг нэмж байгаагаараа ялгагдана, юуг нь хуулж авснаараа биш.

Түвшин 1 ба Түвшин 2

Экосистемийн git стратеги (ECOSYSTEM_GIT_STRATEGY.md) хоёр л түвшин зөвшөөрдөг ба сонголтын дүрэм нь нэг өгүүлбэр: тохиргоо хүрэлцэхгүй болохоор л Түвшин 2 руу.

Түвшин 1 Түвшин 2
Репод юу байгаа тохиргоо, nginx, deploy скрипт дээр нь Go модулиуд, миграц, каталог
Цөм хаанаас ирдэг GHCR-ийн бэлэн образ go.mod-ын нэг мөр, хост дээр баригдана
Жишээ open.dgov.mn sso.dgov.mn
Шинэчлэх гэдэг нь CORE_REF + IMAGE_TAG хоёр мөр go.mod-ын хувилбар (Dependabot PR)

open.dgov.mn нь Түвшин 1 хэвээр байгаа нь дутуу хийсэн ажил биш: төрийн үйлчилгээний дэлгэцүүд цөмд аль хэдийн байгаа тул тэр байрлуулалтыг цөмөөс ялгах бүх зүйл — нэр, домэйн, нэвтрэлтийн чиглэл — дөрвөн файлд багтдаг. Өөрийн Go модуль хэрэгтэй болох өдөр л Түвшин 2 болно.

Итгэлийн чиглэл

    иргэн / албан хаагч
            │
            ▼
   ┌─────────────────┐   OIDC: authorization_code + PKCE   ┌────────────────┐
   │  open.dgov.mn   │ ─────────────────────────────────▶ │  sso.dgov.mn   │
   │  (SSO клиент)   │ ◀───────────────────────────────── │  (SSO сервер)  │
   └─────────────────┘        id_token, access_token       └────────────────┘
            │                                                      │
            ▼                                                      ▼
   dgov_nexus_postgres                                    dgov_sso_postgres

Чиглэл нэг талтай. sso.dgov.mn бол identity-гийн эх сурвалж: SSO_ISSUER нь https://sso.dgov.mn, discovery ба токены iss бүгд тэр хаяг. open.dgov.mn нь түүн дээр бүртгэгдсэн клиент бөгөөд SSO_CLIENT_ISSUER-ээрээ тийш заана.

Анхаарах хоёр зүйл:

  1. sso.dgov.mn унавал open.dgov.mn руу шинээр нэвтрэх зам байхгүй. 2026-08-17-ноос SSO_CLIENT_LOCAL_LOGIN=false — тэр домэйн руу орох цорын ганц зам провайдер. Одоо байгаа сессүүд үргэлжилнэ. Буцах зам Runbook-ууд-д.
  2. sso.dgov.mn өөрөө өөрийгөө таина. Тэр суулгац хүнийг өөрөө нэвтрүүлдэг бөгөөд нэвтрэлтийн бүтээгдэхүүн байхаас гадна өөрийн дээрээ суусан аппуудад identity тарааж өгдөг.

Хост ба портууд

38.180.243.138 — Ubuntu 26.04 LTS, 4 CPU, 7 GB RAM, 50 GB диск. Хоёр стек зэрэгцэн ажиллана:

open.dgov.mn sso.dgov.mn
Репо open-dgov-mn sso-dgov-mn
Байрлуулалт /opt/open-dgov-mn/ /opt/sso-dgov-mn/
Compose стек dgov_nexus dgov_sso
Postgres 5434 5438
Redis 6381
Backend 8082 8096
Бүрхүүл 3008 3016
Backend образ …/backend:latest (GHCR) sso-dgov:latest (хост дээр баригдсан)
Бүрхүүл образ …/frontend:latest …/frontend:<commit>

Портууд бүгд 127.0.0.1 дээр л нийтлэгддэг. Гадагшаа гарах цорын ганц зам nginx бөгөөд vhost бүр яг нэг server_name-тэй: гурван домэйн нэг IP рүү заадаг тул default_server ч, wildcard ч биш байх нь заавал — эсрэг тохиолдолд нэг vhost хөршийнхөө урсгалыг залгина.

Өгөгдлийн сан тус тусдаа. Нэг санд хоёр суулгац хийх нь тусгаарлалт байхгүй гэсэн үг; хоёр сан нь мөн адил хоёр нөөцлөлт гэсэн үг (Ажиллагаа).

Домэйнууд

Домэйн Юу хариулдаг TLS
open.dgov.mn Цахим Засгийн бүрхүүл + API Let's Encrypt
sso.dgov.mn Нэвтрэлтийн бүрхүүл + API + OIDC discovery Let's Encrypt
docs.dgov.mn Энэ баримтын сайт (статик) Let's Encrypt
dgov.mn, www.dgov.mn Одоогоор эзэнгүй

dgov.mn апексыг зориудаар эзлээгүй байгаа: тэр нь ирээдүйн порталын хаяг бөгөөд баримтын сайт түүнийг түр эзэлбэл хожим нүүлгэх ажил, чиглүүлэлт, эвдэрсэн холбоос болж хувирна.

Каталог ба апп суулгац

Цөм нь аппуудыг каталогоос уншиж, тенант бүрээр суулгацын мөр хайдаг. Каталогт байх нь суулгасан гэсэн үг биш: суулгацын мөр байхгүй бол модулийн API 403 хариулна, цэсэнд ч гарахгүй.

Платформ өөрийнхөө компилдсэн модулиудтай зөрчилдсөн каталог дээр асахаа болино — бүрэн бүтэн байдал нь анхааруулга биш, асалтын алдаа. Тиймээс цөмийн шинэ tag авах бүрд каталогийн хуулбар бичлэгүүдийг цөмийнхтэй тааруулах нь bump-ийн нэг хэсэг (sso.dgov.mn).

Апп суулгах нь SQL биш, API-аар:

POST /api/v1/store/apps/{slug}/install

Юу энд байхгүй вэ

Платформын өөрийнх нь архитектур — модулийн загвар, tenancy, RBAC, аудит, бүрхүүлийн гэрээ — энэ репогийн сэдэв биш. Тэдгээр цөмийн баримтад байдаг: