Discourse 中文完全安装指南
相关说明
Discourse 意为“谈话”,是由 Stack Overflow 的联合创始人 Jeff Atwood 推出的下一代开源论坛程序,关于它的介绍可以看看 OSChina 和 36Kr 的报道。目前,网络上还没有一份详细、全面的中文 Discourse 安装指南,ofGEEK 特此整理编写本文,希望能够对需要的人有所帮助。
更多有关信息与讨论,请访问 ofGEEK 讨论区 的 Discourse 分类(这个讨论区就是用 Discourse 搭建而成的)。
本指南在以下环境安装成功
- 一台安装 Ubuntu 12.10 x86 操作系统的 VPS 服务器
- 内存 1G (Discourse 官方推荐的最小值)
0 安装并测试 Discourse
注意:为了操作的安全,不推荐直接使用 root 账户安装 Discourse,建议在 VPS 上增加一个用户(本文设为 admin,你可以任意选择喜欢的名称),专门用于安装 Discourse。本文中,VPS 的主机名即为域名 ofgeek.com,读者请根据实际情况自行修改。
登录 VPS
用 root 登录 VPS,创建新用户 admin,并将其加入 sudo 组,以获取管理员权限。(关于登录 VPS 的方法,本文不做详细介绍,如有需要请自行查阅。Mac OS X 或 Linux 用户可以直接打开终端使用 ssh 进行连接。Windows 用户推荐使用 Xshell,非商业用途可免费使用)。
$ sudo adduser admin
$ sudo adduser admin sudo
退出 root 账户,用 admin 账户重新登录 VPS。
$ logout
$ ssh admin@ofgeek.com
更新 VPS 的操作系统:
$ sudo apt-get update
$ sudo apt-get upgrade
如果更新过程中,系统提示是否更新 grub 菜单,请选择不更新。
安装 Discourse 所需的包文件
$ sudo apt-get install git-core build-essential postgresql postgresql-contrib libxml2-dev libxslt-dev libpq-dev redis-server nginx postfix
在安装过程中,会弹出 Postfix 的配置界面,它是 Linux 系统中的邮件配置程序,一般情况下请选择"Internet Site"即可,然后在下一步输入你自己的域名,在本文中则是 ofgeek.com。
###设定主机名称
这里需要用到文本编辑器,你可以根据自己的喜好使用 vi、emacs 或其它,Ubuntu 12.10 系统里默认的是 nano。
$ sudo nano /etc/hosts
在第一行下面加入你的 VPS 的 IP 和域名,本文修改成:
127.0.0.1 localhost
12.34.56.78 ofgeek.com
确认无误后,按 Ctrl+x 保存,按 y 确认后退出。
配置数据库
Discourse 使用 Postgres 数据库。为数据库增加用户 admin,并设置好密码。请将密码保存好,后面的设置中还需用到。
$ sudo -u postgres createuser admin -s -P
# 按照系统提示,输入两遍密码
安装并配置 rvm 和 Ruby
本文使用 rvm 来安装和管理 Ruby 及相关的 Gem。
首先,安装 rvm,并将 admin 用户加入 rvm 组。
$ curl -L https://get.rvm.io | sudo bash -s stable
$ sudo adduser admin rvm
然后注销一次,再重新登录,使得变更生效,并激活 rvm。
$ logout
$ ssh@ofgeek.com
再安装 Ruby v1.9.3 并为 Discourse 创建一个 Gem 集。
$ rvm install 1.9.3
$ rvm use --default 1.9.3
$ rvm gemset create discourse
获取 Discourse 源代码并搭建安装环境
在 admin 的主目录里创建一个 source 目录,使用 git 获取 Discourse 的源代码放在其中,然后进入该目录。
$ mkdir source
$ cd source
$ git clone https://github.com/discourse/discourse.git
$ cd discourse
为 Discourse 指定版本 .ruby-version 和 Gem 集 .ruby-gemset:
$ echo "1.9.3" > .ruby-version
$ echo "discourse" > .ruby-gemset
退到 admin 主目录,然后再次进入 Discourse 目录,以激活 rvm。
$ cd ~ && cd ~/source/discourse
安装 Discourse 所需的 Gem:
$ bundle install
修改 Discourse 的相关配置文件
Discourse 所有的配置文件都放在 config 目录中,其中带有 sample 字样的都是范例文件,本文的安装方法需要修改 database.yml 和 redis.yml。
$ cd ~/source/discourse/config
$ cp ./database.yml.sample ./database.yml
$ cp ./redis.yml.sample ./redis.yml
$ nano ./database.yml
本文修改后的 database.yml 如下,请结合你的实际情况加以修改,记得将 production 数据库最后的主机名改为你自己的域名。
development:
adapter: postgresql
database: discourse_development
username: admin
password: 填入之前记下的数据库密码
host: localhost
pool: 5
timeout: 5000
host_names:
- "localhost"
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: postgresql
database: discourse_test
username: admin
password: 填入之前记下的数据库密码
host: localhost
pool: 5
timeout: 5000
host_names:
- test.localhost
# using the test db, so jenkins can run this config
# we need it to be in production so it minifies assets
production:
adapter: postgresql
database: discourse
username: admin
password: 填入之前记下的数据库密码
host: localhost
pool: 5
timeout: 5000
host_names:
- "ofgeek.com"
部署开发数据库并启动服务
为了确保 Discourse 的安装环境正确,在正式部署生产(production)模式之前,可以先启动开发模式(development)进行检测。
$ cd ~/source/discourse
# 进入开发模式
$ export RAILS_ENV=development
# 生成开发模式数据库
$ rake db:create
$ rake db:migrate
$ rake db:seed_fu
# 启动 thin 服务器器
$ thin start
此时,用浏览器打开 http://ofgeek.com:3000/,如果一切正确,那么你应该可以看到 Discourse 的开发模式界面了。确认无误后,按 Ctrl+c 停止 thin 服务器,并继续下一步。
1 部署生产模式
生产模式即正式运行的模式,在生产模式中,本文使用了以下服务:
- nginx 作为负载均衡
- thin 作为服务器
- sidekiq 负责任务排序
- clockwork 负责任务调度
- init.d 负责管理 nginx 和 thin
- Upstart 负责管理 sidekiq 和 clockwork
生产模式目录
Discourse 默认的生产模式目录为 /var/www,如果系统中没有,则新建一个,将其加入 www-data 组,并设置相应权限。
$ sudo mkdir /var/www
$ sudo chgrp www-data /var/www
$ sudo chmod g+w /var/www
修改 nginx 配置文件
nginx 的范例配置文件也在 config 目录中,仅需将其中的 server_name 改为你自己的域名即可。
$ cd ~/source/discourse/
& nano config/nginx.sample.conf
# 改完后将其复制到 nginx 配置文件目录中,并改名为 discourse.conf
$ sudo cp config/nginx.sample.conf /etc/nginx/sites-available/discourse.conf
# 建立一个符号连接
$ sudo ln -s /etc/nginx/sites-available/discourse.conf /etc/nginx/sites-enabled/discourse.conf
# 删除其它所有 nginx 的默认配置文件
$ sudo rm /etc/nginx/sites-enabled/default
生成密钥会话令牌
$ rake secret
将生成的密钥记下来,打开 config/initializers/secret_token.rb 文件
$ nano config/initializers/secret_token.rb
执行以下步骤:
- 清空该文件中的所有已有内容
- 将下面这行代码拷贝到该文件中,用刚才生成的密钥代替 [TOKEN] 部分
Discourse::Application.config.secret_token = "[TOKEN]"
建立生产模式数据库并编译源文件
$ export RAILS_ENV=production
# 生成数据库
$ rake db:create
# 导入初始化数据
$ psql discourse < pg_dumps/production-image.sql
$ rake db:migrate
$ rake db:seed_fu
# 编译源文件
$ rake assets:precompile
设定邮件发送方式
Discourse 中,系统邮件是非常重要的,它涉及到激活用户、修改邮箱、修改密码等多项功能。如果你希望用 VPS 本身发送邮件,则需安装 sendmail(具体设置方法请自行查阅):
$ sudo apt-get install sendmail
如果你已经有了邮件服务器,则可以通过 smtp 服务发送系统邮件,本文以 Gmail 为例。
修改 config/environments/production.sample.rb 文件:
$ cp config/environments/production.sample.rb config/environments/production.rb
& nano config/environments/production.rb
修改其中有关邮件发送的部分,本文中如下:
#config.action_mailer.delivery_method = :sendmail
#config.action_mailer.sendmail_settings = {arguments: '-i'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'mail.google.com',
:user_name => 'xxx@gmail.com',
:password => 'password',
:authentication => 'plain',
:enable_starttls_auto => true }
将 Discourse 部署到 /var/www
$ sudo -u www-data cp -r ~/source/discourse/ /var/www
$ sudo -u www-data mkdir /var/www/discourse/tmp/sockets
配置 thin 服务器
$ cd /var/www/discourse
$ rvmsudo thin install
$ rvmsudo thin config -C /etc/thin/discourse.yml -c /var/www/discourse --servers 4 -e production
$ rvm wrapper 1.9.3@discourse bootup thin
配置文件生成后,需要修改 /etc/thin/discourse.yml 文件,将其中的:
port: 3000
修改为:
socket: tmp/sockets/thin.sock
还需修改 thin 的初始化脚本:
$ sudo vi /etc/init.d/thin
将 DAEMON= 那一行改为:
DAEMON=/usr/local/rvm/bin/bootup_thin
配置 sidekiq 和 clockwork
安装 foreman:
$ gem install foreman
修改 Rails 环境,为 Discourse 优化垃圾回收机制
& sudo nano /var/www/discourse/.env
修改成这样:
PORT=3000
RAILS_ENV=production
RUBY_GC_MALLOC_LIMIT=90000000
生成 Upstart 配置文件:
$ rvmsudo foreman export upstart /etc/init -a discourse -u www-data
本文使用 init.d 来管理 thin 服务器,所以不需要 Upstart 生成的 thin 相关配置文件,将其删除:
$ sudo rm /etc/init/discourse-web*
为 sidekiq 和 clockwork 生成 rvm 封装:
$ rvm wrapper 1.9.3@discourse bootup sidekiq
$ rvm wrapper 1.9.3@discourse bootup clockwork
修改 /etc/init/discourse-clockwork-1.conf 和 /etc/init/discourse-sidekiq-1.conf 文件,便于使用 rvm 来管理:
discourse-clockwork-1.conf 修改后如下:
start on starting discourse-clockwork
stop on stopping discourse-clockwork
respawn
exec su - www-data -c 'cd /var/www/discourse; export PORT=5200; /usr/local/rvm/bin/bootup_clockwork config/clock.rb >> /var/log/discourse/clockwork-1.log 2>&1'
discourse-sidekiq-1.conf 修改后如下:
start on starting discourse-sidekiq
stop on stopping discourse-sidekiq
respawn
exec su - www-data -c 'cd /var/www/discourse; export PORT=5100; /usr/local/rvm/bin/bootup_sidekiq -e production >> /var/log/discourse/sidekiq-1.log 2>&1'
启动所有服务
$ cd /var/www/discourse
$ sudo service thin start
$ sudo service nginx start
$ sudo start discourse
$ sudo clockworkd -c config/clock.rb start
$ bundle exec sidekiq -d -L ~/source/discourse/log/sidekiq.log
到这里,生产模式就部署完成了。此时用浏览器打开 http://www.ofgeek.com ,就能看到正式的 Discourse 界面。论坛管理员的初始用户名和密码分别是:
username: forumadmin
password: password
登录进去之后,改为更加安全的密码。
启用中文支持
目前,Discourse 已经可以支持中文界面,使用管理员账户登录后,点击右上角的管理员名称进入设置界面,然后再点击右上角的小扳手 Admin 进入系统管理界面,在第二项 Settings 中,把 default_locale 从默认的 en 更改为 zh_CN,然后返回论坛主界面,按 Ctrl+F5 刷新浏览器缓存,中文界面就出来了。
现在,开始享受你的 Discourse 之旅吧!
2 升级 Discourse
由于 Discourse 目前仍处于 beta 测试阶段,文件升级更新非常频繁,建议经常升级以保持最佳状态。
停止相关服务
$ sudo stop discourse
$ sudo service nginx stop
$ sudo service thin stop
更新、编译并部署源文件
$ cd ~/source/discourse
$ git pull
$ bundle install
$ export RAILS_ENV=production
$ rake db:migrate db:seed_fu assets:clean assets:precompile
$ sudo rm -r -f /var/www/discourse/.git
$ sudo -u www-data cp -r ~/source/discourse /var/www
重新启动相关服务
$ sudo service thin start
$ sudo service nginx start
$ sudo start discourse
3 致谢
本指南基于以下资源创建,特此表示感谢:
- Discourse 官方开发者指南。
- Christopher Baus 的 Discourse 安装指南(英文)。
- Lee Dohm 的 Discourse 安装指南(英文)。
- surrealroad 的 Discourse 安装指南(英文)。
本指南遵循创作共用协议,欢迎转载,请注明出处及原始链接。
© ofgeek.com 最初发布于 2013.5.21 。