open.dgov.mn — Цахим Засаг
Репо:
gerege-systems/open-dgov-mn· Байрлуулалт:/opt/open-dgov-mn/· Брэнд: Засгийн газрын нээлттэй суурь платформ / The Government's Open Platform
Иргэн, албан хаагчийн харах орчин: төрийн байгууллага өөрийн үйлчилгээгээ дээр нь босгодог суурь. Gerege Nexus цөмийн Түвшин 2 distribution — цөм нь хамаарал, дээр нь энэ байрлуулалтын өөрийн Go модулиуд.
Энэ репо 2026-08-17 хүртэл Түвшин 1 — тохиргоо л — байсан. «Өөрийн модуль хэрэгтэй болох өдөр Түвшин 2 болно» гэж бичсэн, тэр өдөр нь ирсэн. Өөрчлөгдөөгүй зүйл: цөмийн код энд нэг ч мөр байхгүй,
go.mod-ын нэг мөр л байна.
Юу нь юу вэ
main.go цөмийг асаахдаа өөрийн модулиудаа бүртгэнэ
modules/zarlal байгууллагын доторх зарлал — эхний өөрийн модуль
migrations/ тэдний хүснэгтүүд, өөрийн goose түүхэнд
catalog/ тэдний апп сторын бичилт, манифест
deploy/Dockerfile өөрийн backend образ (цөм + эдгээр модулиуд)
deploy/compose.dgov.yml цөмийн compose дээрх давхарга
.env.example бүх тохиргоо, тайлбартайгаа
brand/ лого, өнгө, landing page-ийн үгс
nginx/open.dgov.mn.conf vhost: бүрхүүл, API, OIDC, брэндийн зураг
deploy.sh образуудыг татаж стекийг солино
first-admin.sh эхний байгууллага, эхний админ
Compose файлыг энд хуулж тавихгүй байгаа нь санаатай: хуулбар бол цөмөөс
чимээгүй хоцрох арга. deploy.sh нь цөмийн docker-compose.prod.yml-ийг
CORE_REF дээр түгжигдсэн commit-оос татаж, дээр нь deploy/compose.dgov.yml
давхаргыг тавина.
Ямар аппууд ажиллаж байна
Төрийн үйлчилгээний дэлгэцүүд цөмийнх — энд хуулагдаагүй, зөвхөн каталогт бүртгэгдсэн:
| Апп | ID | Зам | Юу хийдэг |
|---|---|---|---|
| Байгууллага | io.gerege.nexus.organisation |
/organisation |
Хуулийн профайл, хэлтэс нэгж, ажилтнууд |
| Цахим Засгийн холбоос | io.gerege.nexus.egov |
/egov |
ХУР-ын иргэн/хуулийн этгээдийн лавлагаа, eID ба ДАН сувгийн төлөв, лавлагааны түүх |
| Баримт бичиг | io.gerege.nexus.documents |
/documents |
Цахим баримт, батламжийн урсгал, PAdES гарын үсэг |
| Тайлан | io.gerege.nexus.reports |
/reports |
Тайлан, экспорт, хуваалцах холбоос |
| Өртөө | io.gerege.nexus.urtuu |
/urtuu |
Суулгац хоорондын гарын үсэгтэй мессежийн ринг |
| SSO клиентүүд | io.gerege.nexus.sso_clients |
/sso-clients |
OAuth2 клиентийн бүртгэл |
| Зарлал | mn.dgov.zarlal |
/module/zarlal |
Энэ репогийн өөрийн модуль |
Каталогт байх нь суулгасан гэсэн үг биш: тенант бүрээр суулгацын мөр байхгүй бол API 403 хариулна, цэсэнд ч гарахгүй (Платформын чадвар).
Зарлал — эхний өөрийн модуль
Байгууллагын доторх зарлал: гарчиг, их бие, наасан эсэх, дуусах хугацаа.
GET /api/v1/dgov/zarlal жагсаалт zarlal.read
POST /api/v1/dgov/zarlal нийтлэх zarlal.manage
DELETE /api/v1/dgov/zarlal/{id} буцаан татах zarlal.manage
Эрхийн загвар нь энгийн: RoutePermissionPrefix() буцаасны дараа платформ
GET-ийг zarlal.read-ээр, өөрчлөлт хийх бүх хүсэлтийг zarlal.manage-ээр
хаана. Суулгах үед .read-ийг гишүүн бүр, .manage-ийг админ авна — зарлалыг
бүгд уншиж, цөөхөн хүн нийтэлдэг гэсэн үг.
Дэлгэц нь өнөөдөр орлуулагч. Бүрхүүл бол нэг образ, бүх суулгацад үйлчилдэг тул distribution өөрийн дэлгэцээ аваачих механизм байхгүй. Модулийн API ажиллана, цэсэнд гарна, харин хуудас нь «Тун удахгүй». Жинхэнэ дэлгэц хэрэгтэй бол тэр нь цөмийн бүрхүүлд нэмэгдэнэ.
Шинэ модуль нэмэх
modules/<нэр>/<нэр>.go—nexus.Module-ийн долоон метод,New(p)доторnexus.Register(m);migrations/0000N_<нэр>.sql— хүснэгтүүд, доор ньtenant_isolationбодлого. Цөмийн00029нь тухайн үед байсан хүснэгтүүд дээр л ажилласан тул шинэ хүснэгт бүр өөрийн бодлогыг өөртөө авч явна;catalog/apps.json+catalog/manifests/<slug>.json— эдгээргүй бол модуль бинарт байгаа боловч хэн ч суулгаж чадахгүй;main.go-д нэг мөр:<нэр>.New(p).
go test ./... нь каталог, бинар хоёр зөрсөн эсэхийг хэлнэ — тэр зөрөө нь
production дээр чимээгүй унадаг цорын ганц зүйл.
Стек
Хостын хажууд sso.dgov.mn ажилладаг тул контейнер бүр нэрээ хэлдэг
(STACK=dgov_nexus) ба портууд давхцахгүй:
| Контейнер | Образ | Порт (зөвхөн loopback) |
|---|---|---|
dgov_nexus_postgres |
postgres:16-alpine |
5434 |
dgov_nexus_redis |
redis:7-alpine |
6381 |
dgov_nexus_backend |
ghcr.io/gerege-systems/open-dgov-mn/backend:<commit> |
8082 |
dgov_nexus_frontend |
ghcr.io/gerege-systems/open-gerege-nexus/frontend:<commit> |
3008 |
Backend образ нь энэ репогийнх (цөм + өөрийн модулиуд), CI угсарч GHCR рүү
түлхдэг; бүрхүүл нь цөмийнх. Хоёр образ өөр өөр амьдралтай тул нэг тагаар
барихаа больсон: IMAGE_TAG нь энэ репогийн commit, FRONTEND_TAG нь
deploy.sh дотор түгжигдсэн цөмийн commit.
POSTGRES_VOLUME=dgov_nexus_platform_postgres_data бол дискэн дээрх заагч.
Хоосон санг цөм эрүүл мэт асаадаг тул энэ мөрийг өөрчлөх нь өгөгдөл нүүлгэх
ажил, засвар биш.
Нэвтрэлт
Энэ суулгац хүнийг өөрөө таних биш, sso.dgov.mn дээр таниулна.
2026-08-17-ноос SSO_CLIENT_LOCAL_LOGIN=false — энэ домэйн руу орох цорын
ганц зам sso.dgov.mn. Тэр нь ажиллахаа болих өдөр энд нэг ч хүн шинээр
нэвтрэхгүй; буцах зам Runbook-ууд-д.
Провайдер дээрх бүртгэл:
client_id |
app_opendgovmn_28426259 |
redirect_uris |
https://open.dgov.mn/api/v1/auth/sso/callback |
post_logout_redirect_uris |
https://open.dgov.mn/ |
grant_types |
authorization_code |
scopes |
openid profile email |
open.dgov.mn нь провайдерийн OAUTH_REDIRECT_HOSTS дотор яг таг байх
ёстой — тэр жагсаалт дэд домэйныг өвлүүлдэггүй. Дэлгэрэнгүйг
SSO-д холбогдох-оос.
Тохиргоо
Жинхэнэ файл нь серверийн /opt/open-dgov-mn/.env (chmod 600), загвар нь
репогийн .env.example.
| Хувьсагч | Утга | Тайлбар |
|---|---|---|
IMAGE_BACKEND |
ghcr.io/gerege-systems/open-dgov-mn/backend |
Энэ репогийн образ. Цөмийнхийг зааж байвал эндэх модулиуд ачаалагдахгүй |
IMAGE_TAG |
commit | CI роллаут хийхдээ угсарсан commit-оо дамжуулна |
PUBLIC_ORIGIN |
https://open.dgov.mn |
Гадна ертөнцөд харагдах хаяг |
DEVICE_LINE_ORIGINS |
https://open.dgov.mn |
Хоосон орхивол цөм nexus.gerege.mn-ий шугамуудыг анхдагчаар тавина |
BRAND_NAME |
Засгийн газрын нээлттэй суурь платформ | Хүсэлт бүр дээр уншигдана, образ биш |
BRAND_COPY_FILE |
/brand/copy.json |
Landing page-ийн үгс ба нэр нь хэл тус бүрээр |
EID_RP_NAME |
Цахим Засаг | Хоосон орхивол иргэн утсан дээрээ «Gerege Nexus» гэж уншина |
SSO_CLIENT_ISSUER |
https://sso.dgov.mn |
Хэн таних вэ |
SSO_CLIENT_ID |
app_opendgovmn_28426259 |
Провайдерийн олгосон id — гараар сонгодоггүй |
SSO_CLIENT_LOCAL_LOGIN |
false |
Эндэх нууц үг, eID-ийн нэвтрэлт хаалттай |
SSO_CLIENT_TENANT |
dgov |
Провайдерийн баталгаажуулсан ч энд бүртгэлгүй хүнийг ямар байгууллагад үүсгэх |
CORE_REF ба FRONTEND_TAG хоёр нь .env дотор биш, deploy.sh дотор
түгжигдсэн: серверийн хуулбар репогийн пиныг дардаг тул тэднийг нэг газар,
git-ийн түүхтэй хамт байлгана.
nginx
nginx/open.dgov.mn.conf нь бүрхүүл (3008) ба API (8082)-г барина. Гурван зүйл
анхаарууштай:
server_nameнь яг нэг хост.default_serverч, wildcard ч биш байх нь заавал: хөршийнхөө урсгалыг залгичихна.- Аюулгүй байдлын толгойнууд
location /дотор, server түвшинд биш. - Certbot-оос ӨМНӨ суулгана. Certbot өөрөө
listen 443 sslмөрүүд ба 80 → https чиглүүлэгчийг нэмнэ.
Мөн /api/ дээр limit_req бүсүүд ажиллана: нэвтрэлтэд 5r/m, OAuth-ийн
солилцоонд 30r/m.
Шинэчлэх
Гараар хийх зүйл алга. main руу орсон commit бүр дээр CI → Image (GHCR) →
Deploy гэсэн гинж ажиллана; сүүлийнх нь SSH-ээр орж git pull && ./deploy.sh
хийхдээ угсарсан яг тэр commit-ын тагийг дамжуулна. Улаан CI бол образ ч
байхгүй, роллаут ч байхгүй. Дэлгэрэнгүйг Ажиллагаа.
Цөмийг шинэчлэх нь энэ репод гурван мөр: go.mod-ын хувилбар (бинар),
deploy.sh-ийн CORE_REF (compose ба nginx snippet), FRONTEND_TAG
(бүрхүүл). Гурвуулаа нэг commit дээр байх нь зөв — нэг настай стек.
Эхний админ ба апп суулгах
cd /opt/open-dgov-mn && ./first-admin.sh <и-мэйл> <нууц үг>
Бүртгүүлэх дэлгэц байхгүй, control plane нь өөрийн vhost, TOTP шаарддаг тул эхний хүн SQL-ээр ордог. Скрипт өөрөө нэвтэрч үзэж баталгаажуулна.
Аппуудыг API-аар суулгана, SQL-ээр биш — суулгацын мөр каталог дүүргэдэг
apps хүснэгт рүү заадаг тул гараар оруулсан мөр дутуу байна:
POST /api/v1/store/apps/{slug}/install