天天看點

開源論壇之discourse搭建

快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&gt;=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-&gt;80</code><code>/tcp</code><code>, 0.0.0.0:2222-&gt;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,如需轉載請自行聯系原作者