使用 Docker 端口将 Discourse、Caddy 和 WordPress 集成到反向代理中

这是我的第一篇帖子,我想分享一个我与朋友 ChatGPT 一起制作的指南。在尝试了几天如何让 Caddy 为 Discourse 反向代理工作后,我终于成功了,Discourse 是按照官方说明安装的。我使用了在这里 Caddy 论坛上找到的信息。Caddy Discourse 设置。这可能很简单,但对于我们这些刚开始使用 Discourse 的人来说,要让它运行起来需要付出一些努力。

感谢这个显然很棒的社区。

使用 Docker 端口集成 Discourse、Caddy 和 WordPress 进行反向代理


概述

本指南提供了一个分步过程,用于使用 Docker Compose 将 Discourse 与 Caddy 设置为反向代理,并 साथ ही WordPress 安装。这些说明适用于典型的 Ubuntu 22 LTS 服务器,并演示了如何集成多个服务,同时确保设置干净且可重现。


先决条件

在继续之前,请确保满足以下先决条件:

  1. DockerDocker Compose

bash

复制代码

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

复制代码

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,并管理 HTTPS 证书。

文件位置

将配置另存为 /etc/docker-services/Caddyfile

配置

caddyfile

复制代码

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

复制代码

expose:
  - "8880:80"   # http
  1. 删除 SSL 模板

yaml

复制代码

# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  1. 设置 Docker 网络

yaml

复制代码

docker_args:
  - '--network caddy_net'

networks:
  caddy_net:
    external: true
  1. 重建 Discourse:通过重建 Discourse 容器应用更改:

bash

复制代码

cd /var/discourse
./launcher rebuild app

步骤 4:部署服务

启动 Caddy 和 WordPress 的 Docker 服务:

  1. 导航到 Docker Compose 目录:

bash

复制代码

cd /etc/docker-services
  1. 启动容器:

bash

复制代码

docker compose up -d

步骤 5:测试和验证

  1. 验证正在运行的容器

bash

复制代码

docker ps
  1. 访问 WordPress:导航到:

arduino

复制代码

https://website.com
  1. 访问 Discourse:导航到:

arduino

复制代码

https://forum.website.com
  1. 检查日志
  • Caddy

bash

复制代码

docker logs caddy
  • Discourse

bash

复制代码

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

故障排除

  1. Discourse 未响应
  • 确保 Discourse 绑定到端口 8880
  • 验证容器是否连接到 caddy_net

bash

复制代码

docker network inspect caddy_net
  1. Caddy SSL 错误
  • 检查 /data 中的 Caddy 证书日志。
  1. 重建问题
  • 确保在重建 Discourse 时 caddy_net 网络处于活动状态:

bash

复制代码

docker network ls

结论

本指南演示了如何使用 Docker Compose 和反向代理配置集成 Discourse、Caddy 和 WordPress。通过遵循这些步骤,您可以为自己的网站基础设施实现模块化且安全的设置。

你用的是Arduino吗?