[Trac] 丸ごと環境を別サーバーへ移行する | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Tracを動かしていたサーバーでもろもろ不都合がでてきたので、新しいサーバーへ移行することにしました。

稼動中のプロジェクトもあるため、チケットやWikiもそのまま新しいサーバーへ移行できるよう、手順をまとめてみました。


移行した環境は、「バグトラッキングシステム「Trac」インストール 」の中で書いたもので、DBにはPostgreSQLを使っています。


1. 現在のTracのバージョンを調べ、必要に応じてバージョンアップする


現在動かしているTracのバージョンが最新ではない場合、その古いバージョンのソースを見つけられないというようなことが考えられます。

また、TracのバージョンによってはDBのスキーマ構造が異なるため、異なるバージョンでデータを移行させると、うまく移行できない可能性もあったりします。


こういった場合、一旦現在の環境にてTracのバージョンアップを行い、その後で新しいサーバーへ移行するというような手順も考えたほうがよいでしょう。


参考記事: Tracの使い方 - Trac0.10からTrac0.11へのバージョンアップ -


現在と同じTracの環境を整えるためのソースが一式揃っているのであれば、それを新しいサーバー上で設定し、現行バージョンのままで移行させることも可能かもしれません。

この辺りは、状況に応じての判断が必要になります。


※ バージョン間の変更点は、Changelog にて確認できます。



2. 新サーバーでTracをインストールする


新しいサーバー上でTracをインストールします。


参考記事: バグトラッキングシステム「Trac」インストール


【補足】
上記の記事に書いている作業のうち、「2.1 DB作成」と「2.2 Subversionのリポジトリ作成」は、現在の環境と同様のDB名、リポジトリ名を作っておきます。

また、複数のプロジェクトを移行する場合、移行対象のDBやリポジトリはその数分だけ作成しておきます。


ここまでの作業で、新サーバー上でもTracが動く状態になったかと思います。

ということで、次に本格的にデータの移行を開始します。



3. DBの移行


次に、DB(PostgreSQL)を移行します。

現在Tracを動かしているサーバーにログインし、pg_dumpコマンドを使ってDBの内容をバックアップします。


参考記事: PostgreSQLバックアップ3分クッキング


$ pg_dump tracdb > tracdb.dmp

上記のバックアップしたファイルを新サーバー上に転送しておきます。

次に、新サーバー上で先ほどバックアップしたデータをインポートしますが、2.のTracインストール時にDBを作成し、スキーマが作られているため、一旦DBを削除し中のスキーマを全てクリアにしておきます。


$ dropdb tracdb

※ dropdb時にエラーが出る場合は、一度Apacheを停止させてDBへのコネクションをクローズした上で実行してみると

  うまくいくかもしれません。


$ createdb tracdb

$ psql tracdb < tracdb.dmp


4. アップロードしたファイルや設定ファイルの移行


TracのチケットやWikiに添付しているファイルは、ローカルのディレクトリ内に保存されているため、そのディレクトリを丸ごと移行する必要があります。

添付ファイルは、下記のパスに保存されています。


/path/to/tracpj/attachments

※ 「/path/to/tracpj/」は移行対象のTracプロジェクトのディレクトリなので適宜読み替えてください。


上記のattachmentsディレクトリをtarなどで固めて、新サーバー上の同ディレクトリへ移します。


また、設定ファイルについても移行する必要があるので、同様に新サーバーに移行します。

設定ファイルのパスは、下記になっています。


/path/to/tracpj/conf


5. SVNの移行


リポジトリブラウザで使われる、SVNの移行を行います。
現在Tracを動かしているサーバーにログインし、SVNのリポジトリをバックアップします。


# svnadmin dump /path/to/svn/tracproject/ > tracproject.dmp

次に、上記ファイルを新サーバー上に転送し、リポジトリをインポートします。


# svnadmin load /path/to/svn/tracproject/ < tracproject.dmp


これでTracのサーバー移行は、一通り完了です。

複数のプロジェクトを運用している場合は、「3. DBの移行」から「5. SVNの移行」までをプロジェクトの数だけ作業する必要があります。
最後にApacheを再起動かけて、新しいサーバーの方にアクセスしてみましょう。



おまけ - サーバー移行時のエラー対処法 -


Trac detected an internal error:
SubversionException: ("Can't open file '/home/svn/tracproject/db/uuid': Permission denied", 13)

5.のSVNの移行をrootユーザーで実行したため、上記ファイルの所有者がrootユーザーになっていました。
本来の適切なパーミッションと所有者(インストール時に設定したユーザー)に変更することで解決できました。