fuelnet.dgov.mn — Nexus FuelNet
Репо:
gerege-systems/fuelnet-dgov-mn· Байрлуулалт:/opt/fuelnet-nexus/· Брэнд: Nexus FuelNet
Шатахууны урсгалын платформ: импортоос хошуу хүртэлх литр бүрийн мөрдлөг, ШТС-ын касс, нөөцлөгдсөн литрээр баталгаажсан ваучер. Gerege Nexus цөмийн Түвшин 2 байрлуулалт: өөрийн Go модуль, өөрийн миграц, өөрийн каталогтой.
Загварчлалын бүтэн баримт нь тэр репод:
FUELNET_PLAN.md
— зорилго, KPI, гинжин хэлхээ, ваучерийн механизм, үе шатууд. Энэ хуудас нь
одоо ажиллаж байгаа зүйлийн тухай.
Юу нь юу вэ
Худалдааны дөрвөн модуль — харилцагч, бүтээгдэхүүн, агуулах, нэхэмжлэх —
Gerege Business-аас
go.mod-ын нэг мөрөөр ирдэг, энд хуулагдаагүй. Шатахууны станц бол савнаас
бараа зарж, нэхэмжлэх бичдэг газар: Business-ийн хариулдаг яг тэр дөрвөн асуулт.
Энэ репод бичигдсэн нь Business хариулж чадахгүй гурав:
| Модуль | Юуг хариулдаг |
|---|---|
forecourt |
ШТС, сав, хошуу, ээлж, гинжлэгдсэн түгээлт. Сав бол тоолдог биш, хэмждэг зүйл: түвшин, температур, 15°C-ийн залруулга. Монголын +35…−40°C-ийн далайцад ажиглалтын литрээр тооцвол улирал өөрөө бодит хулгайг дотроо нуух хэмжээний «алдагдал» үүсгэнэ |
voucher |
Эрх, хуваарилалт, офлайн шалгагдах пасс. Ваучер = нөөцлөгдсөн литр: савд бодитоор орж, баталгаажсан түлшнээс л үүснэ, тиймээс амлалт нөөцөөсөө давахгүй |
insight |
Нөхцөлдүүлэлт (ΔB–ΔE), нөөц ба дуусах прогноз |
Хошууны тоолуур хэзээ ч буцаж болохгүй тул гүйлгээ бүр hash-chain-д холбогдоно: дараа нь засагдсан мөр өөрөөсөө хойшхи бүх hash-ийг эвдэж, устгагдсан мөр ШТС өөрөө өгсөн дугаарт завсар үлдээнэ.
Стек
Өөрийн хост дээр ганцаараа ажиллана — open.dgov.mn, sso.dgov.mn хоёроос өөр машин (Архитектур).
| Контейнер | Образ | Порт (зөвхөн loopback) |
|---|---|---|
gerege_fuelnet_nexus_postgres |
postgres:16-alpine |
5438 |
gerege_fuelnet_nexus_backend |
fuelnet-nexus:latest (хост дээр баригдсан) |
8092 |
gerege_fuelnet_nexus_web |
fuelnet-nexus-web:latest (хост дээр баригдсан) |
3017 |
Хоёр образ хоёулаа хост дээрээ баригдана: өөр архитектур дээр барьсан образ
exec format error өгдөг, шинэ push хийсэн хаалттай образыг registry
татуулахаас татгалздаг — ажилладаг газраа барих нь хоёуланг арилгана. Бүрхүүл нь
цөмийн репогийн frontend/-оос баригддаг ба цөм хөдөлсөн бүрд дахин
баригдана.
Backend-ийн өмнө гурван миграцын түүх нэг санд ажиллана: цөмийнх
(/app/db/migrations), Business-ийн таван хүснэгтийнх (goose_db_version_fuelnet)
ба энэ репогийн 12 хүснэгтийнх (goose_db_version_fuelnet_modules). Goose нэг
хүснэгтэд нэг мөр бичдэг тул MIGRATIONS_TABLE сайн дурын биш: гурван түүхийн
00001 бүгд нэг мөр болох байсан.
Тохиргоо
Жинхэнэ файл нь /opt/fuelnet-nexus/.env (chmod 600). Хамгийн чухал мөрүүд:
| Хувьсагч | Утга | Тайлбар |
|---|---|---|
PUBLIC_ORIGIN |
https://fuelnet.dgov.mn |
Callback, issuer, CORS бүгд эндээс гарна |
FUELNET_VOUCHER_KEY |
base64, 32 байт | Ed25519 үр. Ваучерийн пасс офлайн шалгагддаг тул түлхүүр процессоос урт наслах ёстой — дахин асахдаа шинийг үүсгэвэл хүмүүсийн утсан дахь бүх ваучер хүчингүй болно. Production-д энэ мөргүй бол модуль асахаас татгалзана |
SSO_DEFAULT_CLIENT_SECRET |
санамсаргүй | Энэ суулгац өөрөө ч провайдер: дээр нь суусан аппуудад identity тарааж өгдөг |
SSO_CLIENT_ISSUER |
https://sso.dgov.mn |
Хүнийг хэн таних вэ |
SSO_CLIENT_ID |
app_fuelnetdgovmn_315eb02e |
Провайдерийн олгосон id — гараар сонгодоггүй |
SSO_CLIENT_TENANT |
dgov |
Провайдер баталгаажуулсан ч энд бүртгэлгүй хүнийг ямар байгууллагад үүсгэх |
SSO_CLIENT_LOCAL_LOGIN |
false |
Эндэх нууц үг, eID-ийн нэвтрэлт хаалттай |
Нэвтрэлт
2026-08-17-наас энэ суулгац хүнийг өөрөө таихаа больж, sso.dgov.mn-д таниулна. Провайдер дээрх бүртгэл:
client_id |
app_fuelnetdgovmn_315eb02e |
redirect_uris |
https://fuelnet.dgov.mn/api/v1/auth/sso/callback |
post_logout_redirect_uris |
https://fuelnet.dgov.mn/ |
grant_types |
authorization_code |
scopes |
openid profile email |
fuelnet.dgov.mn нь провайдерийн OAUTH_REDIRECT_HOSTS дотор яг таг байх
ёстой — тэр жагсаалт дэд домэйныг өвлүүлдэггүй тул dgov.mn бичээстэй байх нь
энэ хостыг зөвшөөрсөн хэрэг биш (SSO-д холбогдох).
Хоёр талын нийлбэр — провайдер л танина, платформ нь хаалттай
(access_mode=private) — гэдэг нь шинэ суулгац дээр хэн ч орж чадахгүй гэсэн үг:
провайдер хүнийг баталгаажуулна, харин энд бүртгэлгүй хүнийг үүсгэхийг access
mode татгалзана. Эхний тенант, эхний админыг санд тавьсны дараа id_token дахь
и-мэйлээр (провайдер email_verified үргэлж true өгдөг) байгаа бүртгэлдээ
холбогдоно. SQL нь
репогийн README-д;
хоёр дахь хүнээс эхлээд урилгын урсгал ажиллана.
Шинэчлэх
Гаргалт нь GitHub Actions, зөвхөн гараар (workflow_dispatch) —
deploy.yml.
Хост дээр очиж репогоо шинэчилж, образуудаа барьж, docker compose up -d
хийгээд backend эрүүл болтол хүлээнэ. Гурван миграц backend-ээс өмнө гүйцэд
ажилладаг тул эрүүл backend гэдэг нь гурван түүх хамт хөдөлсөн гэсэн үг.
Цөмийг шинэчлэх нь go.mod-ын нэг мөр (Dependabot PR). Гэхдээ CI-д
catalog_test нь энэ build-ийн цөм ба Business өөрийн каталогоо бичихдээ
түшсэн цөм хоёрыг тэнцүү байхыг шаардана: улаан болвол хариулт нь эхлээд
Business-ийг ахиулах. Каталог зөрчилтэй бол платформ асахаа болино, тиймээс энэ
бол хост дээр биш CI дээр олдох ёстой алдаа.
Юу хараахан байхгүй вэ
Төлөвлөгөөний Фаз 1–2-ын сервер тал ажиллаж байна. Дараах нь зориудаар дутуу:
| Дутуу | Тэмдэглэл |
|---|---|
| Гурван модулийн дэлгэц | Menus() хоосон: бүрхүүлд дэлгэц нь хараахан бичигдээгүй тул цэсний бичилт операторыг 404 руу нэг товшилтын зайд аваачих байсан. API нь ажиллаж байна |
| Хошуу/ATG-ийн драйверууд | Эхлээд Фаз 0-ийн техникийн тооллого — аль протокол хэрэгтэйг тэр л хэлнэ |
| Ирмэгийн агент, офлайн дараалал | Энэ репогийн API нь түүний сервер тал |
| ХУР/e-Mongolia, Гааль, e-Barimt | Тиймээс ΔA баланс байхгүй — нэг талаас нь тооцвол нотолгоо мэт харагдах буруу тоо гарна |