さくらのVPS(v3) 2GB プランへの環境構築メモ 9。今回は Ruby、Redmime、Subversion のセットアップとデータ移行について書く。
さくらのVPS を改めて使いはじめる 1 – 使用準備、SSH 公開鍵認証
さくらのVPS を改めて使いはじめる 2 – sudo と SSH ポート変更
さくらのVPS を改めて使いはじめる 3 – iptables と logwatch
さくらのVPS を改めて使いはじめる 4 – Apache をセットアップする
さくらのVPS を改めて使いはじめる 5 – MySQL をセットアップする
さくらのVPS を改めて使いはじめる 6 – 独自ドメインの取得と設定
さくらのVPS を改めて使いはじめる 7 – WordPress
さくらのVPS を改めて使いはじめる 8 – checkinstall
もくじ
Ruby
前に借りていた VPS 環境 ( さくらのVPS 512MB ) では、Ruby Enterprise Edition 上で Redmine を動かしていたのだが、Redmine 1.4 から Ruby 1.9 系に正式対応したので、今回は Ruby + Passenger の組み合わせで運用することにした。Ruby 自体も最新のものを利用する。
まず、Ruby をコンパイルするために必要なパッケージと関連ツールをまとめてインストールする。
$ sudo yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel mysql-devel httpd-devel ImageMagick ImageMagick-devel
余談だが、さくらのVPS(v3) の CentOS 6.2 環境だと EPEL リポジトリがはじめから有効らしい。バージョンの新旧さえ気にしなければ、有名どころのパッケージはたいてい揃うのでありがたい。
次に Ruby 本体の最新版ソースを入手する。公式ページのダウンロードから、HTTP ミラーへゆき、ソースを固めたファイルの URL を調べておく。
現時点の最新版ソースは ruby-1.9.3-p194 らしいので、これをユーザー HOME へダウンロード & 展開。
$ cd $ wget http://core.ring.gr.jp/archives/lang/ruby/1.9/ruby-1.9.3-p194.tar.gz $ tar zxvf ruby-1.9.3-p194.tar.gz $ rm ruby-1.9.3-p194.tar.gz
展開した Ruby のソースをコンパイルする。RPM 化するのでインストールは実行せず、make までにしておくこと。
$ cd ruby-1.9.3-p194 $ ./configure $ make
Ruby をコンパイルできたら、前回セットアップした checkinstall を使って RPM 化する。
途中で「それらをパッケージから除外しますか?」というメッセージが表示されたら、n を入力して Enter キーを押す。下記のコマンド例にも書いているが、RPM 化の途中で 1 時間ぐらい待たさせる。その間、特にすることはないので放置してもよい。
$ sudo checkinstall --fstrans=no
Some of the files created by the installation are inside the home directory: /home
You probably don't want them to be included in the package.
それらを表示しますか? [n]:
それらをパッケージから除外しますか?(yesと答えることをおすすめします) [n]: n
tempディレクトリにファイルをコピー..
... 中略 ( ↑のメッセージで 1 時間ぐらい待たされた )
**********************************************************************
Done. The new package has been saved to
/root/rpmbuild/RPMS/x86_64/ruby-1.9.3-p194-1.x86_64.rpm
You can install it in your system anytime using:
rpm -i ruby-1.9.3-p194-1.x86_64.rpm
**********************************************************************
RPM 化が終わると、生成されたファイルのパスが表示される。それを参考にしてインストールを実行する。
$ sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/ruby-1.9.3-p194-1.x86_64.rpm 準備中... ########################################### [100%] 1:ruby-1.9.3 ########################################### [100%]
インストールされたことを確認するために、Ruby のバージョンを表示。
$ ruby -v ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
RPM パッケージの詳細情報も確認しておく。
$ sudo rpm -qi ruby-1.9.3 Name : ruby-1.9.3 Relocations: (not relocatable) Version : p194 Vendor: (none) Release : 1 Build Date: 2012年04月30日 11時16分49秒 Install Date: 2012年04月30日 13時31分41秒 Build Host: akabeko.me Group : Applications/System Source RPM: ruby-1.9.3-p194-1.src.rpm Size : 475428049 License: GPL Signature : (none) Packager : checkinstall-1.6.3 Summary : Package created with checkinstall 1.6.3 Description : Package created with checkinstall 1.6.3
きちんとインストールされてるので、不要になった Ruby のソースを消しておく。
$ cd $ rm -rf ruby-1.9.3-p194
これにて、Ruby のセットアップは完了。
Bundler と Passenger
Redmine を動作させるために必要な Ruby Gem モジュールをセットアップする。
はじめに Bundler を入れる。これは、Redmine のような Ruby on Rails アプリのための Gem 管理ツールである。Redmine 1.4 から、アプリの Gem 依存管理で使用されるようになった。
$ sudo gem install bundler --no-rdoc --no-ri Fetching: bundler-1.1.3.gem (100%) Successfully installed bundler-1.1.3 1 gem installed
つぎは Phusion Passenger。これは Apache や Nginx 上で Rails アプリを動かすために使用する。
$ sudo gem install passenger --no-rdoc --no-ri Fetching: fastthread-1.0.7.gem (100%) Building native extensions. This could take a while... Fetching: daemon_controller-1.0.0.gem (100%) Fetching: rack-1.4.1.gem (100%) Fetching: passenger-3.0.12.gem (100%) Successfully installed fastthread-1.0.7 Successfully installed daemon_controller-1.0.0 Successfully installed rack-1.4.1 Successfully installed passenger-3.0.12 4 gems installed
Passenger の Apache 用モジュールをインストール。
$ sudo passenger-install-apache2-module
... 中略 ...
--------------------------------------------
The Apache 2 module was successfully installed.
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12
PassengerRuby /usr/local/bin/ruby
After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!
Press ENTER to continue.
--------------------------------------------
Deploying a Ruby on Rails application: an example
Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:
<VirtualHost *:80>
ServerName www.yourhost.com
# !!! Be sure to point DocumentRoot to 'public'!
DocumentRoot /somewhere/public
<Directory /somewhere/public>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
</Directory>
</VirtualHost>
And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:
/usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/doc/Users guide Apache.html
Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/
Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.
最後の方に、Apache 用の設定が表示されるのでメモしておく。この内容は Apache の httpd.conf 本体に書くのではなく、専用ファイルを用意する。今回は passenger.conf という名前で作成することにした。
$ sudo vi /etc/httpd/conf.d/passenger.conf
passenger.conf にさきほどの Apache 用設定を記述し、ついでに Redmine を公開するときのディレクトリ設定も加えて保存する。今回は http://ホスト名/projects に公開するので、以下のようになる。
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/ext/apache2/mod_passenger.so PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12 PassengerRuby /usr/local/bin/ruby RailsBaseURI /projects
前の VPS では redmine というサブディレクトリにしていたが、今回はサービス名を用いず、projects という汎用な名前にした。このようにすることで、プロジェクト管理を他のサービスに変更したくなった場合でも、サブディレクトリまでなら URL を維持できる。
Apache の設定チェックと再起動をおこない、passenger.conf を読ませる。
$ sudo apachectl configtest Syntax OK $ sudo service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
これで Redmine を動作させるための環境が整った。
Redmine
Redmine をセットアップしてゆく。
はじめに MySQL 上へ Redmine 専用のデータベースとユーザーを作成する。XXXXXXXXXXXXXXXX の部分はパスワードになるので、あるていど複雑な文字列を指定すること。ユーザーは redmine@localhost にした。
$ mysql -u root -p mysql> CREATE DATABASE redmine DEFAULT CHARACTER SET utf8; mysql> GRANT ALL PRIVILEGES ON redmine.* TO redmine@localhost IDENTIFIED BY 'XXXXXXXXXXXXXXXX'; mysql> FLUSH PRIVILEGES; mysql> exit;
Redmine をインストールする。現時点の最新版は 1.4.1 になる。
イメージは RubyForge の Redmine プロジェクトに公開されているので、最新版の tar.gz の URL をメモしておく。これをユーザー HOME にダウンロード、展開して /var/lib/redmine に移動する。
$ cd $ wget http://rubyforge.org/frs/download.php/76033/redmine-1.4.1.tar.gz $ tar zxvf redmine-1.4.1.tar.gz $ rm redmine-1.4.1.tar.gz $ sudo mv redmine-1.4.1 /var/lib/redmine
Redmine をインストールしたディレクトリに移動し、Bundler を使って必要な Gem を入れる。PostgreSQL や SQLite などは利用しないので、without オプションをつけて除外している。
$ cd /var/lib/redmine $ sudo bundle install --without development test postgresql sqlite Fetching gem metadata from http://rubygems.org/....... Using rake (0.9.2.2) Installing activesupport (2.3.14) Installing rack (1.1.3) Installing actionpack (2.3.14) Installing actionmailer (2.3.14) Installing activerecord (2.3.14) Installing activeresource (2.3.14) Installing coderay (1.0.6) Installing i18n (0.4.2) Installing mysql2 (0.2.18) with native extensions Installing net-ldap (0.3.1) Installing rails (2.3.14) Installing rmagick (2.13.1) with native extensions Installing ruby-openid (2.1.8) Installing tzinfo (0.3.33) Using bundler (1.1.3) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
これまでのバージョンだと、よく ImageMagick と rmagick で互換や設定のトラブルが起きたものだが、今回は特に問題なく終了。ほっとした。
次は Redmine のデータベース接続に関する設定。これは database.yml というファイルに対しておこなう。初期状態では database.yml.example というサンプル ファイルが置かれているので、これをコピーして編集する。
$ cd /var/lib/redmine/config/ $ cp database.yml.example database.yml $ vi database.yml
このファイルを以下のように編集して保存する。
ハイライトした部分が変更箇所。adapter は mysql ではなく mysql2 になるので注意する。username ( ユーザー名 ) と password ( パスワード ) は、さきほど MySQL 上へ設定した内容になる。
# Default setup is given for MySQL with ruby1.8. If you're running Redmine # with MySQL and ruby1.9, replace the adapter name with `mysql2`. # Examples for PostgreSQL and SQLite3 can be found at the end. production: adapter: mysql2 database: redmine host: localhost username: redmine password: XXXXXXXXXXXXXXXX encoding: utf8
セッション管理用の秘密鍵を生成する。これがないと Redmine の起動でエラーが発生する。
$ rake generate_session_store (in /var/lib/redmine)
データベースを初期化する。
$ rake db:migrate RAILS_ENV=production (in /var/lib/redmine)
必要な gem が足りなかったり、database.yml の設定を間違えてる ( adapter が mysql2 ではなく mysql になっているとか ) 場合はエラーになるので、メッセージをよく読んで修正すること。
これで Redmine のセットアップは完了。さっそく、Apache の DocumentRoot 以下にシンボリックリンクを作成して Web に公開してみる。
$ sudo ln -s /var/lib/redmine/public /var/www/html/projects
ブラウザから http://ホスト名/projects にアクセスすると、Redmine のホーム画面が表示されるはず。
初期状態だと、admin ユーザーのパスワードが admin になっており非常に危険なので、すぐに admin でログインしてパスワードを変更すること。
Subversion
Subversion をセットアップする。まずインストールされていることを確認。
$ svn --version svn, バージョン 1.6.11 (r934486) コンパイル日時: Sep 27 2011, 15:29:25 Copyright (C) 2000-2009 CollabNet. Subversion is open source software, see http://subversion.tigris.org/ This product includes software developed by CollabNet (http://www.Collab.Net/).
入っているので、リポジトリのルートになるディレクトリを作成。
$ sudo mkdir /var/lib/svn
次にリポジトリをひとつ作成してみる。ここでは仮に example という名前にしておく。
$ sudo svnadmin create /var/lib/svn/example
sudo 経由で作成したディレクトリとファイルの所有者は root になるのだが、Apache 経由でリポジトリにアクセスしたいので、所有者を変更しておく。変更したら、確認のために中身を表示してみる。
$ sudo chown -R apache:apache /var/lib/svn/example $ ls -l /var/lib/svn/example 合計 24 -rw-r--r-- 1 apache apache 229 4月 30 16:47 2012 README.txt drwxr-xr-x 2 apache apache 4096 4月 30 16:47 2012 conf drwxr-sr-x 6 apache apache 4096 4月 30 16:47 2012 db -r--r--r-- 1 apache apache 2 4月 30 16:47 2012 format drwxr-xr-x 2 apache apache 4096 4月 30 16:47 2012 hooks drwxr-xr-x 2 apache apache 4096 4月 30 16:47 2012 locks
mod_dav_svn をインストールする。これを利用すると、Apache 経由で Subversion のリポジトリを操作できる。Subversion 専用のポートを開放する必要がなくなり便利。
$ sudo yum install mod_dav_svn ... 中略 ... Installed: mod_dav_svn.x86_64 0:1.6.11-2.el6_1.4 Complete!
mod_dav_svn は Apache 用のモジュールなので /etc/httpd/conf.d に専用の設定ファイルを追加する。
$ sudo vi /etc/httpd/conf.d/svn.conf
以下のように編集して保存する。
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
AuthType Digest
AuthName "Subversion Repository"
AuthUserFile /etc/httpd/conf.d/svn_auth
Require valid-user
</Location>
Location ディレクティブにはリポジトリのルートを指定し、DAV も同様としている。
この指定の場合、すべてのリポジトリに同じ設定が適用される。リポジトリを追加した場合でも conf ファイルの変更や Apache の再起動が不要なので便利である。リポジトリごとに設定を分ける場合は、ディレクティブの指定を /svn/リポジトリ名として、SVNParentPath の代りに SVNPath、内容はリポジトリへのパスとする。
4 行目以降はダイジェスト認証に関する設定となる。これをおこなっておくことで、ブラウザや Subversion クライアントからリポジトリにアクセスしたとき、ユーザーとパスワードによる保護をおこなえる。
次は認証用のファイルを作成する。
前述の svn.conf の AuthUserFile で指定したディレクトリに touch コマンドでファイルを用意し、パスワード設定をおこなう。USERNAME の部分は SVN のリポジトリにアクセスするユーザーとなる。
Redmine プロジェクトからのリポジトリ参照も、ここで設定した内容が必要となる。Redmine にユーザーを作成済みならば、そのユーザーとパスワードを指定することで、Redmine のログイン情報を利用したリポジトリ参照がおこなえて便利である。
$ sudo htdigest -c /etc/httpd/conf.d/svn_auth "Subversion Repository" XXXX Adding password for XXXX in realm Subversion Repository. New password: Re-type new password:
最後に Apache の設定チェックと再起動をおこない、svn.conf を読ませる。
$ sudo apachectl configtest Syntax OK $ sudo service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
セットアップが完了したので、ブラウザからアクセスしてみる。
さきほど作成した example リポジトリの場合、URL は http://ホスト名/svn/example になる。ここにアクセスすると、ダイジェスト認証によってユーザーとパスワードを問い合わせられるはず。正しい内容を入力すれば、リポジトリの内容が表示される。
リポジトリと Redmine の関連付けについては、以下の説明がわかりやすい。
環境の移行
既に運用されている Redmine から、新環境へ移行する場合の手順を書く。対象は Redmine と Subversion リポジトリ。
まずは Redmine のデータベースを出力する。出力先はユーザー HOME にしておく。ユーザー名が XXXX で、データベースが redmine なら、以下のようなコマンドになる。出力されるファイル名は redmine.sql にした。
$ cd $ mysqldump -u XXXX -p redmine > redmine.sql
今回はデータベースの移行だけ取り上げるが、添付ファイルなどがあるなら、それらも保存しておく。バックアップ対象となりえる構成物については、以下を参照のこと。
つぎに Subversion のリポジトリを出力する。こちらも同様に、ユーザー HOME へ保存する。出力はリポジトリ単位になるので、ファイル名はリポジトリ.svndumpとしておく。XXXX の部分がリポジトリ名になる。
$ cd $ svnadmin dump /var/lib/svn/XXXX > XXXX.svndump
出力されたファイルを新環境に送る。旧環境サーバーから直接 SCP コマンドで送信してもよいが、手元に保存しておきたいので、いったんローカルにダウンロードする。その後、Tera Term や WinSCP などで新環境へ送る。
以降は、これらのファイルが新環境のユーザー HOME 直下に置かれていると仮定して話を進める。
はじめに新環境の Redmine を非公開にする。
この記事の手順で環境構築したなら Redmine はシンボリックリンクで公開されているため、これを消すだけで非公開になる。本来ならメンテナンス用のページ ( 作業中です…とか表示しておく ) を用意し、移行が終わるまでそちらにリンクさせるほうが望ましいのだが、今回はやらない。
$ sudo rm -rf /var/www/html/projects
次に Redmine のデータベースを移行する。念のため、新環境で稼働中のデータベースを redmine-current.sql という名前でバックアップしておく。
$ mysqldump -u XXXX -p redmine > redmine-current.sql
データベースを作成し直す。redmine が空の状態になる。
$ mysql -uroot -p mysql> DROP DATABASE redmine; mysql> CREATE DATABASE redmine DEFAULT CHARACTER SET utf8; mysql> exit;
旧環境から持ってきたバックアップを新環境のデータベースに取り込む。
$ cd $ mysql -u redmine -p redmine < redmine.sql
Redmine のインストール先ディレクトリに移動してから、データベースのマイグレートを実行。
$ cd /var/lib/redmine/ $ rake db:migrate RAILS_ENV=production (in /var/lib/redmine)
その他、テーマやプラグイン、添付ファイルなどがあれば移行しておく。
Redmine 側の作業が終わったら、Subversion のリポジトリを移行する。先に移行先リポジトリを用意し、そこへ旧環境で出力したファイルを読みこむ。
$ cd $ sudo svnadmin create /var/lib/svn/XXXX $ svnadmin load /var/lib/svn/XXXX < XXXX.svndump $ sudo chown -R apache:apache /var/lib/svn/XXXX
以上で移行は完了。シンボリックリンクを張り直して Redmine を公開する。
$ sudo ln -s /var/lib/redmine/public /var/www/html/projects
ブラウザでアクセスして、Redmine の移行に成功していることを確認する。
ちなみに上記のスクリーンショットで使用しているテーマは A1 theme – Redmine plugins である。かっこよくて見やすい。かなりオススメ。
…今回はここまで。次回の内容はとくに決めていない。phpMyAdmin か Git について書くかもしれない。







