CentOS 6 – Redmine 2.6 一套專業的專案管理流程系統 + Nginx 整合

2015-09-02 Redmine

目前的公司有專案管理流程、甘特圖的需求,搜尋許多都沒辦法符合需求,最後想到前公司使用的是 redmine 當作專案管理系統,可以清楚的紀錄每項工作專案的執行作業,也可以讓老闆知道其實我們的工作量很大啦

 

 

Redmine 是一套基於 GPL 授權的系統,底層架構為 Ruby on Rails,小弟在安裝的過程中不是很順利,履遇狀況,在官網的 Document 寫的也很籠統,並沒有一個完整的文件內容,在網路上的爬文中也是頻頻出現問題,最後在東湊西湊下整理出這一篇 Redmine 2.6 的安裝文章

 

由於 Redmine 每一個子版或大版本更新,安裝的方式都有些許差異,可能會很容易遇到套件缺少或設定少東少西的,所以這篇是以 CentOS 6 minimal 為基底進行安裝,安裝 Redmine 2.6 版本,並且整合 Nginx 當作 Web Proxy。

 

 

CentOS 6.7  –  Redmine 2.6 安裝

 

Step.1 安裝 Redmine 開發套件,缺一不可唷!

$ yum -y install ruby ruby-devel ImageMagick ImageMagick-devel rubygem-rake mysql mysql-server make cpp make-devel gcc-c++ mysql-devel

 

Step.2 安裝 rubygem-bundler,ruby 的安裝工具

下載安裝源
$ wget http://download.opensuse.org/repositories/home:csbuild:centosextra/CentOS_CentOS-6/home:csbuild:centosextra.repo
$ mv home:csbuild:centosextra.repo /etc/yum.repos.d/
$ yum -y install rubygem-bundler

 

Step.3 設定並建立 redmine 資料庫,請注意資料庫必須為 UTF-8,否則會出現 ?? 亂碼

$ service mysqld start
$ mysql_secure_installation
$ mysql -uroot -p

mysql> create database redmine default character set utf8;
mysql> grant all privileges on redmine.* to redmine_USER@localhost identified by ‘redmine_PWD’;
mysql> flush privileges;
mysql> quit;

 

Step.4 下載並設定 redmine 資料庫設定,請記得此篇用的是 2.6 版本,如果你使用的是 3.1 或是 2.6.6 等版本會出現許多安裝問題則不再此篇

$ wget http://www.redmine.org/releases/redmine-2.6.0.zip
$ unzip redmine-2.6.0.zip
$ mv redmine-2.6.0 /usr/share/nginx/html/redmine
$ chown -R nginx.nginx /usr/share/nginx/html/redmine

修改redmine資料庫連線資訊
$ cd /usr/share/nginx/html/redmine/config/
$ mv database.yml.example database.yml
$ vi database.yml

production:
adapter: mysql2
database: redmine
host: localhost
username: redmine_USER
password: ‘redmine_PWD'
encoding: utf8

 

Step.5 編輯預設 Gemfile 並進行 gem 安裝套件

$ vim /usr/share/nginx/html/redmine/Gemfile

在 gem "rbpdf", "~> 1.18.1" 底下加入以下

gem 'mongrel', '>= 1.2.0.pre2'
gem 'dispatcher'
gem "i18n", "~> 0.6.11"
gem 'thin'

$ bundle install
...
...
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

如果在上面的套件有少安裝,在這一步就會debug很久唷!

 

Step.6 載入 Redmine 資料庫資料

$ rake generate_secret_token
$ RAILS_ENV=production rake db:migrate

載入預設資料庫資料
$ RAILS_ENV=production rake redmine:load_default_data

輸入zh-TW

 

Step.7 處理 Redmine 資料夾結構及權限

$ cd /usr/share/nginx/html/redmine
$ mkdir -p tmp tmp/pdf public/plugin_assets
$ chown -R nginx.nginx /usr/share/nginx/html
$ chmod -R 755 files log tmp public/plugin_assets

 

Step.8 測試 Redmine 安裝成功,測試啟動

$ cd /usr/share/nginx/html/redmine
$ ruby script/rails server webrick -e production

 

執行成功會 listen 0.0.0.0:3000,可以用瀏覽器執行 http://localhost:3000 是否可以看到 Redmine 頁面。

 

在這邊 Redmine 的安裝就告一段落,但一個在線上作業的系統是不能這樣執行使用,必須再搭配 Web service 進行

 

 

Redmine 和 Nginx 整合 – thin

和 Web 整合必須用到 thin 這個套件來整合 Redmine

 

Step.1 安裝 thin

$ gem install thin
$ thin install

Installing thin service at /etc/rc.d/thin ...
mkdir -p /etc/rc.d
writing /etc/rc.d/thin
chmod +x /etc/rc.d/thin
mkdir -p /etc/thin

To configure thin to start at system boot:
on RedHat like systems:
  sudo /sbin/chkconfig --level 345 thin on
on Debian-like systems (Ubuntu):
  sudo /usr/sbin/update-rc.d -f thin defaults
on Gentoo:
  sudo rc-update add thin default

Then put your config files in /etc/thin

 

Step.2 由上可以看到thin放在/etc/rc.d/thin,把他移到 /etc/init.d/thin

$ mv /etc/rc.d/thin /etc/init.d/thin

 

 

Step.3 加入thin設定檔 for redmine

$ vim /etc/thin/redmine.yml

group: nginx
wait: 30
timeout: 30
log: /var/log/thin/thin.log
max_conns: 1024
 
require: []
environment: production
max_persistent_conns: 512
servers: 4
daemonize: true
user: nginx
#socket: /tmp/thin.sock
chdir: /usr/share/nginx/html/redmine
address: 0.0.0.0
port: 3000

 

網路上多數使用 socket 的方式與 Nginx 介接,但我這邊習慣使用 port 來當通道,由於 servers = 4,所以 thin 會建立 4個通道從 3000 port 開始。

 

Step.4 設定 thin 的 logrotate

$ vim /etc/logrotate.d/thin
/var/log/thin/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
        /etc/init.d/thin restart >/dev/null
        endscript
}

 

Step.5 啟動 thin 服務

$ service thin start

$ netstat -tunpl

tcp  0  0 0.0.0.0:3000  0.0.0.0:* LISTEN 16655/thin server
tcp  0  0 0.0.0.0:3001  0.0.0.0:* LISTEN 16656/thin server
tcp  0  0 0.0.0.0:3002  0.0.0.0:* LISTEN 16657/thin server
tcp  0  0 0.0.0.0:3003  0.0.0.0:* LISTEN 16658/thin server

由 redmine.yml 設定值確認有 Listen 3000-3003 port。

 

Step.6 設定 Nginx 和 thin 串接

$ yum install nginx
$ vim /etc/nginx/conf.d/redmine.conf

upstream thin_cluster {
     server 127.0.0.1:3000;
     server 127.0.0.1:3001;
     server 127.0.0.1:3002;
     server 127.0.0.1:3003;
}
server {
        listen 80;
        server_name localhost;
        error_log /var/log/nginx/redmine_error.log;
        root /usr/share/nginx/html;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        proxy_redirect off;

        location / {
                try_files $uri/index.html $uri.html $uri @cluster;
        }

        location @cluster {
                proxy_pass http://thin_cluster;
        }
}

upstream thin_cluster 這邊串接了 thin,Nginx 主要是進行 Proxy 代理使用

 

Step.7 啟動 Nginx 測試

$ service nginx start

 

測試 http://localhost:80 看到 redmine 畫面搞定收工!

 

 

 

 

 

Debug:

Q1:執行 bundle install 出現錯誤『Using rake (10.4.2)
Installing i18n (0.7.0) /usr/lib/ruby/site_ruby/1.8/rubygems/installer.rb:164:in `install’: i18n requires Ruby version >= 1.9.3. (Gem::InstallError)』

A1:這是因為目前最新的 i18n 版本 0.7.0 是 for Ruby 1.9.3 使用的,而在 CentOS 6 最多只能安裝到 Ruby 1.8.7,所以在 Step5 指定安裝 i18n 0.6.11 的版本,就能解決這個衝突。

 

Q2:service thin start 啟動之後沒有 listen 3000 port ?

A2:必須在 Gemfile 加入 gem ‘thin’ 後即可正常 listen。

 

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱