CentOS7の標準リポジトリをそのまま活用します。systemctl
やfirewall-cmd
といったCentOS7のコマンドをベースに書いています。また、なるべくsudoで実行するようにしています。(カレントユーザーで混乱しないように)
Railsのインストール
現在CentOS7の標準ではRuby2.0とRails4.2がインストール可能です。
Railsインストール on CentOS7
Redmineの最新の要件を見ると、Ruby2.0は対応。Railsは4.1が必要と書いてあるので、おそらく4.2で大丈夫だと思います。
ImageMagickのインストール
画像の編集に使われます。
インストール
yumで普通にインストール。
$ sudo yum install ImageMagick-devel
nginxをインストール
reverse proxyとしてnginxを使用します。
redmine本体インストールした時にnginxからのアクセス権与えたいので、予めインストールしてユーザーが出来上がっているようにします。
yumでインストール
$ sudo yum install nginx
サービス有効化
$ sudo systemctl enable nginx
ln -s '/usr/lib/systemd/system/nginx.service' '/etc/systemd/system/multi-user.target.wants/nginx.service'
nginx起動
$ sudo systemctl start nginx
ステータス確認
$ sudo systemctl status nginx
nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Fri 2015-02-00 00:00:00 JST; 10s ago
Process: 22314 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 22312 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
...省略...
Fire Wallポート開放
外部からポート80でアクセスするために、firewallを設定します。
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload
redmineへ接続するための設定はあとでやります。
MariaDB(MySQL互換DB)
CentOS7ではMySQLではなくMariaDBが標準なのでこちらをインストールします。
インストール
develとserverが必要です。
$ sudo yum install mariadb-devel mariadb-server
サーバーのキャラクターセットをutf8に設定しておきます。(未だlatin1がデフォルトなんですね…)
$ sudo vi /etc/my.cnf.d/server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
## 追加 ##
character-set-server=utf8
# this is only for embedded server
[embedded]
...以下省略...
サービス起動
$ sudo systemctl enable mariadb
$ sudo systemctl restart mariadb
rootパスワード
初期パスワードはなしで危険なので、新しいパスワードを設定します。
$ mysqladmin password -u root
Enter password:
New password:
Confirm new password:
データベース作成
$ mysql -u root -p
MariaDB [(none)]>create database redmine;
MariaDB [(none)]>create user 'redmine'@'localhost' identified by 'redmine_pass';
MariaDB [(none)]>grant all privileges on redmine.* to 'redmine'@'localhost';
MariaDB [(none)]>exit;
redmineユーザー作成
セキュリティのため、root権限(wheel)でない専用ユーザーを作成します。
$ sudo useradd redmine
$ sudo passwd redmine
Redmine本体
ダウンロードと展開
本家からredmine-3.2.1をダウンロードします。
$ cd ~/
$ curl -O http://www.redmine.org/releases/redmine-3.2.1.tar.gz
$ tar -xvf redmine-3.2.1.tar.gz
$ sudo mv redmine-3.2.1 /var/lib
$ cd /var/lib/redmine-3.2.1
$ sudo chmod -R 755 files log public/plugin_assets
$ sudo chown -R redmine:nginx .
DBの設定
引き続き/var/lib/redmine-3.2.1
で作業します。
先ほど作成したDBのユーザー名、パスワードを設定します。
$ sudo -u redmine cp config/database.yml.example config/database.yml
$ sudo -u redmine vi config/database.yml
...省略...
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: redmine_pass
encoding: utf8
...省略...
bundlerでgemsのインストール
Gemfileにrailsを稼働させるRack Serverとしてpumaを追加します。(unicornより流行ってる?&導入が楽だったので)
Gemfile 17行目あたりにpumaを追加します。
$ sudo -u redmine vi Gemfile
...省略...
gem "protected_attributes"
gem "actionpack-action_caching"
gem "actionpack-xml_parser"
gem "roadie-rails"
gem "puma"
...省略...
nokogiri-1.6.6.2をインストールしようとして、Cのライブラリを参照しようとします。そのままだとエラーになるので、configで--use-system-libraries
オプションを設定してからbundle installします。
※railsのインストール手順でやっているので不要でした
今回はMySql(MariaDB)を使用するので、本家で紹介されている通りpostgresqlとsqliteは除外します。
$ sudo -u redmine -E /var/lib/redmine-3.2.1/bin/bundle install --path vendor/bundle --without development test postgresql sqlite
セッションストア秘密鍵生成
rakeコマンドを使用して生成します。
$ sudo -u redmine /home/redmine/bin/bundle exec rake generate_secret_token
DBテーブル初期化
$ sudo -u redmine RAILS_ENV=production /home/redmine/bin/bundle exec rake db:migrate
新規の場合は初期のデフォルトデータをロードします。移行の場合はこの手順を飛ばして、データをインポートしてください。
言語を訊かれたら日本語ja
を入力します。
$ sudo -u redmine RAILS_ENV=production /home/redmine/bin/bundle exec rake redmine:load_default_data
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ja
Webrickでテスト
とりあえずバックグラウンドでwebrick起動します。curlでページのソースが取得されていることを確認します。
$ cd /var/lib/redmine-3.2.1
$ sudo -u redmine /home/redmine/bin/bundle exec rails server webrick -e production &
$ curl http://localhost:3000
サーバーを停止するとき
$ fg
Ctrl+C
外部からブラウザで参照したければ、firewall-cmdでポート3000番開けてください。
また、すべてのアドレスから待ち受けるよう、-b 0.0.0.0
を追加します。
$ sudo firewall-cmd --add-port=3000/tcp
$ rails server webrick -e production -b 0.0.0.0 &
サーバーを停止するとき
$ fg
Ctrl+C
puma
設定ファイルを記述
$ cd /var/lib/redmine-3.2.1
$ sudo -u redmine vi config/puma.rb
app_root = '/var/lib/redmine-3.2.1'
directory app_root
environment 'production'
pidfile "#{app_root}/tmp/pids/puma.pid"
state_path "#{app_root}/tmp/pids/puma.state"
bind "unix://#{app_root}/tmp/sockets/redmine.sock"
activate_control_app
pumaでテスト
pumaでテストしてみます。ソケット経由
$ cd /var/lib/redmine-3.2.1
$ sudo -u redmine bin/bundle exec puma
稼働していることはわかりますが、curlでunixソケットにアクセスする--unix-socket
はCentOS Linux release 7.1.1503
標準の7.29.0では対応していないのでエラーがないことだけ確認。方法知ってる人いたらおしえてください。(素直に7.40いれれば良いんだけど)
daemon化
systemdで起動できるようにします。
serviceファイルの作成
$ sudo vi /usr/lib/systemd/system/redmine.service
[Unit]
Description=Redmine on PUMA
After=network.target
[Service]
Type=simple
ExecStart=/var/lib/redmine-3.2.1/bin/bundle exec pumactl -F /var/lib/redmine-3.2.1/config/puma.rb start
KillMode=process
KillSignal=SIGQUIT
User=redmine
Group=nginx
[Install]
WantedBy=multi-user.target
systemdから起動する
systemファイルを追加したので、設定をリロード
$ sudo systemctl daemon-reload
自動起動を有効にする
$ sudo systemctl enable redmine
開始
$ sudo systemctl start redmine
正しく開始されたか確認
$ sudo systemctl status redmine
Active: active (running)になっていればOK
nginxからアクセスする
サーバー設定と、ロケーション設定を追加します。
$ sudo vi /etc/nginx/conf.d/redmine_server.conf
upstream redmine {
server unix:/var/lib/redmine-3.2.1/tmp/sockets/redmine.sock;
}
$ sudo vi /etc/nginx/default.d/redmine.conf
location / {
root /var/lib/redmine-3.2.1/public;
access_log /var/log/nginx/redmine_access.log;
error_log /var/log/nginx/redmine_error.log;
try_files $uri $uri/index.html $uri.html @redmine;
}
location @redmine {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://redmine;
}
設定が有効か確認して、リロードします。
確認
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
リロード
$ sudo systemctl reload nginx
サブディレクトリでアクセスする場合
location設定を書き換えます。
$ sudo vi /etc/nginx/default.d/redmine.conf
location /redmine {
root /var/lib/redmine-3.2.1/public;
access_log /var/log/nginx/redmine_access.log main;
error_log /var/log/nginx/redmine_error.log main;
try_files $uri $uri/index.html $uri.html @redmine;
}
location @redmine {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://redmine;
}
さらに、relative_url_rootにサブディレクトリを登録して、ルートパス"/"にマップするよう、redmineの設定も変更します。
参考
$ sudo -u redmine vi /var/lib/redmine-3.2.1/config/environment.rb
# 末尾に追加
Redmine::Utils::relative_url_root = "/redmine"
$ sudo -u redmine vi /var/lib/redmine-3.2.1/config.ru
# run RedmineApp::Application
map ActionController::Base.relative_url_root || "/" do
run RedmineApp::Application
end
SELinux無効化
簡単のため、SELinuxをPermissiveにします。
再起動したときにpermissiveになるよう、設定変更します。
$ sudo vi /etc/sysconfig/selinux
7行目
SELINUX=permissive
再起動するまで反映されないので、明示的に即時反映する。
$ sudo setenforce 0
確認
Webブラウザで確認します。
http://[yourhost]/
サブディレクトリ設定している場合は
http://[yourhost]/redmine
実用化のために追加でやるべきこと
ここには書いてませんが、実用するには
・管理者のメール設定(メール通知)
・SSLを通す(nginxに設定)
・定期バックアップ
などを設定してください。