Агуулгыг алгасах

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 болж холбогдоно:

  1. PDF-ийг хэшилнэ → eID тэрхүү digest-ийг иргэний утас руу илгээнэ,
  2. иргэн PIN2-оор зөвшөөрнө,
  3. eID-ийн өөрийн doc-signer PKCS#7-г OCSP, CRL мэдээлэлтэй хамт шигтгэж PAdES гарын үсэгтэй PDF угсарна.

Гарын үсгийн хувийн түлхүүр платформд хэзээ ч хүрэхгүй. Гэрчилгээний түвшин нь анхдагчаар QUALIFIEDADVANCED хүлээж авбал платформын гаргасан баримт бүр чимээгүйхэн зэрэглэл буурах байсан.

Байгууллагын нэрийн өмнөөс гарын үсэг зурах

Төлөөлөх эрхийг гэрчилгээнээс биш, улсын бүртгэлээс шууд уншина. Учир нь өчигдөр огцорсон захирал өчигдрийн гэрчилгээгээ хэвээр эзэмшсэн байдаг.

Мөн: гарын үсгийн лог (шүүлт, хуудаслалт, 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 Хувилбар бүрийн өөрчлөлт