Интеграция Discourse, Caddy и WordPress с Docker-портами для обратного прокси

Это мой первый пост, и я хочу поделиться гайдом, который я создал вместе с нашим другом ChatGPT после нескольких дней попыток разобраться, как заставить Caddy работать в качестве обратного прокси для Discourse, установленного по официальным инструкциям. Я использовал информацию, найденную на форуме Caddy здесь: Настройка Caddy для Discourse. Возможно, это просто, но для тех из нас, кто только начинает работать с Discourse, это может оказаться непростой задачей.

Спасибо за явно отличное сообщество.

Интеграция Discourse, Caddy и WordPress с использованием портов Docker для обратного прокси


Обзор

Это руководство представляет пошаговый процесс настройки Discourse с использованием Caddy в качестве обратного прокси, а также установки WordPress с помощью Docker Compose. Эти инструкции предназначены для типичного сервера Ubuntu 22 LTS и демонстрируют, как интегрировать несколько сервисов, обеспечивая чистую и воспроизводимую настройку.


Необходимые условия

Перед началом убедитесь, что выполнены следующие требования:

  1. Docker и Docker Compose:

bash

Copy code

apt update && apt install docker docker-compose -y
  1. Установленный Discourse:
  1. Доменные имена:
  • Основное доменное имя для WordPress (например, website.com).
  • Поддомен для Discourse (например, forum.website.com).

Шаг 1: Настройка docker-compose.yml

Файл docker-compose.yml определяет сервисы для Caddy (обратный прокси), WordPress и MySQL.

Расположение файла

Сохраните файл как /etc/docker-services/docker-compose.yml.

Конфигурация

yaml

Copy code

version: '3.8'

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - caddy_net

  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: example_user
      WORDPRESS_DB_PASSWORD: example_password
      WORDPRESS_DB_NAME: example_db
    volumes:
      - ./wordpress:/var/www/html
    networks:
      - caddy_net

  db:
    image: mysql:5.7
    container_name: wordpress_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: example_password
      MYSQL_DATABASE: example_db
      MYSQL_USER: example_user
      MYSQL_PASSWORD: example_password
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - caddy_net

volumes:
  caddy_data:
  caddy_config:
  db_data:

networks:
  caddy_net:
    external: true

Шаг 2: Настройка обратного прокси Caddy

Caddy перенаправляет запросы как к Discourse, так и к WordPress, а также управляет SSL-сертификатами.

Расположение файла

Сохраните конфигурацию как /etc/docker-services/Caddyfile.

Конфигурация

caddyfile

Copy code

website.com {
    reverse_proxy wordpress:80
}

forum.website.com {
    reverse_proxy app:80
}

Эта конфигурация обеспечивает:

  • Перенаправление запросов к website.com в контейнер WordPress.
  • Перенаправление запросов к forum.website.com в контейнер Discourse.

Шаг 3: Настройка Discourse

Обновите app.yml, чтобы интегрировать Discourse с Caddy и сетью Docker.

Расположение файла

Расположен в /var/discourse/containers/app.yml.

Изменения в конфигурации

  1. Открытие нестандартных HTTP-портов:

yaml

Copy code

expose:
  - "8880:80"   # http
  1. Удаление SSL-шаблонов:

yaml

Copy code

# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  1. Настройка сети Docker:

yaml

Copy code

docker_args:
  - '--network caddy_net'

networks:
  caddy_net:
    external: true
  1. Пересборка Discourse: Примените изменения, пересобрав контейнер Discourse:

bash

Copy code

cd /var/discourse
./launcher rebuild app

Шаг 4: Развертывание сервисов

Запустите сервисы Docker для Caddy и WordPress:

  1. Перейдите в директорию Docker Compose:

bash

Copy code

cd /etc/docker-services
  1. Запустите контейнеры:

bash

Copy code

docker compose up -d

Шаг 5: Тестирование и проверка

  1. Проверка запущенных контейнеров:

bash

Copy code

docker ps
  1. Доступ к WordPress: Перейдите по адресу:

arduino

Copy code

https://website.com
  1. Доступ к Discourse: Перейдите по адресу:

arduino

Copy code

https://forum.website.com
  1. Проверка логов:
  • Caddy:

bash

Copy code

docker logs caddy
  • Discourse:

bash

Copy code

tail -f /var/discourse/shared/standalone/log/rails/production.log

Устранение неполадок

  1. Discourse не отвечает:
  • Убедитесь, что Discourse привязан к порту 8880.
  • Проверьте, что контейнер подключен к сети caddy_net:

bash

Copy code

docker network inspect caddy_net
  1. Ошибки SSL в Caddy:
  • Проверьте логи сертификатов Caddy в /data.
  1. Проблемы с пересборкой:
  • Убедитесь, что сеть caddy_net активна при пересборке Discourse:

bash

Copy code

docker network ls

Заключение

Это руководство демонстрирует, как интегрировать Discourse, Caddy и WordPress с использованием Docker Compose и конфигурации обратного прокси. Следуя этим шагам, вы сможете создать модульную и безопасную настройку для вашей веб-инфраструктуры.

You used an Arduino for this?