034 Публикация стенда как https://rxipam.rxmsk.ru через общий Caddy хоста (Caddyfile вне репозитория): UI и /api/v1 доступны из интернета, /docs, /redoc, /openapi.json — только из частных сетей (RFC 1918/4193, loopback). Caddy проксирует на опубликованный порт приложения — общая Docker-сеть отклонена из-за коллизии имён app/db с Nextcloud. TRUSTED_PROXIES=172.16.0.0/12: реальный IP клиента из X-Forwarded-For. Интеграционный тест журнала больше не проверяет подделку XFF с хоста (хост за Caddy доверенный), логику покрывает unit-тест. 035 Дата и IP последнего входа в разделе «Пользователи»: users.last_login_at / last_login_ip (миграция 0014 с заполнением из журнала), запись при успешном входе, UserOut, колонка в UI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
17 lines
1.1 KiB
Bash
17 lines
1.1 KiB
Bash
# python scripts/gen_env.py создаёт .env со случайными значениями
|
||
POSTGRES_DB=ipam
|
||
POSTGRES_USER=ipam
|
||
POSTGRES_PASSWORD=change-me
|
||
# JWT_SECRET — не короче 32 символов (иначе приложение не стартует); ADMIN_PASSWORD — не короче 8
|
||
JWT_SECRET=change-me
|
||
ADMIN_USERNAME=admin
|
||
ADMIN_PASSWORD=change-me
|
||
APP_PORT=8088
|
||
DB_HOST_PORT=55432
|
||
# APP_BIND=127.0.0.1 — публиковать порт приложения только на loopback (за reverse-proxy с TLS); по умолчанию 0.0.0.0
|
||
# CIDR доверенных reverse-proxy через запятую (у них берётся X-Forwarded-For); по умолчанию пусто — IP клиента = адрес сокета
|
||
TRUSTED_PROXIES=
|
||
# Публикация через общий Caddy на этом же хосте (изменение 034): Caddy ходит на опубликованный порт и приходит
|
||
# с адреса шлюза Docker-моста — доверять диапазону мостов
|
||
# TRUSTED_PROXIES=172.16.0.0/12
|