在CentOS 7上面安裝redmine + nginx

首先必須要瞭解的是redmine是一個RoR(Ruby on rails)框架的應用程式,所以要安裝redmine的方法跟安裝一般ROR應用程式的方式差不多,但是裝在Nginx跟Apache HTTP Server上兩者確有相當大的不同。

如果你有看過一般的文件的話,執行ROR應用程式將成使用Passenger這個module,在Apache HTTP Server上面支援動態載入,但是Nginx並不支援,所以要讓Passenger可以在Nginx上面執行,須要重新編譯Nginx,在編譯的時候就指定要一起編譯Passenger,否則無法使用Passenger。

如果你透過yum安裝Nginx,不管是預設的repo或是epel的Nginx,都沒有支援Passenger,所以如果不想重新編譯Nginx的話,只有透過FastCGI跟Rack Server了。

什麼是Rack Server呢?根據Digital Ocean的定義,Rack Server的說明如下:

Similar to the products from other languages, applications developed using Ruby can be exposed to the World-Wide-Web through one of the many available web servers. While each one of them come with unique qualities and offer different possibilities to engineer the perfect solution, there is one thing in common these servers share: a way (an interface) to talk with your application called Rack.

簡單來說,Rack Server就是一個可以執行ROR應用程式的網站伺服器,透過Nginx的Reverse Proxy功能,使用者可以輕易地把Nginx當成前級的網站伺服器,然後把Rack Server當成後段的應用程式伺服器。

Rack Server有很選擇,包括Puma, Mongrel, Thin, Unicorn等等,這一篇文章要介紹的是Thin。

請先依照這裡的教學方式安裝Redmine,並且確認Redmine可以執行。

接著,用gem安裝thin:

安裝完成後可以執行

顯示thin的版本確認是否安裝正確。

接著,在/etc/init.d中建立啟動script:

注意,裡面的BUNDLE_CMD必須是系統bundle指令所在的位置,如果在CentOS 7上面安裝完成了Redmine,那麼bundler應該已經安裝完成了,可以在/usr/local/bin/bundle找到,不然,也可以輸入whereis bunle找到其路徑。

設定完成之後再設定thin來啟動Redmine的設定檔,在/etc/thin/redmine.conf中輸入以下yaml內容:

這裡面的重要設定說明如下:

chdir:RoR的安裝路徑,這裡設定為/usr/local/share/applications/redmine
group:執行RoR程式的群組
user:執行RoR程式的使用者名稱,注意,Redmine的安裝資料夾以下所有的owner必須設定為與這裡的群組和使用者相同,才能正確執行RoR程式。
socket:要與Nginx連接的Socket檔案路徑,這裡必須特別注意,根據官方網站的教學內容,Socket檔案是放在/tmp/之下,但是Nginx會在/tmp中找不到socket檔案,所以建議放到別的地方,例如:/run/redmine/thin.sock,注意資料夾權限,這個資料夾owner必須是跟user與group當中設定的一樣。

設定完成之後,啟動thin:

應該可以看到這樣的結果:

列出/run/redmine的資料內容,應該可以看到三個*.sock檔案:

根據之前readmine.conf檔的內容,thin會start三個process,分別使用3000, 3001與3002三個port number。

接下來設定Nginx(已經事先透過yum安裝)

在/etc/nginx/conf.d中建立一個proxy.conf:

然後再新增/etc/nginx/conf.d/redmine.conf的virtual host

其中root要指向redmine安裝位置的public資料夾,完成以後重新啟動Nginx:

然後開啟網站http://[your host name],這樣就完成了。

你也許希望密碼以及一些機密的部分可以透過https加密處理,可以查看參考資料中的內容。

參考資料:

  1. https://github.com/macournoyer/thin/
  2. http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Nginx_to_run_Redmine
  3. http://stackoverflow.com/questions/22272943/nginx-cannot-find-unix-socket-file-with-unicorn-no-such-file-or-directory