Production Environment
Текущий production runbook и canonical snapshot окружения.
Документ фиксирует фактическое состояние production-хоста на 2026-04-19, чтобы в следующих сессиях не восстанавливать topology по кускам из nginx, systemd, compose и чата.
Scope
Этот документ описывает:
- внешний ingress и домены;
- host-side сервисы и systemd units;
- runtime layout на сервере;
- blue/green правила для
traciumиshared/auth; - ограничения, которые нельзя ломать без явной миграции.
Если нужен общий подход к deploy, env и compose-контурам, сначала посмотри deployment.md.
Если нужен pipeline flow и runner model, посмотри ../50-processes/gitlab-cicd.md.
Canonical Host State
Production-host обслуживает:
tracium.rudocs.tracium.ruapi.tracium.ruid.tracium.ruserver1c.1-fb.ru
Внешний ingress:
80/tcpи443/tcpпроброшены на Ubuntu-хост;- edge ingress держит системный
nginxна Ubuntu, не контейнер; server1c.1-fb.ruработает по plain HTTP и не должен получать80 -> 443redirect.
Domain Routing
Tracium ingress
Системный nginx маршрутизирует:
tracium.ru→$tracium_web_upstreamdocs.tracium.ru→$tracium_docs_upstreamapi.tracium.ru→$tracium_api_upstreamid.tracium.ru→$tracium_auth_upstream
Актуальные upstream values лежат в:
/etc/nginx/snippets/tracium-active-upstreams.confНа момент фиксации состояния snippet содержит:
set $tracium_web_upstream 127.0.0.1:18180;
set $tracium_docs_upstream 127.0.0.1:18181;
set $tracium_api_upstream 127.0.0.1:18182;
set $tracium_auth_upstream 127.0.0.1:18183;1C ingress
server1c.1-fb.ru проксируется на:
192.168.1.190Инварианты:
- не добавлять redirect
80 -> 443; - не смешивать
server1c.1-fb.ruс blue/green логикойtracium; - проверять его отдельно от application rollout.
Host Services
Systemd units
На production-хосте должны быть enabled:
nginxdockerfail2bansshgitlab-runners.servicetracium-bluegreen.service
Назначение кастомных units:
gitlab-runners.service- поднимает dockerized runner stack из
/home/belkanov/apps/gitlab-runners;
- поднимает dockerized runner stack из
tracium-bluegreen.service- при старте хоста пересобирает active nginx snippet из runtime-state и делает
nginx reload.
- при старте хоста пересобирает active nginx snippet из runtime-state и делает
Active containers
Ожидаемое steady-state состояние:
tracium_green-web-1tracium_green-docs-1tracium_green-api-1shared_auth_green-auth-1deploy-rabbit-1deploy-auth-mongodb-1gitlab-runners-gitlab-runner-build-1gitlab-runners-gitlab-runner-deploy-1
Нормально, если активный color будет blue, а не green; важно только, чтобы:
tracium.activeиshared-auth.activeсовпадали с nginx snippet;- не оставались лишние предыдущие color-slots без причины;
mongoиrabbitбыли только общими production services, а не дублировались на color-slot.
Runtime Layout
/home/belkanov/apps/
├── gitlab-runners/
│ ├── .env
│ ├── docker-compose.yml
│ ├── build/config/config.toml
│ └── deploy/config/config.toml
├── production-runtime/
│ ├── bin/
│ ├── nginx/
│ └── systemd/
├── runtime-state/
│ ├── tracium.active
│ └── shared-auth.active
├── tracium/
│ ├── current -> releases/<sha>
│ ├── releases/<sha>
│ └── shared/
│ ├── tracium-root.env
│ └── tracium-deploy.env
└── shared-auth/
├── current -> releases/<sha>
├── releases/<sha>
└── shared/.envBlue/Green Model
Tracium
tracium blue/green использует два набора loopback ports:
blue18080web18081docs18082api
green18180web18181docs18182api
Compose file:
deploy/docker/docker-compose.prod-bluegreen.ymlRuntime scripts:
deploy/production-runtime/bin/deploy-tracium-color.sh
deploy/production-runtime/bin/retire-tracium-color.sh
deploy/production-runtime/bin/render-nginx-upstreams.sh
deploy/production-runtime/bin/restore-active-upstreams.shShared Auth
shared/auth blue/green использует:
blue18083
green18183
Ключевой operational invariant:
- production runtime для
shared/authподнимает только statelessauthcontainer; - production runtime не должен клонировать
mongoиrabbitна каждый color.
Для этого есть два compose-файла с разным смыслом:
deploy/docker-compose.bluegreen.yml- используется для smoke/verify и локальной проверки;
- содержит
auth + mongo + rabbit;
deploy/docker-compose.runtime.yml- используется для production rollout;
- поднимает только
auth; - подключает контейнер к существующей сети
deploy_default.
Production auth обязан переиспользовать:
deploy-auth-mongodb-1deploy-rabbit-1
через Docker network:
deploy_defaultCI/CD Runner Model
На production-хосте живут два runner’а:
ci-buildci-deploy
Оба работают в Docker, но имеют разные права:
ci-build- build/lint/test jobs;
- Docker socket для
docker compose configи image build;
ci-deploy- production deploy jobs;
- Docker socket;
- host mounts
/home/belkanov/appsи/etc/nginx.
Runner configs лежат в:
/home/belkanov/apps/gitlab-runners/build/config/config.toml
/home/belkanov/apps/gitlab-runners/deploy/config/config.tomlОба runner’а должны содержать:
request_concurrency = 2Это уже применено и убирает warning про long polling.
Operational Rules
Перед любым изменением production ingress
Проверь:
/etc/nginx/snippets/tracium-active-upstreams.conf/home/belkanov/apps/runtime-state/tracium.active/home/belkanov/apps/runtime-state/shared-auth.activesystemctl status nginx gitlab-runners.service tracium-bluegreen.service
Нельзя делать
- включать redirect
80 -> 443дляserver1c.1-fb.ru; - переносить edge ingress в контейнер без отдельной миграции;
- поднимать отдельные
mongo/rabbitдля production color-slotshared/auth; - править nginx upstream ports вручную, забыв обновить runtime-state;
- использовать SSH deploy с внешнего runner’а, если deploy уже идет через
ci-deployна самом хосте.
Нормальный post-change smoke set
curl -I https://tracium.ru
curl https://api.tracium.ru/readyz
curl https://id.tracium.ru/readyz
curl -I http://server1c.1-fb.ruCurrent Snapshot
На момент фиксации:
- active color
tracium=green - active color
shared/auth=green traciumслушает:127.0.0.1:18180127.0.0.1:18181127.0.0.1:18182
shared/authслушает:127.0.0.1:18183
blue-порты18080/18081/18082/18083свободны для следующего rollout.
Если в будущем активным станет blue, это не проблема само по себе.
Проблема — когда active-state, nginx snippet и реально живые контейнеры расходятся.