Как настроить Caddy как reverse proxy для BookStack в Docker с Reality Stealself на Ubuntu VPS
Здравствуйте!
У меня возникла проблема с настройкой сервера:
- VPS с Ubuntu
- Установлены: Caddy, Docker, панель управления
- В Docker контейнере работает BookStack
- Reality Stealself настроен на прослушивание порта 443
Я пробовал следующие варианты настройки:
- Настроить Caddyfile как reverse proxy для wiki.example.com:8443 с указанием target в панели управления тем же адресом
- Настроить fallback для reverse proxy
Оба варианта не дали результата. Ранее я находил обсуждение на этой платформе, которое помогло решить подобную задачу, но оно было удалено, и я забыл детали конфигурации.
Подскажите, пожалуйста, в каком направлении искать решение для настройки Caddy как reverse proxy для BookStack с Reality Stealself.
BookStack с Caddy как reverse proxy в Docker-контейнере и Reality Stealself на Ubuntu обычно требует правильной настройки портов и прозрачного прокси. Основная проблема часто связана с конфигурацией Caddyfile, где необходимо указать правильные порты Docker-контейнера и использовать прозрачный режим для корректной передачи заголовков.
Содержание:
- Основные проблемы настройки
- Правильная конфигурация Caddyfile
- Настройка Reality Stealself
- Конфигурация Docker для BookStack
- Отладка и устранение неполадок
Основные проблемы настройки
Частые ошибки при настройке Caddy как reverse proxy для BookStack включают:
- Неправильные порты: BookStack в Docker обычно работает на порту 8080, а не на 80
- Отсутствие прозрачного режима: необходимо добавлять
transparentв Caddyfile - Некорректная настройка APP_URL: в BookStack должен быть указан полный URL через HTTPS
- Конфликт Reality с портами: Reality может конфликтовать с портами, используемыми Caddy
Согласно документации по установке BookStack на Ubuntu, при установке через Docker контейнер BookStack доступен по умолчанию на порту 8080 хоста.
Правильная конфигурация Caddyfile
Для BookStack с Reality Stealself оптимальная конфигурация Caddyfile выглядит следующим образом:
wiki.example.com {
reverse_proxy localhost:8080 {
transparent
header_up Host {http.reverse_proxy.upstream.hostport}
header_up X-Forwarded-For {http.request.remote_host}
header_up X-Forwarded-Proto {http.request.scheme}
}
# Для Reality если используется
tls internal
}
Ключевые моменты:
- Используйте
localhost:8080как целевой адрес, если BookStack работает в Docker на том же хосте - Флаг
transparentкритически важен для корректной работы - Заголовки должны передаваться для правильного определения схемы и хоста
Как объясняется в обсуждении Reddit, “контейнер BookStack должен быть доступен на IP хоста на порту 8080, а не 80”.
Настройка Reality Stealself
Reality Stealself требует специальной конфигурации для работы с Caddy:
# Reality конфигурация
{
experimental_http3
}
reality.example.com {
reverse_proxy localhost:8080 {
transparent
tls reality {
local_port 8443
destination_port 443
}
}
}
Важные параметры:
local_port- порт, который прослушивает Realitydestination_port- порт целевого сервиса- Для SSL сертификатов используйте
tls internalили настройте автоматическую выдачу
Проект XTLS forwardproxy-reality предоставляет плагин для Caddy с функциями сопротивления зондированию и скрытия факта использования прокси.
Конфигурация Docker для BookStack
Ваш docker-compose.yml для BookStack должен выглядеть так:
version: '3.8'
services:
bookstack:
image: solidnerd/bookstack
container_name: bookstack
ports:
- "8080:80"
environment:
- APP_URL=https://wiki.example.com
- APP_KEY=base64:ваш_секретный_ключ
- DB_HOST=bookstack-db
- DB_DATABASE=bookstack
- DB_USERNAME=bookstack
- DB_PASSWORD=ваш_пароль
volumes:
- bookstackuploads:/var/www/bookstack/public/uploads
- bookstackstorage:/var/www/bookstack/storage
volumes:
bookstackuploads:
bookstackstorage:
Критически важно:
- Порт 8080 на хосте соответствует порту 80 внутри контейнера
- APP_URL должен соответствовать домену, используемому в Caddyfile
- Создайте уникальный APP_KEY с помощью
php artisan key:generate
Отладка и устранение неполадок
Если настройка не работает, проверьте следующие моменты:
Проверка доступности BookStack
- Прямой доступ к BookStack:
curl http://localhost:8080
- Проверка логов Docker:
docker logs bookstack
Конфликт портов
Убедитесь, что порты не конфликтуют:
netstat -tulpn | grep :8080 netstat -tulpn | grep :443
Тестирование Caddy
Проверьте конфигурацию Caddy:
caddy adapt --config /etc/caddy/Caddyfile
И перезапустите Caddy:
systemctl restart caddy
Пример рабочей конфигурации
На основе примеров из реальных проектов, полная конфигурация может выглядеть так:
{
auto_https off
}
# Основной домен
wiki.example.com {
reverse_proxy bookstack:80 {
transparent
}
tls internal
}
# Reality конфигурация
reality.wiki.example.com {
reverse_proxy localhost:8080 {
transparent
tls reality {
local_port 443
destination_port 443
}
}
}
Источники
- BookStack GitHub Issue #4037 - Cannot access bookstack behind caddy reverse proxy
- BookStack GitHub Issue #801 - Bookstack behind Caddy Reverse Proxy not working
- Reddit r/selfhosted - Caddyfile for Bookstack to use SSL
- Reddit r/selfhosted - Anyone have Bookstack working with Caddy Server?
- Carlos Aguni Blog - Using Caddy as Reverse Proxy
- XTLS forwardproxy-reality GitHub - Forward proxy plugin for Caddy
- BookStack Official Documentation - Ubuntu Installation
Заключение
Для успешной настройки Caddy как reverse proxy для BookStack с Reality Stealself на Ubuntu VPS:
- Убедитесь, что BookStack доступен на порту 8080 хоста
- Используйте флаг
transparentв Caddyfile для корректной передачи заголовков - Настройте правильный APP_URL в BookStack, соответствующий домену в Caddy
- Для Reality проверьте конфигурацию портов и SSL
- При проблемах проверяйте логи Docker и доступность сервисов напрямую
Если после всех настроек проблема остается, попробуйте временно отключить Reality для проверки базовой работы reverse proxy, затем постепенно добавляйте Reality обратно, отслеживая каждый шаг конфигурации.