Энэ суулгац юунаас бүрдэх вэ

Платформын өөрийнх нь баримт нээлттэй эхэд байдаг. Энэ хуудас өөр асуултад хариулна: энэ суулгац дээр юу хаана ажиллаж байна, ямар хаалга нээлттэй, юу нөөцлөгдөж байна.

Нэрс

НэрЮуАрд ньТөлөв
petronet.mnПлатформ — frontend ба /api/v1/*Next.js + Goажиллаж байна
admin.petronet.mnОператорын консол — /api/platform/v1/*Мөн тэр хоёражиллаж байна
monitor.petronet.mnGrafanaPrometheus + хоёр 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 нь энэ суулгацынх.