Ажиллагаа
Хоёр стек, нэг хост, нэг ssh. Энэ хуудас нь төлөвлөсөн ажлуудын тухай; хэвийн бус үед 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 |
ажлын машинаас rsync |
| nginx | /etc/nginx/sites-enabled/open.dgov.mn.conf |
…/sso.dgov.mn.conf |
…/docs.dgov.mn.conf |
.env файлууд chmod 600, git-д хэзээ ч ордоггүй. Репод байгаа нь тэдгээрийн
хэлбэр (\*.env.example).
Шинэчлэх
Хоёр стек тусдаа шинэчлэгдэнэ. Хамтад нь шинэчлэх шаардлага байхгүй: хоорондоо OIDC-ээр л ярьдаг ба тэр гэрээ хувилбар хооронд тогтвортой.
open.dgov.mn
cd /opt/open-dgov-mn && git pull
REGISTRY_USER=<github-хэрэглэгч> REGISTRY_TOKEN=<read:packages> ./deploy.sh
Цөмийг шинэчлэх нь хоёр мөр: deploy.sh-ийн CORE_REF (compose файл ямар
commit-оос ирэх) ба .env-ийн IMAGE_TAG (ямар образ). Хоёул түгжигдсэн байх нь
санаатай — «өчигдөр ажиллаж байсан» гэдэг нь тодорхой commit байх ёстой,
өнөөдрийн main биш.
sso.dgov.mn
cd /opt/sso-dgov-mn && git pull
cd deploy && REGISTRY_USER=<github-хэрэглэгч> REGISTRY_TOKEN=<read:packages> ./deploy.sh
Энд бинар нь хост дээр баригдана тул deploy удаан. Цөм нь go.mod-ын нэг
мөрөөр ирнэ; түүнийг өсгөх PR-ыг Dependabot нээдэг. CI ногоон бол merge, улаан
бол цөмийн release-д асуудал байна гэсэн дохио тул цөмийн багт issue.
GHCR токен
GHCR дээрх пакетууд хаалттай тул rollout бүр read:packages эрхтэй токеноор
нэвтэрч, дараа нь гардаг. Токеныг сервер дээр хадгалдаггүй — deploy бүрд
дамжуулна.
Deploy юу шалгадаг вэ
Хоёр скрипт ижил зарчимтай:
- Образуудыг эхлээд татна. Ажиллаж байгаа контейнеруудыг образ хост дээр буусны дараа л хөндөнө: pull унасны дараах татан буулгалт бол амжилтгүй deploy биш, тасалдал.
up -d --remove-orphans.- Backend
/healthэрүүл болтол 60 секунд хүлээнэ. - Бүрхүүл
/loginхариулж, дотор нь.env-ийнBRAND_NAMEбайгаа эсэхийг шалгана. Бүрхүүл backend эрүүл болсны дараа хэдэн секунд асдаг тул нэг удаагийн шалгалт эрүүл rollout-ыг унасан гэж дуудна — тиймээс давталттай.
Брэндийн шалгалт сайн дурын биш: тэр бол энэ байрлуулалтыг цөмийн анхдагчаас
ялгадаг цорын ганц зүйл. Брэнд буруу ирж байгаа нь .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
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{{.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
Эхний админ
Бүртгүүлэх дэлгэц байхгүй, 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 хоёрыг цөм өөрөө асахдаа суулгадаг.
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 + гадаад хадгалалт нэмэгдэнэ.
Баримтын сайт
cd docs-dgov-mn && npm --prefix site ci && ./deploy/deploy.sh
Дэлгэрэнгүйг Энэ сайт хэрхэн баригддаг-аас.