Post

在 CentOS 上使用 Caddy 运行 Discourse 踩坑记

因为想体验下论坛,所以在自己 VPS 上安装了 Discourse,这个号称论坛下一个十年的服务。

先说为什么用 Caddy 来配合使用 Discourse:

  • Caddy 官方论坛是用的 Discourse
  • Caddy 自动部署免费的 SSl 证书:Let’s Encrypt
  • HTTP2 和 QUIC
  • 配置简单

Requirements

  • 最低 1GB 内存
  • CentOS 7 x64

设置 swapfile

Discourse 官方推荐配置最低为 2GB 内存,所以如果你的主机是 1GB 内存的话,需要创建一个 2GB 的 swapfile。

创建教程请参考我的另一篇文章《在 Linux 中设置和修改 swap 空间》

安装 Docker

使用如下命令安装和配置 Docker

1
2
3
4
5
6
7
sudo yum install docker
vi /etc/sysconfig/docker
# 将下面一行注释掉,效果如下
#OPTIONS='--selinux-enabled'
# 启用 Docker 服务,并添加开机启动
sudo systemctl start docker
sudo systemctl enable docker

如遇到问题,请搜索解决。

安装 Discourse

/var 文件夹创建一个 discourse 文件夹,将 Discourse 源代码克隆进去

1
2
sudo mkdir /var/discourse
sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse

进入 discourse 文件夹

1
cd /var/discourse

拷贝 Discourse 的配置参考文件到 containers 文件夹

1
sudo cp samples/standalone.yml containers/app.yml

配置 Discourse

打开 app.yml

1
sudo vi containers/app.yml

如果你使用的是 1GB 的 VPS,将配置修改为如下参数

1
2
3
db_shared_buffers: "128MB"
## With 2GB we recommend 3-4 workers, with 1GB only 2
UNICORN_WORKERS: 2

配置你的管理员邮箱地址

1
DISCOURSE_DEVELOPER_EMAILS: 'you@youremail.com'

设置你的 Discourse 论坛域名,如 discourse.example.com 则将配置改为

1
2
## TODO: The domain name this Discourse instance will respond to
DISCOURSE_HOSTNAME: 'discourse.example.com'

配置邮件服务

推荐使用官方教程 INSTALL-email.md

我尝试使用 Yandex 的免费自定义域名邮箱服务,但是配置完成后一直无法发送邮件,最后还是用了官方推荐的 Mailjet 服务。

修改配置使 Discourse 可以运行在 Caddy Server

1
2
3
4
5
6
7
8
9
10
## 将下面两行注释掉
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
## 修改下面两行,注释掉 https,修改 http 端口,避免冲突(系统 apache/nginx 服务已经占用了 80 端口)
expose:
  - "8080:80" # http,表示将容器外的 8080 端口映射到容器内的 80 端口
# - "443:443" # https
env:
  ## 将下面一行注释掉
  #LETSENCRYPT_ACCOUNT_EMAIL: you@youremail.com
  1. 保存并关闭 app.yml 文件

修改 Caddy 配置文件 Caddyfile,添加如下配置

1
2
3
4
discourse.example.com # 你的论坛域名
proxy / localhost:8080 { # 8080 为之前在 app.yml 中配置的 http 端口
    transparent
}

构建并启动 Discourse

1
2
sudo ./launcher bootstrap app
sudo ./launcher start app

如果构建之后修改了 app.yml 配置文件,则需要使用下面命令来重新构建 app 并启动

1
2
3
./launcher stop app
./launcher rebuild app
./launcher start app
  1. 在浏览器输入你在 DISCOURSE_HOSTNAME 配置的论坛域名,如discourse.example.com,就可以看到部署完成的论坛了!

手动激活管理员账户

如果你的邮件服务器配置存在问题,或者始终无法收到激活邮件,则使用下面命令手动激活管理员账户

1
2
sudo ./launcher enter app
rake admin:create

使用感受

Discourse 给人的感觉就是很新,很简洁:

  • 弱化分类。Discourse 首页 默认展示全站热帖 (可配置),而不是分类目录
  • 简化发布。编辑器默认 Markdown 格式,纯文本,方便后期格式化展示;默认附件只能上传图片
  • 帖子以对话气泡的形式展示
  • 类似 Bootstrap 风格的标准交互控件,大量 Ajax 加载使用,话题跟踪与通知系统
  • 固定 论坛分类的顺序 需要在设置中将 fixed category positions 选中
  • 论坛分类 最多两个层级

部分摘自知乎:黎欣健

参考 https://meta.discourse.org/t/running-discourse-with-caddy-server/54716 https://www.vultr.com/docs/install-discourse-on-centos-7 https://github.com/discourse/discourse/blob/master/docs/INSTALL-email.md

This post is licensed under CC BY 4.0 by the author.