Другое

Настройка Caddy как reverse proxy для BookStack с Reality на Ubuntu VPS

Полное руководство по настройке Caddy как reverse proxy для BookStack в Docker с Reality Stealself на Ubuntu VPS. Решение проблем с портами и конфигурацией.

Как настроить Caddy как reverse proxy для BookStack в Docker с Reality Stealself на Ubuntu VPS

Здравствуйте!

У меня возникла проблема с настройкой сервера:

  • VPS с Ubuntu
  • Установлены: Caddy, Docker, панель управления
  • В Docker контейнере работает BookStack
  • Reality Stealself настроен на прослушивание порта 443

Я пробовал следующие варианты настройки:

  1. Настроить Caddyfile как reverse proxy для wiki.example.com:8443 с указанием target в панели управления тем же адресом
  2. Настроить fallback для reverse proxy

Оба варианта не дали результата. Ранее я находил обсуждение на этой платформе, которое помогло решить подобную задачу, но оно было удалено, и я забыл детали конфигурации.

Подскажите, пожалуйста, в каком направлении искать решение для настройки Caddy как reverse proxy для BookStack с Reality Stealself.

BookStack с Caddy как reverse proxy в Docker-контейнере и Reality Stealself на Ubuntu обычно требует правильной настройки портов и прозрачного прокси. Основная проблема часто связана с конфигурацией Caddyfile, где необходимо указать правильные порты Docker-контейнера и использовать прозрачный режим для корректной передачи заголовков.

Содержание:

Основные проблемы настройки

Частые ошибки при настройке 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 выглядит следующим образом:

caddy
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:

caddy
# Reality конфигурация
{
    experimental_http3
}

reality.example.com {
    reverse_proxy localhost:8080 {
        transparent
        tls reality {
            local_port 8443
            destination_port 443
        }
    }
}

Важные параметры:

  • local_port - порт, который прослушивает Reality
  • destination_port - порт целевого сервиса
  • Для SSL сертификатов используйте tls internal или настройте автоматическую выдачу

Проект XTLS forwardproxy-reality предоставляет плагин для Caddy с функциями сопротивления зондированию и скрытия факта использования прокси.


Конфигурация Docker для BookStack

Ваш docker-compose.yml для BookStack должен выглядеть так:

yaml
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

  1. Прямой доступ к BookStack:
bash
curl http://localhost:8080
  1. Проверка логов Docker:
bash
docker logs bookstack

Конфликт портов

Убедитесь, что порты не конфликтуют:

bash
netstat -tulpn | grep :8080
netstat -tulpn | grep :443

Тестирование Caddy

Проверьте конфигурацию Caddy:

bash
caddy adapt --config /etc/caddy/Caddyfile

И перезапустите Caddy:

bash
systemctl restart caddy

Пример рабочей конфигурации

На основе примеров из реальных проектов, полная конфигурация может выглядеть так:

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
        }
    }
}

Источники

  1. BookStack GitHub Issue #4037 - Cannot access bookstack behind caddy reverse proxy
  2. BookStack GitHub Issue #801 - Bookstack behind Caddy Reverse Proxy not working
  3. Reddit r/selfhosted - Caddyfile for Bookstack to use SSL
  4. Reddit r/selfhosted - Anyone have Bookstack working with Caddy Server?
  5. Carlos Aguni Blog - Using Caddy as Reverse Proxy
  6. XTLS forwardproxy-reality GitHub - Forward proxy plugin for Caddy
  7. BookStack Official Documentation - Ubuntu Installation

Заключение

Для успешной настройки Caddy как reverse proxy для BookStack с Reality Stealself на Ubuntu VPS:

  1. Убедитесь, что BookStack доступен на порту 8080 хоста
  2. Используйте флаг transparent в Caddyfile для корректной передачи заголовков
  3. Настройте правильный APP_URL в BookStack, соответствующий домену в Caddy
  4. Для Reality проверьте конфигурацию портов и SSL
  5. При проблемах проверяйте логи Docker и доступность сервисов напрямую

Если после всех настроек проблема остается, попробуйте временно отключить Reality для проверки базовой работы reverse proxy, затем постепенно добавляйте Reality обратно, отслеживая каждый шаг конфигурации.

Авторы
Проверено модерацией
Модерация