在 Docker 上部署 Discourse,实际操作起来比想象中更为顺畅。作为一款完全开源、面向现代社区设计的讨论平台,Discourse 融合了邮件列表、传统论坛与即时聊天的优势,无论是技术架构还是社区理念,都堪称面向下一个十年的产物。如果你正在寻找一个既简洁又功能完善的互联网讨论解决方案,它确实值得认真评估。借助 Docker 进行部署,则进一步让整个过程变得清晰可控——Docker 容器技术将应用及其依赖环境打包在一起,大幅减少了环境配置方面的麻烦。
以下是一套在 Docker 环境中安装 Discourse 的详细操作指南,按照步骤执行即可。
1. 安装 Docker
前提条件是服务器上已经正确安装 Docker。这一步门槛不高,但不同操作系统使用的命令略有差异。
在 Ubuntu 上:
Ubuntu 官方软件仓库已包含 Docker 安装包,直接使用 apt 管理器安装即可,注意需要以 sudo 或 root 身份执行。
# apt-get install docker
在 CentOS 7 上:
CentOS 7 同样在仓库中提供了 Docker 包,通过 yum 管理器安装。
# yum install docker

2. 配置交换内存
需要特别提醒:Discourse 不能在 512MB 内存环境下安装。如果你的系统 RAM 低于 1GB,请先升级至至少 1GB。如果内存刚好达标或略显紧张,建议按照以下步骤设置交换内存,为 VPS 或服务器提供额外的缓冲空间。
首先创建一个空的交换文件:
# install -o root -g root -m 0600 /dev/null /swapfile
若希望交换内存为 1GB,执行以下命令(跳过下面的 2GB 步骤):
# dd if=/dev/zero of=/swapfile bs=1k count=1024k
若希望交换内存为 2GB,则执行此命令:
# dd if=/dev/zero of=/swapfile bs=1k count=2048k
接下来,将文件格式化为交换空间:
# mkswap /swapfile
然后激活交换空间:
# swapon /swapfile
为让系统重启后自动挂载,还需将其添加到文件系统分区表中:
# echo "/swapfile swap swap auto 0 0" | sudo tee -a /etc/fstab
最后,将 swappiness 参数调整为 10,确保交换内存在紧急情况下才被启用:
# sudo sysctl -w vm.swappiness=10
# echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
3. 安装 Discourse
Docker 准备就绪后,即可开始部署 Discourse。首先从官方 GitHub 仓库将代码克隆到 /var/discourse 目录下:
# mkdir /var/discourse/
# cd /var/discourse/
# git clone https://github.com/discourse/discourse_docker.git /var/discourse/
克隆完成后,复制一份独立的配置文件:
# cp samples/standalone.yml containers/app.yml

4. 配置 Discourse
现在,用你习惯的文本编辑器打开 containers/app.yml:
# nano containers/app.yml
将开发者邮箱地址替换为你自己的邮箱:
DISCOURSE_DEVELOPER_EMAILS: 'your-email@example.com'
设置主机名为你的服务器域名:
DISCOURSE_HOSTNAME: 'discourse.yourdomain.com'
配置 SMTP 服务器信息,Discourse 依赖它来发送邮件:
DISCOURSE_SMTP_ADDRESS: smtp.yourdomain.com
DISCOURSE_SMTP_PORT: 587 # (可选)
DISCOURSE_SMTP_USER_NAME: admin@yourdomain.com # (可选)
DISCOURSE_SMTP_PASSWORD: yourpassword # (可选)

如果服务器只有 1GB 内存,建议将 UNICORN_WORKERS 设为 2,dbshared_buffers 设为 128MB,这样能为系统留出更多可用内存。
这里需要特别说明:运行 Discourse 强制要求一个可用的邮件服务器。如果你已有现成的 SMTP 服务,直接填入认证信息即可;如果没有,可以前往 Mandrill、Mailgun 或 Mailjet 这类平台注册免费账号,获取对应的 SMTP 配置。
5. 启动 Discourse 应用
配置文件准备完成后,即可启动应用。首先在 /var/discourse/ 目录下运行引导程序:
# ./launcher bootstrap app

这一步会花费几分钟时间,它将自动完成整个 Discourse 环境的配置。引导过程结束后,接着启动应用:
# ./launcher start app

如果一切顺利,你就可以在浏览器中通过服务器 IP 或域名访问 Discourse 的 Web 界面了:https://ip-address/ 或 https://discourse.yourdomain.com/。接下来,注册一个新账号,它将自动成为管理员。

维护
日常管理与维护 Discourse 主要依赖 /var/discourse/ 目录下的 launcher 命令,以下是几个常用操作:
用法: launcher 命令 配置 [--skip-prereqs]
命令:
start: 启动/初始化一个容器
stop: 停止一个运行的容器
restart: 重启一个容器
destroy: 停止并删除一个容器
enter: 使用nsenter进入容器
ssh: 在运行的容器中启动一个bash shell
logs: 查看容器的Docker日志
mailtest: 在容器中测试邮件设置
bootstrap: 基于配置模版引导一个容器
rebuild: 重建容器(摧毁旧的,初始化,启动新的)
cleanup: 清理所有停止了24小时以上的容器
选项:
--skip-prereqs 不检查前置需求
--docker-args 当运行docker时,展开并传入参数
总结
至此,你已经成功通过 Docker 将 Discourse 运行起来。Docker 容器化技术让整个部署过程变得异常简洁——无论底层平台如何,所有依赖均被打包在内,真正实现了开箱即用。唯一的硬性要求是准备一个可用的邮件服务器或对应的 SMTP 凭据。对于现代社区、邮件列表或轻量级论坛来说,Discourse 确实是一个经得起验证的选择。
