Discourse 安装指南

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

  1. 使用 64 位的 Linux 系统。
  2. 升级或者安装最新版的 Docker。Ubuntu 的 Docker 安装指南
  3. 为 Discourse Docker 创建一个目录。推荐(/var/docker)。运行 install -g docker -m 2775 -d /var/docker
  4. 之后的操作以管理员或者 docker 用户组的成员进行。将用户账户添加到 docker 用户组的命令为:usermod -a -G docker yourusername,之后请重新登入。

开始安装

  1. 在服务器上运行 git clone https://github.com/discourse/discourse_docker.git /var/docker 克隆配置文件。
  2. /var/docker 中复制独立模式的配置文件到 containers 目录下 cp samples/standalone.yml containers/app.yml。这里的 app 可以换成你想要的任何名字,同理在后面操作的时候要用你选择的名字。
  3. 配置 containers/app.yml。(见后文)
  4. 运行 sudo ./launcher bootstrap app
  5. 启动 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.ymlweb_only.yml 模板。为了简化安装,launcher 将会在映像中注入一个 DISCOURSE_HOST_IP 的环境变量。
警告:在多站点配置中,确定配置好 iptables 或者其他的防火墙为 postgresql 和 redis 保护他们使用的端口。在 Ubuntu 上,安装 ufwiptables-persistent 包来管理防火墙规则。

多容器配置请参考这个主题

SSL

请参考这个主题

排错

可以 SSH 登入至容器:./launcher ssh my_container。初始化容器时将自动配置 ssh 登入信息。

其他方案

Digital Ocean

对照上文的安装方案,整体流程是一样的。GitHub 上的教程

托管方案

Discourse 有托管服务。国内目前还没有。

安装后配置

默认的主题标题和内容字符限制应该是第一个要更改的东西,根据需要调整一下。

升级

访问 /admin/docker,看到升级按钮点了即可。

已知问题

  • 前几周把简体中文的翻译都做完了。有什么不对的、不合适的可以联系我,或在 Transifex 上更改,或在 Meta 上指出。
  • 繁体中文可以从简体中文转换一下,应该能节省不少时间了。
  • 搜索功能与 postgresql 的 locale 设置有关,没有设置成指定语言就没法工作,考虑用 ElasticSearch,不知道 1.0.0 前能否完成。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 13,576评论 0 120
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,040评论 6 342
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 5,787评论 0 7
  • 我从去年开始就接触了手账,但直到今年年初才决心买一本手账本,因为手账本真的很贵啊,花了几百块人民币买完本子之后,我...
    探微成长笔记阅读 7,636评论 16 118