У админки теперь постоянные порты, которые не спорят с Portainer

Тестовый контур слушает 8100, прод — 8101 на хосте VPS (8000 занят Portainer). Адрес привязки вынесен в ADMIN_BIND_IP: по умолчанию только loopback, а для nginx-proxy-manager ставится 172.17.0.1, чтобы контейнер NPM мог достучаться до админки, но порт не оказался в интернете. Примеры окружений и DEPLOY обновлены.
This commit is contained in:
MpakobecEx 2026-10-19 03:46:24 +05:00
parent 8fb7fe5dd9
commit d695f1991f
9 changed files with 30 additions and 18 deletions

View File

@ -49,3 +49,4 @@ TEMPLATE_CACHE_TTL=45
# Админка (FastAPI, Блок 4). Порт на loopback хоста для docker compose. # Админка (FastAPI, Блок 4). Порт на loopback хоста для docker compose.
ADMIN_HTTP_PORT=8000 ADMIN_HTTP_PORT=8000
ADMIN_BIND_IP=127.0.0.1

View File

@ -21,7 +21,9 @@ cp env/test.env.example env/test.env
Порт ClickHouse на хосте (`CLICKHOUSE_HTTP_PORT`) у контуров должен различаться: Порт ClickHouse на хосте (`CLICKHOUSE_HTTP_PORT`) у контуров должен различаться:
`prod` — `8123`, `test` — `8124` (иначе контейнеры конфликтуют на одной VPS). `prod` — `8123`, `test` — `8124` (иначе контейнеры конфликтуют на одной VPS).
Порт админки (`ADMIN_HTTP_PORT`) — так же: `prod` — `8000`, `test` — `8001`. Порт админки (`ADMIN_HTTP_PORT`) — так же: `prod` — `8101`, `test` — `8100`
(8000 на VPS занят Portainer). `ADMIN_BIND_IP` по умолчанию `127.0.0.1`; чтобы
nginx-proxy-manager (контейнер) видел админку, ставьте `172.17.0.1`.
## 3. Логин в registry (если пакет приватный) ## 3. Логин в registry (если пакет приватный)
@ -84,13 +86,15 @@ docker compose -p test --env-file env/test.env -f docker-compose.prod.yml exec -
## Админка (FastAPI) ## Админка (FastAPI)
Сервис `admin` — отдельный образ `mpakobecex/dispelevilbot-admin`, общий пакет `common`. Сервис `admin` — отдельный образ `mpakobecex/dispelevilbot-admin`, общий пакет `common`.
Наружу пока **не публикуется**: только loopback хоста (`127.0.0.1:${ADMIN_HTTP_PORT}`). Наружу пока **не публикуется**: по умолчанию только loopback хоста
Домен и TLS появятся вместе с входом через Telegram (Блоки 2.4/4.2). (`127.0.0.1:${ADMIN_HTTP_PORT}`). Для nginx-proxy-manager (он в контейнере) задайте
`ADMIN_BIND_IP=172.17.0.1` и указывайте в NPM цель `172.17.0.1:8100` (test) /
`172.17.0.1:8101` (prod). Домен и TLS — Блок 4.2.
```bash ```bash
# проверка живости # проверка живости
curl -s http://127.0.0.1:8001/healthz # test curl -s http://127.0.0.1:8100/healthz # test
curl -s http://127.0.0.1:8000/healthz # prod curl -s http://127.0.0.1:8101/healthz # prod
``` ```
Локально без Docker: `pip install -r requirements-admin.txt && python -m admin` Локально без Docker: `pip install -r requirements-admin.txt && python -m admin`

View File

@ -92,8 +92,9 @@ docker compose up --build
``` ```
CI собирает два образа: `dispelevilbot-bot` и `dispelevilbot-admin`. Админка в compose CI собирает два образа: `dispelevilbot-bot` и `dispelevilbot-admin`. Админка в compose
публикуется только на loopback (`127.0.0.1:${ADMIN_HTTP_PORT}`), наружу выйдет вместе по умолчанию публикуется только на loopback (`127.0.0.1:${ADMIN_HTTP_PORT}`, test 8100 /
с доменом и TLS (Блок 2.4/4.2). prod 8101); для nginx-proxy-manager задаётся `ADMIN_BIND_IP=172.17.0.1`, наружу выйдет
вместе с доменом и TLS (Блок 4.2).
Прод/test-контуры — один `docker-compose.prod.yml`, разделяются Compose-проектом и env-файлом: Прод/test-контуры — один `docker-compose.prod.yml`, разделяются Compose-проектом и env-файлом:
@ -126,7 +127,7 @@ make backup E=test # на домашнем сервере: ./scripts/clickho
## Версионирование ## Версионирование
- Единый источник версии — `common/version.py` (`__version__`), текущая — `0.4.3`. - Единый источник версии — `common/version.py` (`__version__`), текущая — `0.4.4`.
- Схема — SemVer-подобная (`MAJOR.MINOR.PATCH`); git-тег = `v` + версия (`v0.1`). - Схема — SemVer-подобная (`MAJOR.MINOR.PATCH`); git-тег = `v` + версия (`v0.1`).
- Docker-образы тегируются версией (Блок 2), события ClickHouse получают `bot_version` (Блок 3). - Docker-образы тегируются версией (Блок 2), события ClickHouse получают `bot_version` (Блок 3).
- Выпуск: изменить `common/version.py` → коммит → аннотированный тег `vX.Y` → `git push --tags`. - Выпуск: изменить `common/version.py` → коммит → аннотированный тег `vX.Y` → `git push --tags`.

View File

@ -7,4 +7,4 @@
from __future__ import annotations from __future__ import annotations
__version__ = "0.4.3" __version__ = "0.4.4"

View File

@ -75,7 +75,9 @@ services:
ADMIN_HOST: 0.0.0.0 ADMIN_HOST: 0.0.0.0
ADMIN_PORT: "8000" ADMIN_PORT: "8000"
ports: ports:
- "127.0.0.1:${ADMIN_HTTP_PORT:-8000}:8000" # По умолчанию только loopback. Для NPM (контейнер) задайте ADMIN_BIND_IP=172.17.0.1:
# порт остаётся недоступен из интернета, но виден контейнерам на bridge.
- "${ADMIN_BIND_IP:-127.0.0.1}:${ADMIN_HTTP_PORT:-8101}:8000"
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy

View File

@ -83,7 +83,7 @@ services:
ADMIN_HOST: 0.0.0.0 ADMIN_HOST: 0.0.0.0
ADMIN_PORT: "8000" ADMIN_PORT: "8000"
ports: ports:
- "127.0.0.1:${ADMIN_HTTP_PORT:-8000}:8000" - "${ADMIN_BIND_IP:-127.0.0.1}:${ADMIN_HTTP_PORT:-8000}:8000"
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy

View File

@ -40,9 +40,11 @@ CLICKHOUSE_PASSWORD=
# Порт на хосте (для бэкапа). У test и prod он должен различаться. # Порт на хосте (для бэкапа). У test и prod он должен различаться.
CLICKHOUSE_HTTP_PORT=8123 CLICKHOUSE_HTTP_PORT=8123
# Админка (FastAPI). Порт на loopback хоста; у test и prod должен различаться. # Админка (FastAPI). Порт на хосте; у test и prod должен различаться
# Наружу пока не публикуется (домен/TLS — Блок 2.4). # (test 8100, prod 8101 — 8000 занят Portainer).
ADMIN_HTTP_PORT=8000 # ADMIN_BIND_IP=127.0.0.1 — только хост; для nginx-proxy-manager поставьте 172.17.0.1.
ADMIN_HTTP_PORT=8101
ADMIN_BIND_IP=127.0.0.1
# Шаблоны сообщений: TTL кеша бота (правки из админки без перезапуска). # Шаблоны сообщений: TTL кеша бота (правки из админки без перезапуска).
TEMPLATE_CACHE_TTL=45 TEMPLATE_CACHE_TTL=45

View File

@ -38,9 +38,11 @@ CLICKHOUSE_PASSWORD=
# Порт на хосте: у test он отличается от prod (8123), иначе конфликт на одной VPS. # Порт на хосте: у test он отличается от prod (8123), иначе конфликт на одной VPS.
CLICKHOUSE_HTTP_PORT=8124 CLICKHOUSE_HTTP_PORT=8124
# Админка (FastAPI). Порт на loopback хоста; у test и prod должен различаться. # Админка (FastAPI). Порт на хосте; у test и prod должен различаться
# Наружу пока не публикуется (домен/TLS — Блок 2.4). # (test 8100, prod 8101 — 8000 занят Portainer).
ADMIN_HTTP_PORT=8001 # ADMIN_BIND_IP=127.0.0.1 — только хост; для nginx-proxy-manager поставьте 172.17.0.1.
ADMIN_HTTP_PORT=8100
ADMIN_BIND_IP=127.0.0.1
# Шаблоны сообщений: TTL кеша бота (правки из админки без перезапуска). # Шаблоны сообщений: TTL кеша бота (правки из админки без перезапуска).
TEMPLATE_CACHE_TTL=45 TEMPLATE_CACHE_TTL=45

View File

@ -7,4 +7,4 @@ from common import __version__
def test_version_is_set(): def test_version_is_set():
assert __version__ assert __version__
assert __version__ == "0.4.3" assert __version__ == "0.4.4"