ЦЗ Цахим Засаг
GitHub Нэвтрэх

Ажиллагаа

Хоёр стек, нэг хост. Энэ хуудас нь төлөвлөсөн ажлуудын тухай; хэвийн бус үед 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 юу шалгадаг вэ

Скриптүүд ижил зарчимтай:

  1. Образуудыг эхлээд татна. Ажиллаж байгаа контейнеруудыг образ хост дээр буусны дараа л хөндөнө: pull унасны дараах татан буулгалт бол амжилтгүй deploy биш, тасалдал.
  2. up -d --remove-orphans.
  3. Backend /health эрүүл болтол хүлээнэ.
  4. Бүрхүүл /login хариулж, дотор нь BRAND_NAME байгаа эсэхийг шалгана.
  5. 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 үед гарчиг англиар ирэх ёстой (Платформын чадвар).

Шинэ клиент бүртгэх

Нэвтрэлтэд холбогдох шинэ систем бүр хоёр зүйл шаардана:

  1. Консол дээр бүртгэл — sso.dgov.mn/sso-clients;
  2. Түүний хостыг 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

Дэлгэрэнгүйг Энэ сайт хэрхэн баригддаг-аас.