Развёртывание¶
Разверните платформу на одном VPS с Docker Compose + nginx. Стек — PostgreSQL + Redis + Go API (он же OIDC issuer) + Next.js BFF.
Предварительные требования¶
- Docker и плагин compose
- nginx + certbot (TLS)
- DNS-запись, указывающая на сервер
Топология¶
Internet ──► nginx (80/443, Let's Encrypt)
├─ /oauth2/*, /.well-known/*, /userinfo ─► api (OIDC issuer)
├─ /rp/sign/* ─► ретранслятор api
├─ /rp/eid/*, /rp/eid-org/* ─► api (прокси eID)
└─ всё остальное ─► web (Next.js BFF) ──► api
внутри: db (Postgres 16) · redis (7)
Файлы окружения (в gitignore)¶
.env— подстановка для compose (секреты Postgres/Redis, порты, домен).backend.env— конфигурация API (JWT_SECRET, EID_RP_, OAUTH_ISSUER, SSO_, …).
Отдельные секреты
У каждого развёртывания должны быть собственные JWT_SECRET,
SSO_STATE_KEY и учётные данные RP — никогда не переиспользуйте их между развёртываниями.
Шаги развёртывания¶
# 1) получить код
git clone git@github.com:gerege-systems/open-gerege-mn.git /srv/open-gerege-mn
cd /srv/open-gerege-mn
# 2) создать файлы окружения (.env + backend.env)
# 3) поднять стек — migrate применит схему автоматически
docker compose up -d --build
# или переразвернуть:
bash deploy/deploy.sh
nginx (пример)¶
server {
server_name sso.gerege.mn;
client_max_body_size 30m;
location /oauth2/ { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }
location = /.well-known/openid-configuration { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }
location = /.well-known/jwks.json { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }
location = /userinfo { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }
location /rp/sign/ { proxy_pass http://127.0.0.1:8081/rp/sign/; include /etc/nginx/proxy_params; }
location /rp/eid/ { proxy_pass http://127.0.0.1:8081/api/v1/eid/; include /etc/nginx/proxy_params; }
location /rp/eid-org/ { proxy_pass http://127.0.0.1:8081/api/v1/eid-org/; include /etc/nginx/proxy_params; }
location / { proxy_pass http://127.0.0.1:3008; include /etc/nginx/proxy_params; }
listen 443 ssl; # управляется certbot
}
Имя проекта в compose¶
На одном сервере можно держать несколько развёртываний рядом. У каждого в .env
должны быть свои COMPOSE_PROJECT_NAME, порты и тома — иначе теги образов и
тома будут конфликтовать.
| Развёртывание | Домен | Порты (пример) |
|---|---|---|
sso-dgov-mn |
sso.gerege.mn | web 3008 |
template-dgov-mn |
template.gerege.mn | web 3009 |
public-template |
open.gerege.mn | web 3010, api relay 8094 |
Эталонное развёртывание этого репозитория — public-template; заметки уровня
хоста (edge nginx, SSO-клиент, шаги первой установки) лежат в deploy/HOST.md.
Сайт документации¶
Этот сайт собирается из docs-site/ с помощью
MkDocs Material и публикуется по
адресу:
https://gerege-systems.github.io/open-gerege-mn/
- Каждый push в
main, затрагивающийdocs-site/**, запускает.github/workflows/docs.yml: сборка и публикация в GitHub Pages (источник Pages = GitHub Actions). - В pull request выполняется только
mkdocs build --strict— битые внутренние ссылки и пропуски в nav становятся ошибками. Публикации нет. - Языки: монгольский в корне, остальные с префиксом —
/en/,/ru/,/zh/. Этот список должен совпадать сdocsLangsвfrontend/src/brand.config.ts(пункт «Документация» в меню пользователя строит ссылку по нему).
Проверить локально:
cd docs-site
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/mkdocs serve # http://127.0.0.1:8000
.venv/bin/mkdocs build --strict
Для размещения на своём сервере есть docs-site/deploy-docs.sh — собирает сайт и
копирует его в DOCS_SERVER:DOCS_TARGET.