快2个月没写博客,最近一个是忙着开发docker平台,另外一个是接手了公司私有云,所以比较忙。
公司最近有个新项目,想弄个技术的问答论坛,挑选了半天,选择ruby语言的discourse,这个是完全开源的,界面简洁,支持中文,有管理后台,满足需求。
界面如下
系统环境
官方推荐使用ubuntu,并且安装的程序也是支持ubuntu系统,docker安装模式,所以我选择了云主机ubuntu 14.04系统,discourse是最新的1.5.0版本。
1、更新源
1
<code>apt-get update</code>
2、安装依赖软件
<code>apt-get </code><code>install</code> <code>ruby git</code>
3、安装docker
<code>wget -qO- https:</code><code>//get</code><code>.docker.com/ | sh</code>
安装完成后可以使用docker version查看
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<code>root@i-chxjfvpy:</code><code>/tmp</code><code># docker version</code>
<code>Client:</code>
<code> </code><code>Version: 1.9.1</code>
<code> </code><code>API version: 1.21</code>
<code> </code><code>Go version: go1.4.2</code>
<code> </code><code>Git commit: a34a1d5</code>
<code> </code><code>Built: Fri Nov 20 13:12:04 UTC 2015</code>
<code> </code><code>OS</code><code>/Arch</code><code>: linux</code><code>/amd64</code>
<code>Server:</code>
当前我的是1.9.1版本
4、安装discourse
<code>mkdir</code> <code>/data/discourse</code>
<code>git clone https:</code><code>//github</code><code>.com</code><code>/discourse/discourse_docker</code><code>.git </code><code>/data/discourse</code>
<code>cd</code> <code>/data/discourse</code>
<code>cp</code> <code>samples</code><code>/standalone</code><code>.yml containers</code><code>/app</code><code>.yml</code>
ps:默认官方是放入/var目录里,我这里放入/data是因为这个目录是我云主机挂载的盘
<code>root@i-chxjfvpy:~</code><code># df -h</code>
<code>Filesystem Size Used Avail Use% Mounted on</code>
<code>/dev/vda1</code> <code>18G 1.8G 15G 11% /</code>
<code>none 4.0K 0 4.0K 0% </code><code>/sys/fs/cgroup</code>
<code>udev 3.9G 8.0K 3.9G 1% </code><code>/dev</code>
<code>tmpfs 799M 412K 799M 1% </code><code>/run</code>
<code>none 5.0M 0 5.0M 0% </code><code>/run/lock</code>
<code>none 3.9G 0 3.9G 0% </code><code>/run/shm</code>
<code>none 100M 0 100M 0% </code><code>/run/user</code>
<code>/dev/vdb1</code> <code>193G 60M 183G 1% </code><code>/data</code>
5、修改discourse配置
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<code>root@i-chxjfvpy:</code><code>/data/discourse</code><code># grep -v "^ #" containers/app.yml |grep -v "^#"|sed '/^$/d'</code>
<code>templates:</code>
<code> </code><code>- </code><code>"templates/postgres.template.yml"</code>
<code> </code><code>- </code><code>"templates/redis.template.yml"</code>
<code> </code><code>- </code><code>"templates/web.template.yml"</code>
<code> </code><code>- </code><code>"templates/sshd.template.yml"</code>
<code> </code><code>- </code><code>"templates/web.ratelimited.template.yml"</code>
<code> </code><code>- </code><code>"templates/web.china.template.yml"</code>
<code>expose:</code>
<code> </code><code>- </code><code>"80:80"</code> <code># fwd host port 80 to container port 80 (http)</code>
<code> </code><code>- </code><code>"2222:22"</code> <code># fwd host port 2222 to container port 22 (ssh)</code>
<code>params:</code>
<code> </code><code>db_default_text_search_config: </code><code>"pg_catalog.english"</code>
<code> </code><code>db_shared_buffers: </code><code>"2GB"</code>
<code> </code><code>db_work_mem: </code><code>"40MB"</code>
<code>env</code><code>:</code>
<code> </code><code>LANG: en_US.UTF-8</code>
<code> </code><code>UNICORN_WORKERS: 6</code>
<code> </code><code>DISCOURSE_DEVELOPER_EMAILS: </code><code>'[email protected]'</code>
<code> </code><code>DISCOURSE_HOSTNAME: </code><code>'discuss.xxx.net'</code>
<code> </code><code>DISCOURSE_SMTP_ADDRESS: smtp.163.com </code><code># (mandatory)</code>
<code> </code><code>DISCOURSE_SMTP_PORT: 25 </code><code># (optional)</code>
<code> </code><code>DISCOURSE_SMTP_USER_NAME: xxx </code><code># (optional)</code>
<code> </code><code>DISCOURSE_SMTP_PASSWORD: 123123 </code><code># (optional, WARNING the char '#' in pw can cause problems!)</code>
<code> </code><code>DISCOURSE_SMTP_AUTHENTICATION: login</code>
<code> </code><code>DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none</code>
<code> </code><code>DISCOURSE_SMTP_ENABLE_START_TLS: </code><code>false</code> <code># (optional, default true)</code>
<code>volumes:</code>
<code> </code><code>- volume:</code>
<code> </code><code>host: </code><code>/data/discourse/shared/standalone</code>
<code> </code><code>guest: </code><code>/shared</code>
<code> </code><code>host: </code><code>/data/discourse/shared/standalone/log/var-log</code>
<code> </code><code>guest: </code><code>/var/log</code>
<code>hooks:</code>
<code> </code><code>after_code:</code>
<code> </code><code>- </code><code>exec</code><code>:</code>
<code> </code><code>cd</code><code>: $home</code><code>/plugins</code>
<code> </code><code>cmd:</code>
<code> </code><code>- git clone https:</code><code>//github</code><code>.com</code><code>/discourse/docker_manager</code><code>.git</code>
<code>run:</code>
<code> </code><code>- </code><code>exec</code><code>: </code><code>echo</code> <code>"Beginning of custom commands"</code>
<code> </code><code>- </code><code>exec</code><code>: </code><code>echo</code> <code>"End of custom commands"</code>
<code> </code><code>- </code><code>exec</code><code>: </code><code>awk</code> <code>-F\</code><code># '{print $1;}' ~/.ssh/authorized_keys | awk 'BEGIN { print "Authorized SSH keys for this container:"; } NF>=2 {print $NF;}'</code>
下面是需要修改的
<code>DISCOURSE_DEVELOPER_EMAILS是你邮件地址;</code>
<code>DISCOURSE_HOSTNAME是你web端打开的地址,可以是公网IP,也可以是dns域名;</code>
<code>DISCOURSE_SMTP_ADDRESS、DISCOURSE_SMTP_PORT、DISCOURSE_SMTP_USER_NAME、DISCOURSE_SMTP_PASSWORD是你邮箱信息,这个邮箱是用户注册或其他行为时,发送给用户进行验证的邮箱,其中密码DISCOURSE_SMTP_PASSWORD里不能包含</code><code>#,否则会被识别有问题;</code>
<code>默认authentication是plain,但我测试使用163邮箱的话,无法登陆,所以改为login;</code>
<code>默认enable_starttls_auto是开启tls验证,我这里也给改为</code><code>false</code><code>;</code>
<code>另外在template里加入一行</code>
<code>不加入的话,默认使用ruby的库是国外的ruby.org镜像源,加上这个后是使用国内taobao的ruby镜像源</code>
<code>具体配置参考注释,比如db_shared_buffers、db_work_mem、UNICORN_WORKERS根据你内存来配置。</code>
6、生成镜像
默认是先下载一个公共的discourse/discourse镜像,然后会根据你的配置生成一个本地的镜像local_discourse/app,如下
<code>root@i-su8g5dng:</code><code>/tmp</code><code># docker images</code>
<code>REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE</code>
<code>local_discourse</code><code>/app</code> <code>latest 4272aa220d69 2 hours ago 1.877 GB</code>
<code>discourse</code><code>/discourse</code> <code>1.0.15 cb7b58c22b11 2 weeks ago 1.265 GB</code>
下面是生成的命令
<code>.</code><code>/launcher</code> <code>bootstrap app</code>
<code>86c397191c205624ded7181c06b1d73ea1856abe126a717354dc308d2964282a</code>
<code>cfbab5cb2ff9745616cb0e604c47644d2a7041445fda6b0da0aa697714bf466b</code>
<code>Successfully bootstrapped, to startup use .</code><code>/launcher</code> <code>start app</code>
<code>root@i-chxjfvpy:</code><code>/data/discourse</code><code># ./launcher start app</code>
然后使用./launcher start app启动
<code>root@i-chxjfvpy:</code><code>/data/discourse</code><code># docker ps -a</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>d0b519f15db7 local_discourse</code><code>/app</code> <code>"/sbin/boot"</code> <code>35 seconds ago Up 33 seconds 0.0.0.0:80->80</code><code>/tcp</code><code>, 0.0.0.0:2222->22</code><code>/tcp</code> <code>app</code>
之后直接在web里输入域名或者ip就可以直接访问
7、配置管理员用户
参考https://meta.discourse.org/t/create-admin-account-from-console/17274
或者直接按照下面操作
进入容器
<code>.</code><code>/launcher</code> <code>enter app</code>
创建管理员账户
<code>rake admin:create</code>
下面是官方的介绍
<code>You will be asked </code><code>for</code> <code>Email, Password and Confirm Password.</code>
<code>After providing required information a new account will be created with random username.</code>
<code>Now you will be asked: Do you want to grant Admin privileges to this account? (Y</code><code>/n</code><code>). Press enter to </code><code>continue</code><code>.</code>
<code>You will see success message: Your account now has Admin privileges!.</code>
<code>That's it, you have created a new account with Admin privileges.</code>
8、登陆验证
<a href="http://s1.51cto.com/wyfs02/M00/77/73/wKioL1Zn-JCy7RJGAAEsh96Zcfw349.png" target="_blank"></a>
登陆后的界面为
<a href="http://s4.51cto.com/wyfs02/M00/77/74/wKiom1Zn-EWRIZcoAAHoeVqGaJA410.png" target="_blank"></a>
9、修改为中文界面
<a href="http://s5.51cto.com/wyfs02/M01/77/74/wKiom1Zn-H-AO6GpAAGg4Y16mRE683.png" target="_blank"></a>
修改后刷新,然后显示为
<a href="http://s4.51cto.com/wyfs02/M01/77/74/wKiom1Zn-JOjHz7WAAHyj-nHK-k875.png" target="_blank"></a>
10、FAQ
如果遇到无法发送验证邮件,检测问题为
553 Mail from must equal authorized user
<a href="http://s3.51cto.com/wyfs02/M00/77/74/wKiom1Zn-NKw_k82AAFiZ_e6X1w855.png" target="_blank"></a>
本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1721248,如需转载请自行联系原作者