This is a Simplified Chinese tutorial about Discourse installation.
<small>文章在知识共享 署名-相同方式共享 3.0协议之条款下提供。原文见此。</small>
EDIT:目前已经将几乎所有官方论坛的指南都翻译到了一个中文论坛,用来做本地化的支持。比如30 分钟内在 Digital Ocean 上部署 Discourse。
Discourse 已经相当接近 1.0.0,大部分功能都比较成熟了。这篇文章将主要介绍如何用 Docker 安装 Discourse,以及其他一些安装方案。我将持续更新这篇文章。
介绍
Discourse 是一个为下一个十年的互联网准备的论坛程序。到沙盒试试。
你可以在 GitHub 找到官方的安装指南。官方将只支持 Docker 安装方案。
硬件要求
- 推荐双核 CPU
- 最少 1 GB 内存(加上交换空间),推荐至少 2 GB;实际上 512 MB 也可以安装,估计不会好过。
Docker 安装方案
简介
官方 Docker 安装指南请至 GitHub。这里将提供一个在一台服务器上安装所有部件(数据库、Ruby 各种依赖)的指南。
- Docker 是一个用于打包、部署并运行 Linux 应用的一个新项目。容器比传统的虚拟机方案更轻量和快速。
- Docker 让部署和更新 Discourse 论坛变得简单。
- 能够以官方团队推荐的最优设置配置 Discourse。
安装前准备:安装 Docker
- 使用 64 位的 Linux 系统。
- 升级或者安装最新版的 Docker。Ubuntu 的 Docker 安装指南。
- 为 Discourse Docker 创建一个目录。推荐(
/var/docker
)。运行install -g docker -m 2775 -d /var/docker
。 - 之后的操作以管理员或者 docker 用户组的成员进行。将用户账户添加到 docker 用户组的命令为:usermod -a -G docker yourusername,之后请重新登入。
开始安装
- 在服务器上运行
git clone https://github.com/discourse/discourse_docker.git /var/docker
克隆配置文件。 - 在
/var/docker
中复制独立模式的配置文件到 containers 目录下cp samples/standalone.yml containers/app.yml
。这里的 app 可以换成你想要的任何名字,同理在后面操作的时候要用你选择的名字。 - 配置
containers/app.yml
。(见后文) - 运行
sudo ./launcher bootstrap app
- 启动
sudo ./launcher start app
目录结构
/cids
包含了当前运行的 Docker 容器的 id。Docker 中的 cid 就相当于 pid。每一个容器有一个独特的哈希。
/containers
这个目录用于存放不同的 Discourse 容器配置文件。该目录由你管理,默认为空。
/samples
样例容器配置文件,你可以用来初始化环境。你可以将其复制到 containers 目录里更改。
/shared
用于 Discourse 容器的共享目录。你可以将部分持久信息存在容器之外。我们将日志文件和上传文件的目录放在容器外。这能帮助你更方便重建容器而不会损失重要的信息。让上传文件的目录放在容器外也能让你在多个 web 实例运行时共享他们。
/templates
用于初始化的模板文件。
/image
用于 samsaffron/discourse_base 和 samsaffron/discourse 的 Dockerfile。
samsaffron/discourse_base 包含了所有与操作系统有关的依赖,包括 sshd、runit、postgres、nginx 和 ruby。
samsaffron/discourse 构建基础映像并且配置用户 discourse,将 Discourse 源代码放于 /var/www/discourse。
Docker 库中将永远包含最新的基础映像版本,位于:https://index.docker.io/u/samsaffron/discourse/ ,你绝不该自己构建基础映像。
容器配置
templates
templates:
- "templates/cron.template.yml"
- "templates/postgres.template.yml"
最终的模板是在这一系列的模板中组合起来的,你可以自己增加他们。
expose
expose:
- "2222:22"
- "127.0.0.1:20080:80"
暴露容器内的 22 端口至所有本地主机接口的 2222 端口。若想绑定至一个接口,你可以按照 [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp]
的格式定义规则,详情查看 Docker 端口绑定的文档。
volumes
volumes:
- volume:
host: /var/docker/shared
guest: /shared
将容器内的目录暴露至主机。
env
## List of comma delimited emails that will be made admin on signup
DISCOURSE_DEVELOPER_EMAILS: 'my-email-address@example.com'
在这里输入用逗号分隔的邮件地址,注册后这些用户将拥有管理员权限。
## The domain name this Discourse instance will respond to
DISCOURSE_HOSTNAME: 'discourse.example.com'
设置 Discourse 的域名
## The mailserver this Discourse instance will use
DISCOURSE_SMTP_ADDRESS: smtp.example.com # (mandatory)
# DISCOURSE_SMTP_PORT: 587 # (optional)
# DISCOURSE_SMTP_USER_NAME: user@example.com # (optional)
# DISCOURSE_SMTP_PASSWORD: p@ssword # (optional)
邮件通知是 Discourse 的一个主要功能,你需要配置他们。你可以选择安装 postfix 并且自己配置他们,但是会比较麻烦。
推荐使用 Mandrill,需要翻墙。注册后创建一个 API,再按照 Mandrill 里的信息来填写。Mandrill 中可以查看到发送错误的日志,出问题可以去查看一下。
DISCOURSE_SMTP_ADDRESS: smtp.mandrillapp.com
DISCOURSE_SMTP_PORT: 587 # 使用 SSL 的话,阅读一下 Mandrill 的帮助
DISCOURSE_SMTP_USER_NAME:
DISCOURSE_SMTP_PASSWORD:
locale
目前还没支持,所以默认装的是英文版。管理员登入后在后台改成简体中文即可,但是自动生成的几个主题将会是英文的。
单容器 vs 多容器
samples 目录包含了一个 standalone 模板用于单容器安装。其中包含了在单一容器中安装 Discourse 的所有文档。优点是比较简单。
多容器配置更灵活、强大,但也更难配置。多容器能让你:
- 升级新版本 Discourse 时降低下线时间。你可以在更新后初始化新的 web 进程,再切换过去。
- 使用多个服务器均衡负载。
- 增加服务器冗余。
- 将某些服务(如数据库)运行在特定硬件上。
如果你想要使用多容器安装,看一看 sample 目录的 data.yml
和 web_only.yml
模板。为了简化安装,launcher
将会在映像中注入一个 DISCOURSE_HOST_IP
的环境变量。
警告:在多站点配置中,确定配置好 iptables 或者其他的防火墙为 postgresql 和 redis 保护他们使用的端口。在 Ubuntu 上,安装 ufw
或 iptables-persistent
包来管理防火墙规则。
多容器配置请参考这个主题。
SSL
请参考这个主题。
排错
可以 SSH 登入至容器:./launcher ssh my_container
。初始化容器时将自动配置 ssh 登入信息。
其他方案
Digital Ocean
对照上文的安装方案,整体流程是一样的。GitHub 上的教程。
托管方案
Discourse 有托管服务。国内目前还没有。
安装后配置
默认的主题标题和内容字符限制应该是第一个要更改的东西,根据需要调整一下。
升级
访问 /admin/docker,看到升级按钮点了即可。
网友评论