さくらのVPS (Ubuntu12.04) にRedmine(2.4.2.stable)をインストールする
まえがき
動機
- 2014年1月1日、おもむろに一年の抱負などを考える
- 抱負の中で考えたことをブレイクダウンしていったら、Redmineを使いたくなった (このあたりは別途ブログに書く)
- ちなみに、腕ならしにメールサーバPostfixとGitLabもインストール済
注意書き
- 普段はOpenFrameworksとかUnityとかAndroidとかでヒューマンインタフェース書いたりUX考えてる人です。サーバいじりは趣味レベル
- 間違いがあるかもしれませんご注意下さい
やりたいこと
サーバ環境
リバースプロキシについて
事前にお名前.comでRedmine用のサブドメインを作って、DNSさんに覚えてもらいます。設定の仕方はこちら。
サブドメインのついたURLは、文字上は異なる住所のようですが、実際は同じIPに異なる表札をいくつも下げているような状態です。私の場合は既にGitLabをインストールしているので、同じ80番ポートで同じIPにアクセスしてきたときに、叩いたアドレスに基づいてGitLabの動いているサーバサービス、Redmineの動いているサーバサービスに割り振るようなことをしなければなりません。
そこで、リバースプロキシの出番です。
リバースプロキシについてはこちらが詳しい
Insider's Computer Dictionary [リバースProxy] − @IT
リバースプロキシ自体は他にもいくつかの役目を持っているのですが、ここではサブドメインに応じて表示するウェブアプリ(を動かしているウェブサーバサービス)を切り替える為に使います。
手順
バージョンなど
参考にしたサイト
- ほぼこちらをトレースしています
Ubuntu12.04 LTS + Nginx + MySQLでRedmineを動かすメモ | ブログ :: Web notes.log
Redmine 2.4をCentOS 6.4にインストールする手順 | Redmine.JP Blog
上記2サイトでほぼほぼインストールできるはずです。以下に、私の環境で起きたハプニングなどを踏まえて変更した点などをメモします。
ちょこちょこ変えたところ
インストールする場所
linuxにおいては、ソフトウェアを置く場所についてはこれと言った規約が無いようで、実際上記の2記事ではそれぞれ別の場所にインストールしています。今回は後者の公式ブログに従って/var/lib/redmine
にインストールしています
最新のRedmineを使います。
# wget http://www.redmine.org/releases/redmine-2.4.2.tar.gz # tar xvfz redmine-2.4.2.tar.gz # mv redmine-2.4.2 /var/lib/redmine # cd /var/lib/redmine
bundle installを二度やる
なぜか一度目でmysql2が入らなかったので、
bundle install --without development test postgresql sqlite rmagick
と二度やっています。
ちなみに、GitLabでもmysql2を使っているのだけど、何故ここでも入れる羽目になったのかはわかっていません
nginxユーザに対して、Redmineインストールディレクトリへ書き込み権限を与える
nginxについてはあまり自信が無かったので、こちらのサイトで予習をしてから取りかかりました
nginxの動作設定をしている /etc/nginx/nginx.conf
を見ると、冒頭に
user www-data
とあり、nginxのプロセスを実行しているのは www-data
ユーザだという事が分かります。そこでRedmineが正しく実行されるよう、Redmineディレクトリへのアクセス権限を変更します
# chown -R www-data:www-data files log tmp plugins # chmod -R 755 files log tmp plugins
redmineのためのunicorn起動スクリプト作成と設置、自動起動設定
参考にしたブログ様と同様に、こちらのunicorn起動スクリプトを活用させていただきました。
https://gist.github.com/arosh/3616832#file-unicorn
以下の部分を変更しています。
その上で # update-rc.d redmine defaults 21
で自動起動に登録しようとしたら、
warning missing lsb information
と怒られました。「いま置いた起動スクリプトが、Linux Standard Base に準拠してないぞ」という事で、起動スクリプトとして作っておくべき関数が足りていない模様です。ちょっとここは面倒そうなので今回は無視しています。(スミマセン
また、さきほど rails の起動を、サーバ内 5001番ポートを経由して行うことにしたので、Ubuntuが 5001 を通すようにしておきます。
実際起動しようとしてみると、bundleがみつからない!と怒られます。起動スクリプトの冒頭にexportが記載されていますが、そこに /usr/local/bin
を追加しておきます。
停止や再起動が出来ない
参考ブログ様に習って、redmineのunicornのコンフィグ/var/lib/redmine/config/unicorn.rb
は
https://gist.github.com/letsspeak/3981772#file-unicorn-rb
を活用させていただいたのですが、そのなかで、RedmineのためのUnicorn起動時にpidをメモっているファイルと、RedmineのためのUnicornのstop時やrestart時にサービスが起動しているかpidを確かめるファイルが異なっていたため、stopやrestartをしようとすると、
redmine not started
と表示されてしまいました。ちゃんと起動時にpidを書き込んだところに確認に行くように修正します
# /var/lib/redmine/config/unicorn.rb #起動時の設定ファイル (中略) # 今回のpidをメモするファイルを指定する pid File.expand_path("tmp/pids/unicorn_redmine.pid", ENV['RAILS_ROOT'])
# /etc/init.d/redmine # 起動スクリプト (中略) # 停止時や再起動時に、pidがあるかどうか(起動しているかどうか)を確かめるために見に行くファイル PID="${ROOT_DIR}/tmp/pids/unicorn_redmine.pid"
nginxの設定 - リバースプロキシの設定
事前に
先ほども紹介したサイトでnginxを勉強します
やりたいこと
- gitlab.mydomain.jp でアクセスしてきたら、gitlabを開く
- redmine.mydomain.jp でアクセスしてきたら、redmineを開く
- それ以外(www. 無印)でアクセスしてきたら、index.htmlを開く
やったこと
/etc/nginx/sites-available/ 以下に、割り振りたいサービスごとに設定を書いていきます
- default設定
# /etc/nginx/sites-available/default server{ listen 80 default; # 以下略
- gitlabへの割り振り
これは、gitlabの公式インストールガイドのまんまで、前回の記事の通りとなっています
# /etc/nginx/sites-available/gitlab server{ listen *:80; server_name gitlab.mydomain.jp; # 以下略
- redmineへの割り振り
https://gist.github.com/arosh/3616832#file-nginx-conf
Ubuntu12.04 LTS + Nginx + MySQLでRedmineを動かすメモ | ブログ :: Web notes.log
の2記事を参考に作成しました。redmine.mydomain.jp
にアクセスがあったら、本コンピュータ内で5001番で動いているアプリに転送してくれ、的な内容です。
upstream redmine{ server 127.0.0.1:5001; } server{ listen 80; root /var/lib/redmine/public; server_name redmine.mydomain.jp; # individual nginx logs for this redmine vhost access_log /var/log/nginx/redmine_access.log; error_log /var/log/nginx/redmine_error.log; location / { try_files $uri $uri/index.html $uri.html @redmine; } location @redmine { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://redmine; } # Rails error pages error_page 500 502 503 504 /500.html; location = /500.html { root /var/lib/redmine/public; } }
以上です。