2015年9月2日 星期三

CentOS 6 - Redmine 2.6 一套專業的專案管理流程系統

目前的公司有專案管理流程、甘特圖的需求,搜尋許多都沒辦法符合需求,最後想到前公司使用的是 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

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

加入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.2 設定 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.3 啟動 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.4 設定 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.5 啟動 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 nginx start 啟動之後沒有 listen 3000 port ?

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

 

Orignal From: CentOS 6 - Redmine 2.6 一套專業的專案管理流程系統

1 則留言: