Нэрс
| Нэр | Юу | Ард нь | Төлөв |
|---|---|---|---|
petronet.mn | Платформ — frontend ба /api/v1/* | Next.js + Go | ажиллаж байна |
admin.petronet.mn | Операторын консол — /api/platform/v1/* | Мөн тэр хоёр | ажиллаж байна |
monitor.petronet.mn | Grafana | Prometheus + хоёр exporter | ажиллаж байна |
dwh.petronet.mn | Дата агуулахын зураглал | Статик, өөрийн контейнер | ажиллаж байна |
docs.petronet.mn | Энэ хуудас | Статик, өөрийн контейнер | ажиллаж байна |
backups.petronet.mn | Нөөцлөлтийн тайлбар | Статик; сан нь өөр хостод | ажиллаж байна |
Хоёр урсгал өөр origin дээр байгаа нь гоо зүйн биш: cookie нь hostname-аар хязгаарлагддаг тул тусдаа нэр нь тусдаа эрх гэсэн үг.
Хаалганууд
Хувийн муж — үргэлж нээлттэй
PLATFORM_ACCESS_MODE=public. eID-ээр танигдсан иргэн бүртгэлтэй болж, өөрийн гэртээ буудаг. Миграц 00085-аас хойш шинэ данс хэний ч байгууллагад ордоггүй тул «гэр нээлттэй» гэдэг яг энэ тохиргоотой тэнцэнэ.
Байгууллага — өөрөө сонгоно
Байгууллагын тохиргоо → «Хаалга». on_request (анхдагч): хүсэлт илгээнэ, админ шийднэ. open: богино нэрийг мэдсэн хэн ч шууд гишүүн болно.
Шууд нэгдсэн хүн платформын анхдагч user ролийг авдаг — тэр нь *.read зөвшөөрлүүдийг агуулна. Хаалга нээх ба мэдээллээ харуулах хоёр нэг зүйл гэдгийг санах хэрэгтэй. Хэн, хэзээ орсныг join_requests дээрх ACCEPTED мөр үлдээнэ; decided_by нь NULL — хүн биш, бодлого шийдсэн.
Консол
Гурван хаалга дараалж: хаягийн шалгалт (CONTROL_PLANE_HOST-оос өөр нэрээр ирсэн хүсэлт 404), нууц үг, authenticator-ийн код. Операторын бүртгэл нь хэрэглэгчийн бүртгэлээс тусдаа хүснэгт, тусдаа cookie, тусдаа audit.
Хаягийн жагсаалт (IP allowlist) одоогоор тавиагүй — операторуудын хаяг тодрох өдөр nginx/admin.petronet.mn.conf доторх хоёр мөрийг сэргээнэ.
Нөөцлөлт
Өдөр бүр 03:15-д deploy/scripts/backup.sh. pg_dump авч, 14 хоногоос хуучныг цэвэрлэж, үр дүнг platform_backups-д бичнэ — консолын «Нөөцлөлт» карт тэр мөрийг уншина. Бүтэлгүйтэл ч бүртгэгдэнэ: хэмжигдээгүй нөөцлөлт нь нөөцлөлтгүйтэй бараг адил.
Хуулбар нь /var/backups/petronet/ дотор, энэ хостын дискэн дээр. Өөр байршил руу шифрлэн илгээх алхам хараахан тохируулагдаагүй — BACKUP_AGE_RECIPIENT (age-ийн нийтийн түлхүүр) ба BACKUP_S3_* дөрөв тавигдмагц ажиллана. Тавиагүй байхад тэр нь petronet_backup_offsite_ok 0 гэж хэмжигдэнэ.
Сэргээх нь хаягдах сан руу, ажиллаж байгаа руу биш:
gunzip -c /var/backups/petronet/petronet-<огноо>.sql.gz \ | docker exec -i gerege_petronet_postgres psql -U postgres -d restore_check
Ажиглалт
Prometheus гурван зорилт цуглуулна: энэ бүтээгдэхүүний API, хостын node_exporter, ба энэ суулгацын сангийн postgres_exporter. Grafana нь monitor.petronet.mn дээр, хоёр самбартай.
Консолын «Платформын эрүүл мэнд» дэлгэц ижил Prometheus-аас уншина. Хөршийн стекийг хуваалцаагүй нь санаатай: консолын асуулгууд job-оор шүүдэггүй тул хоёр бүтээгдэхүүний хүсэлт нийлж тоологдох байв.
Лог ба trace (Loki, Tempo) энд байхгүй — тэдгээр нь өөрийн диск, өөрийн хадгалалтын хугацаа шаардах тусдаа шийдвэр.
Шинэчлэлт
cd /opt/petronet/src && git pull && ./deploy.sh
deploy.sh нь энэ бүтээгдэхүүний backend образыг барина, бүрхүүлийг цөмийн нийтэлсэн образаас авна.
Цөмийг өргөх нь хоёр мөр: go.mod-ын хувилбар ба .env-ийн WEB_IMAGE. Хоёул нэг commit дээр байх ёстой — эс бөгөөс backend, frontend хоёр өөр API гэрээ дээр ажиллана.
Пин нь одоогоор tag биш commit: цөмийн main нь pkg/nexus-ийн эвдэх өөрчлөлт агуулсан тул дараагийн tag нь v2.0.0. Тэр гармагц хоёулаа түүн рүү шилжинэ.
Мартагддаг зүйлс
http2 on;нь тусдаа заавар байх ёстой — certbot түүнийг бичдэггүй тул шинэ vhost бүр HTTP/1.1 дээр үлддэг.add_headerөв залгамжлахгүй: хүү блок дотор нэг ч байвал дээд түвшнийхийг бүгдийг нь хаяна.- Ижил хост дээр хоёр суулгац байгаа тул скриптийн анхдагч контейнерийн нэр бүрийг шалгах хэрэгтэй — цөмийн анхдагч нь энд хөршийнхийг заана.
- Порт бүр нэг эзэнтэй: 5440 / 8098 / 3018 / 9092 / 3019 / 9101 / 9188 нь энэ суулгацынх.