Архитектур
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-ын нэг мөр, образ нь эндээс баригдана |
| Шинэчлэх гэдэг нь | пиныг өсгөх | go.mod-ын хувилбар (Dependabot PR) |
Хоёулаа өнөөдөр Түвшин 2. sso.dgov.mn анхнаасаа тийм байсан —
нэвтрэлтийн дөрвөн модуль цөмд байх ёсгүй зүйл. open.dgov.mn
2026-08-17 хүртэл Түвшин 1 байгаад өөрийн эхний модультай болмогцоо шилжсэн:
дүрэм нь «тохиргоо хүрэлцэхгүй болохоор л» бөгөөд тэр өдөр хүрэлцэхээ больсон.
Хоёрын хооронд үлдсэн ялгаа нь образ хаана угсрагддаг: open.dgov.mn-ийх CI
дээр угсарч GHCR-т нийтлэгддэг, sso.dgov.mn-ийх хост дээр баригддаг.
Итгэлийн чиглэл
иргэн / албан хаагч
│
▼
┌────────────────────┐ OIDC: authorization_code + PKCE ┌────────────────┐
│ open.dgov.mn │ ────────────────────────────────▶ │ sso.dgov.mn │
│ (SSO клиент) │ ◀──────────────────────────────── │ (SSO сервер) │
└────────────────────┘ id_token, access_token └────────────────┘
┌────────────────────┐ ▲ │
│ fuelnet.dgov.mn │ ─────────────────┘ │
│ (SSO клиент) │ ▼
└────────────────────┘ dgov_sso_postgres
Чиглэл нэг талтай. sso.dgov.mn бол identity-гийн эх сурвалж: SSO_ISSUER
нь https://sso.dgov.mn, discovery ба токены iss бүгд тэр хаяг. open.dgov.mn
ба fuelnet.dgov.mn хоёул түүн дээр бүртгэгдсэн клиент бөгөөд
SSO_CLIENT_ISSUER-ээрээ тийш заана.
Анхаарах хоёр зүйл:
sso.dgov.mnунавал хоёр клиент рүү шинээр нэвтрэх зам байхгүй. 2026-08-17-ноос хоёуланд ньSSO_CLIENT_LOCAL_LOGIN=false— тэдгээр домэйн руу орох цорын ганц зам провайдер. Одоо байгаа сессүүд үргэлжилнэ. Буцах зам Runbook-ууд-д.sso.dgov.mnөөрөө өөрийгөө таина. Тэр суулгац хүнийг өөрөө нэвтрүүлдэг бөгөөд нэвтрэлтийн бүтээгдэхүүн байхаас гадна өөрийн дээрээ суусан аппуудад identity тарааж өгдөг.
Хост ба портууд
Хоёр машин. Нэг дээр нь нэвтрэлт ба Цахим Засаг, нөгөө дээр нь шатахууны платформ — ШТС-ын терминалуудын ingest ачаалал нэвтрэлтийн үйлчилгээтэй нэг сан, нэг CPU хуваах ёсгүй.
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 образ | …/open-dgov-mn/backend:<commit> (GHCR) |
sso-dgov:latest (хост дээр баригдсан) |
| Бүрхүүл образ | …/frontend:<commit> |
…/frontend:<commit> |
| Роллаут | CI → Image → Deploy | CI → Deploy |
Портууд бүгд 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 |
fuelnet.dgov.mn |
Шатахууны платформын бүрхүүл + API + ШТС-ын ingest | Let's Encrypt |
docs.dgov.mn |
Энэ баримтын сайт (статик) | Let's Encrypt |
dgov.mn, www.dgov.mn |
Одоогоор эзэнгүй | — |
Гурван домэйн бүр нэг vhost-той, vhost бүр яг нэг server_name-тэй.
dgov.mn апексыг зориудаар эзлээгүй байгаа: тэр нь ирээдүйн порталын хаяг
бөгөөд баримтын сайт түүнийг түр эзэлбэл хожим нүүлгэх ажил, чиглүүлэлт,
эвдэрсэн холбоос болж хувирна.
Каталог ба апп суулгац
Цөм нь аппуудыг каталогоос уншиж, тенант бүрээр суулгацын мөр хайдаг. Каталогт байх нь суулгасан гэсэн үг биш: суулгацын мөр байхгүй бол модулийн API 403 хариулна, цэсэнд ч гарахгүй.
Платформ өөрийнхөө компилдсэн модулиудтай зөрчилдсөн каталог дээр асахаа болино — бүрэн бүтэн байдал нь анхааруулга биш, асалтын алдаа. Тиймээс цөмийн шинэ tag авах бүрд каталогийн хуулбар бичлэгүүдийг цөмийнхтэй тааруулах нь bump-ийн нэг хэсэг (sso.dgov.mn).
Апп суулгах нь SQL биш, API-аар:
POST /api/v1/store/apps/{slug}/install
Роллаут — хэн шинэчилдэг вэ
Хоёулаа өөрсдийгөө шинэчилнэ. main руу орсон commit бүр дээр CI ажиллаж,
ногоон болмогц роллаутын workflow SSH-ээр орж git pull хийгээд тухайн
репогийн deploy скриптийг ажиллуулна.
push → CI (тест, lint) → [Image: GHCR] → Deploy (ssh → deploy.sh) → эрүүл эсэх шалгалт
└─ улаан бол цааш юу ч болохгүй
Гурван зарчим:
- Роллаут тест гүйлгэдэггүй. Тэр нь CI-ийн ажил; роллаут зөвхөн ногоон болсны араас асна.
- Пин бүр репод. Образын таг, цөмийн commit, бүрхүүлийн commit — бүгд
git-ийн түүхтэй. Серверийн
.envдотор давхардуулах нь хоёр үнэн үүсгэдэг ба сервер дээрх нь хождог. - Гараар ажиллуулах зам үлдсэн. deploy скриптүүд байрандаа: CI боломжгүй үед, эсвэл нэг удаагийн шалгалтад.
Роллаутын түлхүүр, secret-үүдийг Ажиллагаа-аас.
Юу энд байхгүй вэ
Платформын өөрийнх нь чадварууд — танилт, эрх, апп стор, OIDC, төрийн дэд бүтэц — Платформын чадвар хуудсанд нэгтгэгдсэн. Түүний дотоод архитектур — модулийн загвар, tenancy-ийн хэрэгжилт, бүрхүүлийн гэрээ — энэ репогийн сэдэв биш бөгөөд цөмийн баримтад байдаг: