这是我的第一篇帖子,我想分享一个我与朋友 ChatGPT 一起制作的指南。在尝试了几天如何让 Caddy 为 Discourse 反向代理工作后,我终于成功了,Discourse 是按照官方说明安装的。我使用了在这里 Caddy 论坛上找到的信息。Caddy Discourse 设置。这可能很简单,但对于我们这些刚开始使用 Discourse 的人来说,要让它运行起来需要付出一些努力。
感谢这个显然很棒的社区。
使用 Docker 端口集成 Discourse、Caddy 和 WordPress 进行反向代理
概述
本指南提供了一个分步过程,用于使用 Docker Compose 将 Discourse 与 Caddy 设置为反向代理,并 साथ ही WordPress 安装。这些说明适用于典型的 Ubuntu 22 LTS 服务器,并演示了如何集成多个服务,同时确保设置干净且可重现。
先决条件
在继续之前,请确保满足以下先决条件:
- Docker 和 Docker Compose:
bash
复制代码
apt update && apt install docker docker-compose -y
- 已安装 Discourse:
- 通过官方安装说明安装 Discourse。
- 域名:
- 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。
配置更改
- 公开非标准 HTTP 端口:
yaml
复制代码
expose:
- "8880:80" # http
- 删除 SSL 模板:
yaml
复制代码
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- 设置 Docker 网络:
yaml
复制代码
docker_args:
- '--network caddy_net'
networks:
caddy_net:
external: true
- 重建 Discourse:通过重建 Discourse 容器应用更改:
bash
复制代码
cd /var/discourse
./launcher rebuild app
步骤 4:部署服务
启动 Caddy 和 WordPress 的 Docker 服务:
- 导航到 Docker Compose 目录:
bash
复制代码
cd /etc/docker-services
- 启动容器:
bash
复制代码
docker compose up -d
步骤 5:测试和验证
- 验证正在运行的容器:
bash
复制代码
docker ps
- 访问 WordPress:导航到:
arduino
复制代码
https://website.com
- 访问 Discourse:导航到:
arduino
复制代码
https://forum.website.com
- 检查日志:
- Caddy:
bash
复制代码
docker logs caddy
- Discourse:
bash
复制代码
tail -f /var/discourse/shared/standalone/log/rails/production.log
故障排除
- Discourse 未响应:
- 确保 Discourse 绑定到端口
8880。 - 验证容器是否连接到
caddy_net:
bash
复制代码
docker network inspect caddy_net
- Caddy SSL 错误:
- 检查
/data中的 Caddy 证书日志。
- 重建问题:
- 确保在重建 Discourse 时
caddy_net网络处于活动状态:
bash
复制代码
docker network ls
结论
本指南演示了如何使用 Docker Compose 和反向代理配置集成 Discourse、Caddy 和 WordPress。通过遵循这些步骤,您可以为自己的网站基础设施实现模块化且安全的设置。