Администрирование системы

Устройство сервера: службы, базы городов, расчётные движки, переменные окружения по функциям, права, персональные данные, выкатка, резервные копии, состояние и журналы.

Из чего состоит системаТГИД — это веб-сервер Nuxt, API на FastAPI, воркеры Celery с очередью в Redis, базы PostgreSQL/PostGIS (база каждого города, общая база пользователей и справочник sprav), GeoServer и martin для тайлов карты. Снаружи всё закрывает nginx. Ниже — кто к кому обращается и какие порты заданы в коде по умолчанию.
Резервные копии и данныеПочти всё, что нельзя потерять, лежит в PostgreSQL: базы городов (вместе с фото нарядов) и UsersDB. Кроме баз копируют .env и переменные служб, каталог данных GeoServer и конфигурацию nginx. Для баз в репозитории API есть скрипт с проверкой и ротацией и задача планировщика к нему.
Несколько городов на одном APIОдин процесс API и общие воркеры обслуживают все города. Город запроса задаёт префикс пути /city/<код>/, базу — список TGIDCITYDBS. Схему базы города API доводит сам: после переконвертации из десктопа ничего не надо запускать вручную.
Выкатка и откатВеб собирают в отдельном рабочем дереве и подменяют каталог .output целиком, при остановленных службах. API переводят fast-forward на заранее известный коммит и перезапускают службы по одной. На каждом шаге есть проверка и автоматический возврат, а откат — тот же скрипт с ключом -Rollback.
Расчётные движки: выбор и настройкаДвижок, профиль и ядро расчёта задаются переменными окружения службы воркера. Значения по умолчанию в коде — самые осторожные: старый sety, профиль legacy, ядро на Python. Прод работает на heatnet, профиле fixed и ядре Rust, и это нужно задать явно.
Переменные окруженияПолный перечень переменных API и веба по функциям: что делает переменная, какое у неё значение по умолчанию в коде и что не работает без неё. Список собран по коду, а не по .env.example: в примерах есть не всё.
Состояние и журналыЖивость API показывает /health: базы городов, Redis и схема баз в одном ответе. Код ответа всегда 200, поэтому смотреть надо на поле status. Подробности пишутся в журнал каждого процесса API и в журналы служб. Кто что делал — в журнале действий.
Персональные данныеФИО физических лиц, телефоны, e-mail, ИИН, лицевые счета и номера договоров потребителей полностью видит только пользователь с правом «Персональные данные потребителей полностью» (piiview). Остальным API отдаёт их замаскированными. Данные в базе не меняются: маскируется ответ. Часть путей маскирование не проходит — они перечислены ниже.
Роли и праваПрава пользователя — это шаблон роли плюс отличия, которые администратор отметил галочками. Сервер проверяет права на каждом запросе сам, веб только прячет недоступные кнопки. Поверх прав действуют флаги сервера: без MUTATIONSENABLED данные нельзя менять никому, включая администратора.