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