自習室

こもります

さくらのVPS (Ubuntu12.04) にRedmine(2.4.2.stable)をインストールする

まえがき

動機

  1. 2014年1月1日、おもむろに一年の抱負などを考える
  2. 抱負の中で考えたことをブレイクダウンしていったら、Redmineを使いたくなった (このあたりは別途ブログに書く)
  3. ちなみに、腕ならしにメールサーバPostfixGitLabもインストール済

注意書き

  • 普段はOpenFrameworksとかUnityとかAndroidとかでヒューマンインタフェース書いたりUX考えてる人です。サーバいじりは趣味レベル
  • 間違いがあるかもしれませんご注意下さい

やりたいこと

  • さくらVPS上でRedmineを運用する
  • お名前.com で取得したドメインを適用する
  • ブラウザ上でちゃんと動くことを確認する

サーバ環境

  • さくらのVPS 1G
  • OS: Ubuntu 12.04 LTS (x86_64) カスタムインストール済
  • ドメイン: お名前.com で取得済

リバースプロキシについて

事前にお名前.comでRedmine用のサブドメインを作って、DNSさんに覚えてもらいます。設定の仕方はこちら。

よくある質問 | お名前.comヘルプセンター

サブドメインのついたURLは、文字上は異なる住所のようですが、実際は同じIPに異なる表札をいくつも下げているような状態です。私の場合は既にGitLabをインストールしているので、同じ80番ポートで同じIPにアクセスしてきたときに、叩いたアドレスに基づいてGitLabの動いているサーバサービス、Redmineの動いているサーバサービスに割り振るようなことをしなければなりません。

そこで、リバースプロキシの出番です。

リバースプロキシについてはこちらが詳しい

Insider's Computer Dictionary [リバースProxy] − @IT

リバースプロキシ自体は他にもいくつかの役目を持っているのですが、ここではサブドメインに応じて表示するウェブアプリ(を動かしているウェブサーバサービス)を切り替える為に使います。

手順

バージョンなど

参考にしたサイト

  • ほぼこちらをトレースしています

Ubuntu12.04 LTS + Nginx + MySQLでRedmineを動かすメモ | ブログ :: Web notes.log

  • Redmine.jpによるブログ。国内的にはこれが公式のインストールガイド。nginx + unicornでは無いので注意

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設定メモ - おおにしあきらの日記

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

以下の部分を変更しています。

  • /etc/init.d/redmine として配置
  • NAME=redmine
  • start() 関数内 bundle exec の際に、オプション「-p 5001」を付記

その上で # update-rc.d redmine defaults 21自動起動に登録しようとしたら、

warning missing lsb information

と怒られました。「いま置いた起動スクリプトが、Linux Standard Base に準拠してないぞ」という事で、起動スクリプトとして作っておくべき関数が足りていない模様です。ちょっとここは面倒そうなので今回は無視しています。(スミマセン

また、さきほど rails の起動を、サーバ内 5001番ポートを経由して行うことにしたので、Ubuntuが 5001 を通すようにしておきます。

実際起動しようとしてみると、bundleがみつからない!と怒られます。起動スクリプトの冒頭にexportが記載されていますが、そこに /usr/local/binを追加しておきます。

停止や再起動が出来ない

参考ブログ様に習って、redmineunicornのコンフィグ/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を勉強します

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;

# 以下略

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;
        }
}

以上です。