0°

Discourse论坛安装配置

Discourse是Stack Overflow的联合创始人Jeff Atwood推出的一个新的开源论坛项目,其目的是为了改变十年未变的论坛软件。它摒弃了传统论坛的话题讨论形式、拥有自学习系统、全Web应用同时适用于桌面和移动终端。基于Ruby on Rails和Ember.js开发,数据库使用PostgreSQL和Redis。

Discourse官方推荐的是Ubuntu系统,而且在Ubuntu上的安装部署相对于其它linux系统比较简单容易,不会出现一些权限环境依赖问题,最好是在Ubuntu系统上安装部署。

本安装过程是在以下系统环境和软件版本安装部署:
OS:CentOS 6.2 32Bit
Discourse:0.9.4
PostgreSQL:9.2.4
Redis:2.6.14
Ruby:2.0.0
注:官方推荐内存最小为1G,教程里其它依赖软件包的安装不做说明,请先安装好需要的软件包,其它软件的安装方法可在本站搜索。
注:官方推荐安装方法的用户身份为非ROOT用户,本教程是以ROOT用户身份安装部署,在CentOS上非ROOT用户安装配置后会有权限等问题。

设定主机名称

#vi /etc/hosts
192.168.1.100	linuxnote.org	//修改为自己的IP和域名

添加数据库用户

如果PostgreSQL数据库里已经有用户可用,无需再添加。

#su - postgresql	//切换到postgresql数据库用户环境postgresql为数据库运行用户
#createuser discourse -s -P	//创建用户名为discourse的用户
#exit	//创建用户后退出postgresql数据库用户环境

Rvm和Ruby安装配置

注:Rvm是用来管理Ruby和Gem的,也可以不需要安装Rvm。这里建议在CentOS上先源码编译安装Ruby。如果通过Rvm安装Ruby的话,在CentOS上Ruby版本没有2.0版,并且最后启动服务时会提示无法找到Ruby,这里是因为Rvm将相关的软件包安装在它自己的目录下,不会在系统bin目录下创建相关启动文件,但是可以通过配置用户环境变量解决这个问题。本教程安装时已在系统上源码编译安装了Ruby。

安装rvm

#curl -L https://get.rvm.io

安装Ruby 2.0.0并为Discourse创建一个Gem集

#rvm install 2.0.0
#rvm use --default 2.0.0
#rvm gemset create discourse

Discourse安装配置

#git clone https://github.com/discourse/discourse.git
#cd discourse

为Discourse指定版本.ruby-version和Gem集.ruby-gemset


#echo "2.0.0" > .ruby-version
#echo "discourse" > .ruby-gemset

安装Discourse所需的Gem

#bundle install

注:如果服务器在国内建议将Gem源修改为淘宝的镜像,可参考:http://ruby.taobao.org/
Discourse配置

#pwd	//确认当前路径是在discourse源码目录下
#cp config/database.yml.sample config/database.yml
#cp config/redis.yml.sample config/redis.yml

修改Discourse数据库配置文件

#vi config/database.yml
development:
  adapter: postgresql
  database: discourse_development
  username: discourse
  password: 数据库用户discourse的密码
  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: discourse
  password: 数据库用户discourse的密码
  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: discourse
  password: 数据库用户discourse的密码
  host: localhost
  pool: 5
  timeout: 5000
  host_names:
    - "linuxnote.org"	//修改为自己的域名

初始化开发数据库并启动服务
注:Discourse提供开发模式和生产模式,在启动生产模式前先启动开发模式来检查是否安装正确。

#rake db:create db:migrate db:seed_fu RAILS_ENV=development	//初始化数据库并设置为开发模式
#thin start	//启动服务

通过http://linuxnote.org:3000访问Discourse,不出意外即可看到Discourse,确认正常后Ctrl+c停止服务,继续部署生产模式。

部署生产模式

注:生产模式是以nginx作为负载均衡,所以需事先安装好nginx,安装过程可从本站搜索。nginx等相关配置请根据实际环境配置修改。
创建生产模式目录即站点目录

#mkdir /data1/htdocs/discourse	//discourse站点目录
#chown -R www:www /data1/htdocs/discourse	//修改权限

添加nginx配置文件

#cp config/nginx.sample.conf	/usr/local/nginx/conf/extra/discourse.conf
#vi /usr/local/nginx/conf/extra/discourse.conf	//修改配置

以下为discourse.conf需修改的地方,其它省略。

server unix:/data1/htdocs/discourse/tmp/sockets/thin.0.sock;	//修改sosckets文件存放位置,此处可配置启动多个thin服务进程。
server unix:/data1/htdocs/discourse/tmp/sockets/thin.1.sock;
server_name www.linuxnote.org;	//修改域名
root /data1/htdocs/discourse/public;	//修改公共文件目录
#vi /usr/local/nginx/conf/nginx.conf	//加载discourse.conf文件
include extra/discourse.conf;
#/usr/local/nginx/sbin/nginx -t	//测试是否配置有误
#/usr/local/nginx/sbin/nginx -s reload	//重新加载配置

生成密钥会话令牌

#rake secret

将生成的密钥复制下来

#vi config/initializers/secret_token.rb
//清空该文件中的所有已有内容
//将下面这行代码拷贝到该文件中,用刚才生成的密钥代替[TOKEN]部分。
Discourse::Application.config.secret_token = "[TOKEN]"

建立生产模式数据库并编译源文件

#export RAILS_ENV=production
#rake db:create
#rake db:migrate
#rake db:seed_fu
#rake assets:precompile

设定邮件发送方式

#cp config/environments/production.sample.rb config/environments/production.rb
#vi config/environments/production.rb	//根据实际情况修改以下内容
//不是使用sendmail发邮件的话讲以下两行注释
#config.action_mailer.delivery_method = :sendmail
#config.action_mailer.sendmail_settings = {arguments: '-i'}
//通过第三方smtp发送邮件
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到站点目录

#cp -r ./* /data1/htdocs/discourse
#mkdir -p /data1/htdocs/discourse/tmp/sockets	//thin.sock文件存放位置
#mkdir -p /data1/htdocs/discourse/log	//日志文件存放位置
#chown -R www:www /data1/htdocs/discourse

配置thin服务器

#cd /data1/htdocs/discourse
#rvm thin install
#thin config -C /etc/thin/discourse.yml -c /data1/htdocs/discourse --servers 2 -e production
#rvm wrapper 2.0.0@discourse bootup thin

修改配置

#vi /etc/thin/discourse.yml	//以下内容根据实际情况修改
---
chdir: /data1/htdocs/discourse
environment: production
address: localhost
socket: /data1/htdocs/discourse/tmp/sockets/thin.sock
timeout: 30
log: /data1/htdocs/discourse/log/thin.log
pid: /data1/htdocs/discourse/tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
servers: 1
daemonize: true
#vi /etc/init.d/thin	//将DAEMON修改为以下内容
DAEMON=/usr/local/rvm/bin/bootup_thin

配置sidekiq和clockwork

#gem install foreman	//安装foreman
#rvm foreman export upstart /etc/init -a discourse	//生成Upstart配置文件
#rm /etc/init/discourse-web*

为sidekiq和clockwork生成rvm封装

#rvm wrapper 2.0.0@discourse bootup sidekiq
#rvm wrapper 2.0.0@discourse bootup clockwork

修改/etc/init/discourse-clockwork-1.conf和/etc/init/discourse-sidekiq-1.conf文件

#vi /etc/init/discourse-clockwork-1.conf  //discourse-clockwork-1.conf文件内容
start on starting discourse-clockwork
stop on stopping discourse-clockwork
respawn
exec su - root -c 'cd /data1/htdocs/discourse; export PORT=5200; export RUBY_GC_MALLOC_LIMIT=90000000; /usr/local/rvm/bin/bootup_clockwork config/clock.rb >> /var/log/discourse/clockwork-1.log 2>&1'
#vi /etc/init/discourse-sidekiq-1.conf  //discourse-sidekiq-1.conf文件内容
start on starting discourse-sidekiq
stop on stopping discourse-sidekiq
respawn
exec su - root -c 'cd /data1/htdocs/discourse; export PORT=5100; export RUBY_GC_MALLOC_LIMIT=90000000; /usr/local/rvm/bin/bootup_sidekiq -e production >> /var/log/discourse/sidekiq-1.log 2>&1'

启动服务

/etc/rc.d/thin start
start discourse

设置管理员帐号

先访问discourse注册一个帐号并通过邮箱激活。

#cd /data1/htdocs/discourse
#bundle exec rails c production
2.0.0p247 :001 >u = User.first
2.0.0p247 :001 >u.admin = true
2.0.0p247 :001 >u.save
2.0.0p247 :001 >exit

参考:
http://www.ofgeek.com/2013/05/chinese-guide-on-discourse-install/
https://github.com/baus/install-discourse

效果: 问答社区

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
数据库
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论