## Context - GoToSocial работает в Docker на bigbox (WG 10.8.0.2), конфиг — **только через env** `GTS_*` (docker-образ не читает смонтированный config.yaml — падал «host must be set») - Реверс-прокси: Caddy на vps02 (87.242.100.206, host net) → WireGuard 10.8.0.0/24 → bigbox 10.8.0.2:8082 → docker-NAT → контейнер gotosocial (сеть gotosocial_default, шлюз 172.30.0.1, контейнер 172.30.0.2) - Caddy передаёт `X-Forwarded-For` по умолчанию; в Caddyfile блока social.dedinit.ru только `header_up Host` и `header_up X-Forwarded-Proto https` (лишнего XFF нет) - Warning рекомендует `10.8.0.4/32` — это WG-адрес vps02 (peer в `sudo wg show` на bigbox) - Текущие значения: `GTS_TRUSTED_PROXIES=127.0.0.1/32,::1,172.30.0.1/16` (compose/config полностью синхронны) - Restart сервисов — только извне (SSH sudo) — **НЕ применимо**: bigbox локальная, docker compose доступен напрямую ## Goals / Non-Goals **Goals:** - Убрать предупреждение trusted-proxies (проверяется на главной странице) - Rate limiting и федеризация используют реальный клиентский IP - Синхронизировать compose (env) и config.yaml (reference) **Non-Goals:** - Не менять архитектуру проксирования (Caddy → WG → docker-NAT остаётся) - Не добавлять лишние заголовки в Caddy (XFF передаётся по умолчанию, X-Real-IP не нужен) - Не отключать rate limiting, не добавлять rate-limit exceptions ## Decisions ### D1: Добавить `10.8.0.4/32` в trusted-proxies **Решение:** В `docker-compose.yml` env `GTS_TRUSTED_PROXIES` и в `config.yaml` `trusted-proxies` добавить `10.8.0.4/32`, сохранив `127.0.0.1/32,::1,172.30.0.1/16`. **Обоснование:** Предупреждение прямо указывает недостающий диапазон. 10.8.0.4 — это WG-адрес vps02 (peer из `sudo wg show`, allowed-ips 10.8.0.4/32). Именно этот адрес видит GtS как источник входящих соединений от Caddy (после docker-NAT source-адрес — gateway 172.30.0.1, но GtS доверяет цепочке trusted proxies и берёт IP из XFF; чтобы корректно определить реальный client IP, адрес прокси-хопа 10.8.0.4 должен быть в списке доверия). Траст docker-gateway 172.30.0.1/16 тоже оставляем — он реальный source-адрес в контейнере. **Альтернативы:** - Добавить только 10.8.0.4/32 без 172.30.0.1 — недостаточно: GtS всё равно видит docker-gateway как source и не сможет довериться XFF от него. - 10.8.0.0/24 целиком — избыточно: единственный прокси-хоп в этой сети — vps02. ### D2: Изменить только один файл-источник правды (compose) + синхронизировать config.yaml **Решение:** Правим `docker-compose.yml` (рабочий) и `config.yaml` (reference) — оба, одинаково. **Обоснование:** Образ GtS читает только env. Но config.yaml хранится в git как reference и документирует настройку; расхождение создавало бы ложное впечатление. ### D3: Пересоздание через docker compose, без ручного удаления контейнера **Решение:** `docker compose up -d --force-recreate gotosocial` (env меняется → контейнер пересоздаётся). Данные не теряются (volume ./data). ## Risks / Trade-offs - **Перезапуск контейнера**: кратковременный даунтайм (секунды), инстанс поднимется сам (restart: unless-stopped). Откат — вернуть старое значение env + recreate. - **Неправильный IP в trusted-proxies**: если 10.8.0.4 не является фактическим source, предупреждение останется (но поменяет SUGGESTED_IP_RANGE) — тогда добавить то, что предложит GtS. Проверяется сразу после рестарта.