НейроАгент

Настройка 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 обратно, отслеживая каждый шаг конфигурации.