Gerege Nexus¶
Production · Давхарга 3 — Платформын суурь ·
Репо: open-gerege-nexus · nexus.gerege.mn
Үйлчилгээ, үйл ажиллагаа, системийн нэгдсэн платформ. Төрийн болон хувийн хэвшлийн байгууллагын үйлчилгээ, үйл ажиллагаа, систем, өгөгдлийг нэг суурь дээр нэгтгэдэг модульт платформ. Apache 2.0 лицензтэй, нээлттэй эх.
Nexus гэдэг нь холбох цэг — байгууллага, үйлчилгээ, ажлын урсгал, систем, хэрэглэгч, өгөгдөл нэг дор уулзах цэг. Платформ өөрөө нэг салбарт зориулагдаагүй: дээр нь ажиллах модулиуд л тухайн байгууллагын хэрэгцээг тодорхойлно.
Экосистемийн загвар өөрчлөгдөж байна
Gerege Nexus нь Template Platform-ийн залгамжлагч суурь. Өмнөх загвар нь «нэг template → бүтээгдэхүүн бүрт fork» байсан бол шинэ загвар нь «нэг upstream (Nexus) → брэнд бүрт fork, upstream-ээс merge-ээр шинэчлэгдэнэ». Шилжилт явагдаж байгаа — хуучин платформууд production-д ажилласаар байна. Дэлгэрэнгүйг Давхаргат бүтэц-ээс үзнэ үү.
Хамгийн том ялгаа: апп нь модуль¶
Уламжлалт загварт шинэ бүтээгдэхүүн гэдэг шинэ репо, шинэ deployment, шинэ өгөгдлийн сан байв. Nexus дээр шинэ бүтээгдэхүүн гэдэг нь ихэвчлэн шинэ модуль — нэг бинарь дотор компиллогдож, тенант бүрт асаах/унтраах боломжтой апп.
| Template загвар (өмнөх) | Nexus загвар (шинэ) | |
|---|---|---|
| Шинэ бүтээгдэхүүн | Template-ээс fork хийнэ | Модуль бичээд каталогт нэмнэ |
| Хуваарилалт | Репо тус бүрд deployment | Тенант бүрт апп стор-оор |
| Кодын хуваалцалт | open-gerege-core + @gerege/ui-core багц |
Нэг upstream, downstream fork merge хийнэ |
| Модуль хоорондын дуудлага | HTTP (репо тусдаа бол) | Процесс доторх Go дуудлага |
| Асаах/унтраах | Deploy шаардана | app_installations дээр админ шийднэ |
Модульт монолит¶
Бизнес модулиуд Go хэлний Module контрактыг хэрэгжүүлж, нэг бинарид
компиллогдоно. Тенант тус бүрт аль апп идэвхтэйг PostgreSQL-ийн
app_installations хүснэгт шийднэ.
- Сүлжээний нэмэлт дуудлагагүй — модуль хооронд процесс дотроо дууддаг тул микросервисийн хоцролт, зохицуулалтын нарийн төвөгтэй байдал үүсэхгүй.
- DAG хамаарал шийдвэрлэлт — модулийн хамаарлыг Directed Acyclic Graph дээр рекурсив тооцоолж, мөчлөг илрүүлж, semver-ээр шалгана.
- Каталогийн синк —
catalog/apps.jsonбол цорын ганц эх сурвалж;appsхүснэгт ачаалал бүрт түүнээс шинэчлэгдэнэ. Апп нэмэхэд SQL гараар бичихгүй. - Апп хаалт — суулгаагүй апп-ын маршрут руу хандвал
403 Forbidden.
Яагаад микросервис биш вэ?
Модулийн хил нь Go интерфейсээр хангагдана — сүлжээгээр биш. Ингэснээр хилийн баталгаа хадгалагдаж, харин сүлжээний хоцролт, тархсан гүйлгээ, олон deployment-ийн ажиллагааны өртөг гурвыг зэрэг зайлсхийнэ.
Бэлэн модулиуд¶
| Модуль | ID | Зам | Зориулалт |
|---|---|---|---|
| Contacts | io.example.contacts |
/contacts |
Харилцагчийн бүртгэл, ХУР авто-бөглөлт |
| Products | io.example.products |
/products |
Бараа, үнэ, тенантад хамаарах SKU |
| Inventory | io.example.inventory |
/inventory |
Агуулах, үлдэгдэл, хөдөлгөөний зөвхөн-нэмэх бүртгэл |
| Billing & e-Barimt | io.example.billing |
/billing |
Нэхэмжлэх, 10% НӨАТ, e-Barimt баримт |
| Digital Documents | io.example.documents |
/documents |
Цахим баримт, батламжийн урсгал |
| Developer Portal | io.example.developer_portal |
/developer/apps |
OAuth2 client апп бүртгэл |
| PDF цахим гарын үсэг | io.example.esign |
/esign |
eID Mongolia (PIN2) хуулийн хүчинтэй гарын үсэг |
| Төрийн үйлчилгээ | io.example.gov_services |
/gov |
Тохируулгатай үйлчилгээний урсгал, шатлал, SLA |
Төрийн үйлчилгээний тохируулгатай урсгал¶
gov_services модуль нь нэг кодын суурийг байгууллага бүр, тэр байгууллагын
үйлчилгээ бүр өөрөө тохируулдаг үйлчилгээ хүргэх чадвар болгодог. Код бичихгүйгээр
гурван горимын аль нэгийг сонгоно:
| Горим | Утга |
|---|---|
LOCAL |
Хүлээн авсан нэгж өөрөө гүйцэтгэнэ |
DELEGATE |
Доод нэгж рүү шилжүүлж, дээд нэгж нь хянаж, баталгаажуулна |
HYBRID |
Хүсэлт тус бүрт чиглүүлэх дүрэм аль болохыг шийднэ |
Гол зарчим — «код нь юу боломжтойг, тохиргоо нь юу санал болгохыг шийднэ». Төлөвийн шилжилтийн каноник хүснэгт кодод байрлана; нийтлэгдсэн хувилбар түүнийг нарийсгаж чадах ч хэзээ ч өргөсгөж чадахгүй. Ингэснээр буруу тохируулсан тенант боломжгүй төлөвт хүрч чадахгүй.
Бусад баталгаанууд:
- Төлөвийг сервер тооцоолно — client нь үйлдэл илгээнэ, төлөв илгээхгүй.
- Доод нэгж ажлаа дуусгах нь хүсэлтийг хаадаггүй — алхам баталгаажуулалт
шаарддаг бол
AWAITING_VERIFICATIONтөлөвт зогсоно. - Хугацаа хэтэрсэн эсэхийг үүсмэлээр тооцно (
due_at < now()), бизнес төлөв дээр дарж бичихгүй. - Тенант ба нэгжийн тусгаарлалт схемийн түвшинд — гадаад түлхүүр бүр
tenant_id-г агуулсан нийлмэл түлхүүр тул кодод алдаа гарсан ч мөр нь өөр тенант руу заах боломжгүй. - Idempotent хүлээн авалт — гадны системээс ирэх хүсэлт
(tenant_id, source_system, external_request_id)-ээр давхцахгүй; ижил давталт"created": falseбуцаана, өөр агуулгатай давталт409авна. - Гадагш мэдэгдэх нь outbox-оор — алсын endpoint урсгалыг буцаах, зогсоох боломжгүй.
Цахим гарын үсэг — eID Mongolia (PIN2)¶
esign модуль нь eID Mongolia-ийн qualified remote signature
руу relying party болж холбогдоно:
- PDF-ийг хэшилнэ → eID тэрхүү digest-ийг иргэний утас руу илгээнэ,
- иргэн PIN2-оор зөвшөөрнө,
- eID-ийн өөрийн doc-signer PKCS#7-г OCSP, CRL мэдээлэлтэй хамт шигтгэж PAdES гарын үсэгтэй PDF угсарна.
Гарын үсгийн хувийн түлхүүр платформд хэзээ ч хүрэхгүй. Гэрчилгээний түвшин нь
анхдагчаар QUALIFIED — ADVANCED хүлээж авбал платформын гаргасан баримт бүр
чимээгүйхэн зэрэглэл буурах байсан.
Байгууллагын нэрийн өмнөөс гарын үсэг зурах
Төлөөлөх эрхийг гэрчилгээнээс биш, улсын бүртгэлээс шууд уншина. Учир нь өчигдөр огцорсон захирал өчигдрийн гэрчилгээгээ хэвээр эзэмшсэн байдаг.
Мөн: гарын үсгийн лог (шүүлт, хуудаслалт, CSV гаргалт), багц гарын үсэг, тамганы байршуулалт (A4 урьдчилан харах), HSM холболт, гарын үсгийн бодлого. Тенант нь qualified eID гарын үсгийг албан журмаар шаардаж, HSM сувгийг бүрмөсөн хаах боломжтой — API руу шууд хандаж буй дуудагчид ч мөн адил үйлчилнэ.
Танилт ба төрийн интеграц¶
- Өөрийн OAuth2 / OIDC provider —
/.well-known/openid-configuration,/oauth2/token,/oauth2/introspect,/oauth2/revoke.authorization_code,client_credentials,refresh_tokenурсгалыг дэмжинэ. - eID ба ДАН — тоон гарын үсэг (PKI), Mobile OTP, банкны суваг, царай танилт гэсэн дөрвөн албан ёсны суваг.
- ХУР / XYP — иргэний бүртгэл (
WS100101), хуулийн этгээдийн баталгаажуулалт (WS100201). - Session токен нь opaque, 256 бит; өгөгдлийн санд зөвхөн SHA-256 хэш нь хадгалагдана. Logout нь токеныг бодитоор хүчингүй болгоно.
Mock горим production дээр ажиллахгүй
E-ID / ДАН / ХУР-ын mock горим зөвхөн хөгжүүлэлтийн орчинд ажиллана.
ENVIRONMENT=production үед автоматаар унтарч, хуурамч иргэний мэдээллээр
нэвтрэх боломжгүй болно.
AI ба тэсвэрлэлт¶
AI — тенантын өгөгдлийн сангийн бодит төлөвт холбогдсон Gemini туслах
(/api/v1/ai/chat, /stt, /tts, /translate), админаас удирддаг prompt ба
мэдлэгийн сан, агуулахын эрэлт таамаглагч.
Cloud-native тэсвэрлэлт (go-zero-оос санаа авсан):
| Бүрэлдэхүүн | Үүрэг |
|---|---|
| Adaptive circuit breaker | Google SRE загварын гулсах цонхон дээрх алдааны харьцаа |
| Adaptive load shedding | Ачаалал хэтэрвэл 503 + Retry-After |
| Singleflight coalescing | Давхардсан асуулгыг нэгтгэж кэш нурахаас сэргийлнэ |
| Exponential backoff retry | Түр зуурын алдаанд ухралттай давталт |
Хэлний бодлого¶
Монгол хэл + НҮБ-ын албан ёсны зургаан хэл = нийт долоон хэл. Монгол хэл нь эх сурвалж. Баримт бичиг долуулаа байдаг ч програм хангамж нь монгол, англи хоёроор ирж, үлдсэн таван хэлийг Тохиргоо → Харагдац дотроос асаана. Энэ нь энэ баримтын сайтын i18n бодлоготой нэг зарчимтай.
Эндээс салбарласан брэндүүд¶
Nexus нь upstream; брэнд бүр түүнээс fork хийж, upstream-ээс merge-ээр шинэчлэгдэнэ.
| Брэнд | Репо | Домэйн | Юу нь өөр вэ |
|---|---|---|---|
| Gerege Nexus | open-gerege-nexus |
nexus.gerege.mn |
Upstream, лавлагаа deployment |
| Gerege SSO | sso-gerege-nexus |
— | Нэвтрэлт, эрх, хандалтын давхаргад төвлөрсөн fork |
| Eduge.mn | eduge-mn-nexus |
eduge.mn |
Боловсролын салбарын брэнд; GHCR-гүй хостоос угсрах overlay-тай |
Хоёр «Gerege SSO»
sso-gerege-nexus нь Nexus дээр суурилсан шинэ fork; production дээрх
sso.gerege.mn нь одоогоор хуучин sso-gerege-mn кодоор ажилласаар
байна. Хоёрыг андуурч болохгүй — шилжилт дуустал Gerege SSO хуудсанд
бичигдсэн зан төлөв хүчинтэй.
Байршуулалт¶
main руу push хийхэд GitHub Actions ажиллана: backend ба
frontend образыг GHCR руу угсарч илгээх → docker-compose.prod.yml-ийг серверт
хуулах → образуудыг татах → миграц бүрэн дуусмагц API ба frontend солих →
/health, /ready шалгах. Deploy нь CI ногоон болсны дараа л эхэлнэ.
Серверт зөвхөн Docker шаардлагатай — эх код ч, Go ч, Node ч хэрэггүй.
PUBLIC_ORIGIN нь гурван зүйлийг нэг дор тодорхойлдог
CORS, OIDC issuer, eID callback гурав нэг хувьсагчаас гардаг. Түүнийг өөрчлөхөд DNS, TLS гэрчилгээ, issuer-т тулгуурласан client бүр хамт шилжинэ. Домэйн солих үеийн шалгах жагсаалтыг Танилт ба эрх хуудаснаас үзнэ үү.
Стек¶
| Давхарга | Сонголт |
|---|---|
| Backend | Go 1.25 · chi router · pgx (ORM-гүй, гар бичмэл SQL) |
| Frontend | Next.js 15 App Router |
| Өгөгдлийн сан | PostgreSQL 16 — дундын схем, tenant_id-аар тусгаарлана |
| Миграц | goose (backend/db/migrations/); ажиллах үед DDL хориотой |
| Ажиглалт | Prometheus (/metrics) · OpenTelemetry |
| Контейнер | Docker Compose · GHCR |
Дэлгэрэнгүйг Технологийн стек хуудаснаас үзнэ үү.
Дэлгэрэнгүй баримт¶
Хэрэгжүүлэлтийн түвшний баримт нь репо дотор долоон хэл дээр байрлана:
| Баримт | Агуулга |
|---|---|
README.md |
Платформын тойм (7 хэл) |
docs/ARCHITECTURE_SPECIFICATION.md |
Давхаргууд ба архитектурын шийдвэрүүд (MN/EN) |
docs/MODULE_AUTHORING_GUIDE.md |
Шинэ апп модуль бичих алхмууд |
docs/GOV_SERVICES_WORKFLOW.md |
Төрийн үйлчилгээний урсгалын бүрэн загвар |
docs/DOCUMENTS_SIGNING.md |
Цахим гарын үсгийн ёслол, гэрээ |
docs/TRANSLATION_GUIDE.md |
Долоон хэлний орчуулгын гарын авлага |
CHANGELOG.md |
Хувилбар бүрийн өөрчлөлт |