プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

EC2 t1.micro -> t2.nano への移行( Redmine 2.4.1 -> 3.3.2 へ移行) その1

開発時のサーバーとして今までは、 EC2 を使って、Subversion+Redmineを立ち上げていました。構築時の記事はこちらをご覧ください。

でも、最近はソースコード管理は Git (Bitbucket) ばかりだし、運用していた EC2 は t1.micro で、そろそろいろいろ新しくしたいなと思っておりました。 このサーバーは t1.micro のリザーブドインスタンスで運用していたのですが、昨年、無事にリザーブドインスタンスの期間が満了したので、新しいサーバーへ移行することにしました。

目をつけていたのは、運用費用を抑えられそうな t2.nano のインスタンス。自分の開発用のredmine動かすぐらいなら、これで十分じゃないかな?という目論見です。

ということで、 t1.micro 上の Redmine 2.4.1 を t2.nano 上の Redmine 3.3.2 へ移行したので、その際の作業を自分用のメモとしてまとめておきます。

一応、移行前後の情報をまとめておきます。

移行前 移行後
EC2インスタンス t1.micro t2.nano
仮想化種類 PV HVM
OS, Ubuntu 64bit 12.04 14.04
Redmine 2.4.1 3.3.2

※ 両方とも、Bitnamiのスタックを利用して立ち上げ

なお、移行前は Subversion のリポジトリも運用していましたが、最近は使ってないので、新サーバーでは Subversion は使わないことにします。

EC2 インスタンスの立ち上げ

というわけで、まずは t2.nano のインスタンスを立ち上げます。といっても、目的は Redmine を動かすことなので、前と同じく、 Bitnami を利用したいと思います。 リンク先ページで東京リージョンを選択して、amiのリンクをクリックするか、AWS のコンソールにログインして、インスタンスの立ち上げを選択して、コミュニティAMIで検索すれば、立ち上げたいAMIを見つけることができます。インスタンスは、財布にやさしい t2.nano を選択しておきます。

あとは、デフォルト設定で起動すれば、新しい環境が出来上がりです。 さて、ここからが、面倒そうなデータのマイグレーションになります。

Redmine 3.3.2 へマイグレーション

さて、新しいサーバー(とRedmine)が立ち上がったので、古いサーバー上の Redmine のデータを移行したいと思います。 幸い、Redmineのプラグインとかは一切入れていなかったので、比較的簡単に移行できると思います。

移行データの取得

古いサーバーにログインして、移行に必要なデータを取得しておきます。下記などに、データのバックアップ方法が載っているので、その通りにします。

データのバックアップ方法 — Redmine.JP

Bitnami のRedmineスタックの場合、 /opt/bitnami/apps/redmine/htdocs/ にファイルなどがあります。

bitnami@ip-10-134-200-227:~$ cd /opt/bitnami/apps/redmine/htdocs/
bitnami@ip-10-134-200-227:/opt/bitnami/apps/redmine/htdocs$ tar zcvf ~/files.tgz files/
bitnami@ip-10-134-200-227:/opt/bitnami/apps/redmine/htdocs$ cd
bitnami@ip-10-134-200-227:~$ 
bitnami@ip-10-134-200-227:~$ mysqldump -u bitnami -pxxxxxx bitnami_redmine > redmine.dump

こんな感じですね。mysqlへの接続時のユーザー名・パスワード・データベース名などは、

bitnami@ip-10-134-200-227:~$ cat /opt/bitnami/apps/htdocs/config/database.yml

で確認できます。

データのリストア

ネットを調べると、いろいろと移行手順が見つかりますが、最終的に、下記のドキュメントを参考に作業を行いました。

Bitnami Redmine Stack for AWS Cloud

準備として、先ほど取得したredmineのデータを新しいサーバーにアップロードしておきます。 次に、mysqlにログインします。

bitnami@ip-172-30-0-93:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
(略)

mysql> 

このときのパスワードが何かがちょっとわからなかったのですが、下記ページのデフォルトのアプリケーションパスワードと同じでした。

Redmine Cloud Hosting on AWS

既存のredmineのデータベースを削除して、もう一度作り直します。

mysql> drop database bitnami_redmine;
Query OK, 55 rows affected (2.01 sec)

mysql> create database bitnami_redmine;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on bitnami_redmine.* to 'bitnami'@'localhost' identified by 'データベースのパスワードを指定';
Query OK, 0 rows affected (0.00 sec)

mysql> 

ここで、パスワードは、 /opt/bitnami/apps/redmine/htdocs/config/database.yml 記載のものと一致させています。 自分で、パスワードを設定した場合は、 database.yml 側のパスワードを変更することになると思います(未確認)。

次に、データのインポートを行います。

bitnami@ip-172-30-0-93:~$ mysql -u root -p bitnami_redmine < redmine.dump 
Enter password: 
bitnami@ip-172-30-0-93:~$ 

上記のredmine.dumpが既存サーバーから落としたデータです。

bitnami@ip-172-30-0-93:~$ cd /opt/bitnami/apps/redmine/htdocs/
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ 
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ mv files/ files.org                                                                                          
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ sudo tar zxvf ~/files.tgz                                                                                    
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ 

次にマイグレーションを行うのですが、その前に、ログファイルの所有者を変更しておきます。というのも、デフォルトのままマイグレーションを行ったら、ログファイルへの書き込み権限がないというエラーで、マイグレーションが失敗したためです。

bitnami@ip-172-30-0-93:~$ cd /opt/bitnami/apps/redmine/htdocs/
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ cd log
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs/log$ ls -l
total 4
-rw-r--r-- 1 daemon daemon 2253 Apr  3 15:23 production.log
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs/log$ cp -p production.log production.log.org                                                                  
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs/log$ sudo chown bitnami production.log                                                                        
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs/log$ ls -l
total 8
-rw-r--r-- 1 bitnami daemon  2253 Apr  3 15:23 production.log
-rw-r--r-- 1 bitnami bitnami 2253 Apr  3 15:23 production.log.org
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs/log$ 

ここまで来たら、マイグレーションを行います。

bitnami@ip-172-30-0-93:~$ cd /opt/bitnami/apps/redmine/htdocs/
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ ruby bin/rake db:migrate RAILS_ENV=production

エラーが表示されなければOKだと思います。

あとは、キャッシュのクリアをして、

bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ ruby bin/rake tmp:cache:clear
bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ ruby bin/rake tmp:sessions:clear

Redmineをリスタートさせます。

bitnami@ip-172-30-0-93:/opt/bitnami/apps/redmine/htdocs$ cd ../../..
bitnami@ip-172-30-0-93:/opt/bitnami$ sudo ./ctlscript.sh restart

新サーバーへアクセスすると、既存のRedmineのユーザーでログインしたり、プロジェクトやチケットが見れればOKだと思います。

あとは、サーバーとしていろいろ設定を行いたいと思います。