Ажиллагаа
Хоёр стек, нэг хост. Энэ хуудас нь төлөвлөсөн ажлуудын тухай; хэвийн бус үед Runbook-ууд руу.
ssh root@38.180.243.138
Хаана юу байгаа
open.dgov.mn |
sso.dgov.mn |
docs.dgov.mn |
|
|---|---|---|---|
| Хавтас | /opt/open-dgov-mn/ |
/opt/sso-dgov-mn/ |
/var/www/docs.dgov.mn/ |
.env |
./.env |
./deploy/.env |
— |
| deploy | ./deploy.sh |
./deploy/deploy.sh |
CI-аас rsync |
| nginx | /etc/nginx/sites-enabled/open.dgov.mn.conf |
…/sso.dgov.mn.conf |
…/docs.dgov.mn.conf |
.env файлууд chmod 600, git-д хэзээ ч ордоггүй. Репод байгаа нь тэдгээрийн
хэлбэр (*.env.example).
Роллаут
Гурвуулаа өөрсдийгөө шинэчилдэг. main руу push хийх нь роллаут: CI
ногоон болмогц GitHub Actions SSH-ээр орж deploy скриптийг ажиллуулна.
| Репо | Гинж | Юу болдог |
|---|---|---|
sso-dgov-mn |
CI → Deploy | git pull, бинарыг хост дээр барина, бүрхүүлийг татна, эрүүл эсэхийг шалгана |
open-dgov-mn |
CI → Image → Deploy | Образыг GHCR-т угсарч, дараа нь угсарсан яг тэр commit-ын тагаар роллаут |
docs-dgov-mn |
Deploy | Сайтыг барьж, холбоос шалгаж, rsync, дараа нь HTTPS-ээр шалгана |
Улаан CI бол роллаут байхгүй — эдгээр workflow тест гүйлгэдэггүй, зөвхөн ногооны араас асдаг.
Гараар ажиллуулах
Хоёр зам: GitHub Actions дээр Run workflow (workflow_dispatch), эсвэл
сервер дээр скриптийг өөрийг нь.
cd /opt/sso-dgov-mn/deploy && REGISTRY_USER=<хэрэглэгч> REGISTRY_TOKEN=<read:packages> ./deploy.sh
cd /opt/open-dgov-mn && REGISTRY_USER=<хэрэглэгч> REGISTRY_TOKEN=<read:packages> ./deploy.sh
Роллаутын secret-үүд
Гурван репо тус бүрдээ:
| Secret | Юу вэ |
|---|---|
DEPLOY_SSH_KEY |
Серверийн authorized_keys дотор байгаа хувийн түлхүүр. Байхгүй бол роллаут алгасагдана, унахгүй |
DEPLOY_HOST / DEPLOY_USER |
Анхдагч 38.180.243.138 / root |
GHCR_READ_TOKEN |
Хаалттай образуудыг татах токен (read:packages) |
Хувилбар хаана түгждэг вэ
| Юу | Хаана | Яагаад тэнд |
|---|---|---|
| Цөмийн бинар | go.mod (хоёр репод) |
Dependabot PR нээж чадах цорын ганц хэлбэр |
| Бүрхүүлийн образ | sso-dgov-mn: compose · open-dgov-mn: deploy.sh |
Репо нь эх сурвалж; серверийн .env дэх хуулбар түүнийг дардаг |
| Цөмийн compose/nginx | open-dgov-mn/deploy.sh-ийн CORE_REF |
Хуулбар бол цөмөөс чимээгүй хоцрох арга |
| Backend образ | open-dgov-mn: CI-ийн commit таг |
«Өчигдөр ажиллаж байсан» гэдэг нь тодорхой образ байх ёстой |
latestгэсэн таг production дээр хаана ч байхгүй. 2026-08-17-ндFRONTEND_TAG=latestбайсан нь «аль нь ч байж болно» гэсэн утгатай байв.
Deploy юу шалгадаг вэ
Скриптүүд ижил зарчимтай:
- Образуудыг эхлээд татна. Ажиллаж байгаа контейнеруудыг образ хост дээр буусны дараа л хөндөнө: pull унасны дараах татан буулгалт бол амжилтгүй deploy биш, тасалдал.
up -d --remove-orphans.- Backend
/healthэрүүл болтол хүлээнэ. - Бүрхүүл
/loginхариулж, дотор ньBRAND_NAMEбайгаа эсэхийг шалгана. sso.dgov.mnдээр нэмээд: discovery-гийнissuerньPUBLIC_ORIGIN-тэй таарч байгаа эсэх. Буруу issuer бол клиент бүр токеныг татгалзана, харин стек нь бүрэн эрүүл харагдана.
Брэндийн шалгалт сайн дурын биш: тэр бол энэ байрлуулалтыг цөмийн анхдагчаас
ялгадаг цорын ганц зүйл. Брэнд буруу ирж байгаа нь .env уншигдаагүйн шинж.
Гараар эрүүл эсэхийг шалгах
curl -fsS http://127.0.0.1:8082/health # open.dgov.mn backend
curl -fsS http://127.0.0.1:8096/health # sso.dgov.mn backend → platform_version
curl -fsS http://127.0.0.1:3008/login | grep -o 'Засгийн газрын[^<]*'
curl -fsS http://127.0.0.1:3016/login | grep -o 'Засгийн газрын[^<]*'
docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}'
Гаднаас:
curl -sI https://open.dgov.mn/ | head -1
curl -s https://sso.dgov.mn/.well-known/openid-configuration | jq .issuer
curl -sI https://docs.dgov.mn/ | head -1
curl -s -H 'Cookie: locale=en' https://sso.dgov.mn/login | grep -o '<title>[^<]*</title>'
Сүүлийнх нь хэлний тохиргоог шалгана: cookie нь en үед гарчиг англиар ирэх
ёстой (Платформын чадвар).
Шинэ клиент бүртгэх
Нэвтрэлтэд холбогдох шинэ систем бүр хоёр зүйл шаардана:
- Консол дээр бүртгэл —
sso.dgov.mn/sso-clients; - Түүний хостыг
OAUTH_REDIRECT_HOSTSдотор нэрлэх — тэр жагсаалтsso-dgov-mn-ийн compose дотор, дэд домэйн өвлүүлдэггүй.
Хоёрдахийг мартвал консол redirect URI host is not allowed гэж татгалзана.
Алхам алхмаар: SSO-д холбогдох.
Эхний админ
Бүртгүүлэх дэлгэц байхгүй, control plane нь өөрийн vhost, TOTP шаарддаг тул эхний хүн SQL-ээр ордог. Скрипт өөрөө нэвтэрч үзэж баталгаажуулна.
cd /opt/open-dgov-mn && ./first-admin.sh <и-мэйл> <нууц үг>
cd /opt/sso-dgov-mn/deploy && ./first-admin.sh <и-мэйл> <нууц үг>
Апп суулгах
Каталогт байх нь суулгасан гэсэн үг биш: цөм тенант бүрээр суулгацын мөр хайдаг ба байхгүй бол модулийн API 403 хариулна. Шинэ тенант үүсгэсний дараа аппууд API-аар суудаг, SQL-ээр биш:
for s in sso-clients sso-federation sso-sessions sso-access-review sso-provisioning; do
curl -sb <cookie> -X POST -H 'Origin: https://sso.dgov.mn' \
"https://sso.dgov.mn/api/v1/store/apps/$s/install"
done
organisation ба egov хоёрыг цөм өөрөө асахдаа суулгадаг.
Брэнд ба үгс
Нэр, лого, өнгө, landing page-ийн өгүүлбэрүүд бүгд тохиргоо — образ биш.
| Юу | Хаана |
|---|---|
| Нэр, өнгө, лого, icon | .env-ийн BRAND_* |
| Landing-ийн хэсгүүд | .env-ийн LANDING_SECTIONS |
| Өгүүлбэрүүд ба хэл тус бүрийн нэр | brand/copy.json (BRAND_COPY_FILE) |
| Цэсний «Баримт бичиг» | BRAND_DOCS_URL=https://docs.dgov.mn/ |
copy.json дотор brand.name, brand.short_name, brand.description гурав нь
локалиар бичигдэнэ; бичээгүй хэл нь BRAND_NAME-ийн утгыг уншина.
TLS
open.dgov.mn, sso.dgov.mn, docs.dgov.mn гурвуулаа Let's Encrypt дээр,
certbot-ийн systemd таймераар сунгагдана.
certbot certificates
certbot renew --dry-run
vhost файлуудыг certbot-оос өмнө суулгана; listen 443 ssl мөрүүд ба
80 → https чиглүүлэгчийг certbot өөрөө нэмнэ.
Нөөцлөлт
Хоёр Postgres тусдаа тул хоёр нөөцлөлт:
docker exec dgov_nexus_postgres pg_dump -U postgres platform_db > open-$(date +%F).sql
docker exec dgov_sso_postgres pg_dump -U postgres platform_db > sso-$(date +%F).sql
POSTGRES_VOLUME бол дискэн дээрх заагч. Хоосон санг цөм эрүүл мэт асаадаг тул
тэр мөрийг өөрчлөх нь өгөгдөл нүүлгэх ажил, засвар биш.
ponytail:энэ нөөцлөлт гараар. Хуваарьт нөөцлөлт, хаалтын гадна хуулбар хоёулаа байхгүй — эхний бодит өгөгдөл орох өдөр cron + гадаад хадгалалт нэмэгдэнэ.
Баримтын сайт
main руу push хийх нь нийтлэлт. Гараар хийх бол:
cd docs-dgov-mn && npm --prefix site ci && ./deploy/deploy.sh
Дэлгэрэнгүйг Энэ сайт хэрхэн баригддаг-аас.