Help us understand the problem. What is going on with this article?

bitnamiで構築されたRedmineを別サーバに引っ越し(bitnami解除 , mysql5.5 -> 5.6, CentOS6.7 -> 7.5)

作業方針・内容

タイトルのとおりです。

bitnamiで構築したRedmineを他のサービス(webサイトやjava系webアプリ)が稼働するサーバに移動します。

bitnamiは redmineを実行するのに必要なミドルウェア(*)が統合されていますが移行先では使わずに以下のようにします。

[*]bitnamiのredmineに統合されている主なミドルウェア

  • webサーバ : 移行先のサーバですでに稼働している apache 2.4.6 を共有
  • databaseサーバ : 外部データベース(RDS for MySQL)を利用 (バージョンは5.6.34
  • Ruby : 移行先サーバに新規インストールする。バージョン2.0.0は揃える

結果

ネットには同様の情報がなく(見つけられず)、移行元と移行先でOSやMySQLのバージョンも違っているので、本当にできるか確信を持てないままの作業でした。

結果、なんとかうまくいきました。

Passengerのビルドエラー、Rakeコマンドエラーを解消するのに苦労しました。一部は移行元のパッケージバージョンをいくつか変更する必要がありました。「途中、やっぱり無理かもしれない。(T_T)」とも思いましたが、移行すれば月額1000円の節約になる動作が早くなることをモチベーションに頑張りました。

サーバ基本情報(移行元、移行先)

移行元

  • さくらVPS 1GB
  • Centos 6.7 $ cat /opt/redhat-release
  • redmine専用
  • bitnamiで構築
  • redmine 3.1.0.stable
  • ruby 2.0.0-p645 $ /opt/redmine-3.1.0-0/ruby/bin/ruby -v
  • rails 4.2.3
  • database apapter : mysql2
  • plugin : redmine_github_hook(bitbucketと連動)
  • mysql 5.5.42 $ /opt/redmine-3.1.0-0/mysql/bin/mysql --version
  • apache 2.4.16 $ /opt/redmine-3.1.0-0/apache2/bin/apachectl -v
  • passenger-5.0.6

[参考1]テーマはカスタマイズしていますが今回は意識することはありませんでした。(Redmineディレクトリをまるごと移動した場合、最初から移行前の状態が復元できます。)

[参考2]上記の情報の一部はRedmineから取得できます。(メニュー > 管理 > 情報)

移行先(移行前の状態)

  • 某VPS(3core / 6GB)
  • Centos 7.5
  • apache 2.4.6
  • mysql なし
  • ruby, rails, passenger なし

作業手順

おおざっぱに書くと以下のような流れです。

  • データベース移行
  • Redmine本体移行
  • 移行先での環境構築

データベース移行

まずはデータベースを移行します。

redmine公式サイトのサポートするデータベースの補足にmysql5.6以上は既知のissueが3つあることが記載されている。

一つはMariaDB対応、一つは5.7対応なので今回は無関係。

残りのissueを読むと並行処理系のテストが常に失敗するということのようでした。

ヘビーな使い方をするわけではないので許容できそうな気がしますが全く動かないのでは困るし引っ越し作業が無駄になってしまうので、まずはデータベースだけ切り替えて試してみます。

手順は以下の通りです。

  • 現行のDBサーバからバックアップを取得
  • RDSへの接続許可
  • MySQLへの接続許可(ユーザ作成と権限付与)
  • 取得したバックアップを移行先DBサーバにリストア
  • redmineのデータベース定義を移行先DBに変更
  • Redmine再起動

データベースバックアップ

バックアップは、mysqldump(これもbitnamiに含まれている) を使って簡単に取得できます。
以下のコマンドを実行すると、sqlファイルが作成されます。
接続情報は、 config/database.yml に記載されています。

/opt/redmine-3.1.0-0/mysql/bin/mysqldump -u bitnami -p<your password> -h localhost bitnami_redmine > /usr/local/src/redmine_bk_`date +%Y-%m-%d`.sql

RDS接続許可

AWSコンソールからRDSへの接続許可を設定します。(これをやらないとMySQLの前で接続拒否されるので接続できません)
具体的には 当該インスタンスに紐付いているSecurityGroupのインバウンドで、Redmineが動作しているサーバのIPアドレスを追加します。

RDSインバウンド許可設定

RDS上にRedmine用データベースの作成

mysql > create database redmine;

ユーザ作成・権限付与

作成したデータベースへへのフルアクセス権限を持つユーザ作成します。
具体的な方法は、ネット上にたくさん掲載されているので参照してください。

redmine接続設定変更

database.ymlの host , username , password を更新します。

vi /opt/redmine-3.1.0-0/apps/redmine/htdocs/config/database.yml

redmine再起動

/opt/redmine-3.1.0-0/ctlscript.sh restart

動作確認

チケットを追加して意図した移行先のデータベースに登録されているか確認します。
以下は issue テーブルで確認するクエリです。

 select id, subject from issues order by id desc LIMIT 1\G

ちゃんと追加されている。なんとかなりそうなので引っ越しを実行。

Redmine本体の引っ越し

バックアップリスト手順だと files フォルダをバックアップするだけだが今回はrsyncを使ってごっそり引っ越しました。
redmineが格納されているのはhtdocsディレクトリです。

rsync -av /opt/redmine-3.1.0-0/apps/redmine/htdocs  <server ipaddress or domain>:/home/<your user>/

移行先での作業

/opt下にredmine-3.1.0として配置

mv /home/<your user>/htdocs /opt/redmine-3.1.0

Redmineディレクトリのオーナ変更

いろいろやる時に権限エラーが出たので作業するユーザを所有者とする。(最後にapacheに所有者を変更します)

sudo chown -R <your user>  /opt/redmine-3.1.0

config/database.yml の設定

移行前に設定していればそのまま利用。

CentOSパッケージインストール

実際には本節と次節以降(gemパッケージインストールとpassengerビルド)で実行エラー、インストールエラーが多発していったりきたりしました。

本節と次節の記載は最終的な状態とコマンド履歴を突き合わせて、こうすればうまくいくだろうと思われるものを整理しました。

$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
$ sudo yum -y install httpd httpd-devel
$ sudo yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
$ sudo yum -y install ruby ruby-devel

サービス起動(および再起動時の自動起動)

$ sudo systemctl start  mysqld
$ sudo systemctl enable mysqld

Gemパッケージインストール

$ gem install bundler    -v '1.16.6' --no-rdoc --no-ri
$ gem install rack       -v=1.6.4    --no-rdoc --no-ri
$ gem install rake       -v '12.3.1' --no-doc --no-ri
$ gem install passenger  -v=5.0.30   --conservative --no-rdoc --no-ri
$ gem install mysql2     -v '0.3.21' --no-rdoc --no-ri
$ gem install ruby-mysql -v '2.9.14' --no-rdoc --no-ri

Passengerインストール

以下のオプションを付与して実行します。ビルドに時間がかかります。某VPSでは5分ほど要しました。

passenger-install-apache2-module --auto --languages ruby

なお、末尾のログは以下のような感じでした。

・・・省略・・・
Validating installation...

 * Checking whether this Passenger install is in PATH... (!)

   ・・・省略・・・

Detected 0 error(s), 2 warning(s

途中、以下の警告が大量発生しましたが、特に問題なかったです。

#  warning _FORTIFY_SOURCE requires compiling with optimization (-O)

bundle実行

アプリケーションルートで以下のコマンドを実行します。

$ /opt/redmine-3.1.0
$ bundle install --without development test --path vendor/bundle

この時、以下のようなログが出力されました。

ログ出力例
・・・
Bundle complete! 32 Gemfile dependencies, 53 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `./vendor/bundle`

apache設定

redmine用のconfig追加

/etc/httpd/conf.d/redmine.conf
# Redmineの画像ファイル・CSSファイル等へのアクセスを許可する設定。
# Apache 2.4のデフォルトではサーバ上の全ファイルへのアクセスが禁止されている。
# SELinuxの設定にも注意
<Directory "/opt/redmine-3.1.0/public">
  Require all granted
</Directory>

# ★Passengerの基本設定★
# passenger-install-apache2-module --snippet で表示された設定を記述。
# 環境によって設定値が異なるため以下の5行はそのまま転記せず、必ず
# passenger-install-apache2-module --snippet で表示されたものを使用すること。
LoadModule passenger_module /usr/local/share/gems/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/share/gems/gems/passenger-5.0.30
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>


# 必要に応じてPassengerのチューニングのための設定を追加(任意)。
# 詳しくはPhusion Passenger users guide(https://www.phusionpassenger.com/library/config/apache/reference/)参照。
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
PassengerStatThrottleRate 10

Header always unset "X-Powered-By"
Header always unset "X-Runtime"

仮想ホスト設定

/etc/httpd/conf/httpd.conf
NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
    ServerName redmine-travel.nyango.com
    DocumentRoot /opt/redmine-3.1.0/public
</VirtualHost>

Redmineディレクトリのオーナ変更(WEBサーバに)

chown -R apache:apache /opt/redmine-3.1.0

HTTPサーバ起動と自動起動

$ sudo systemctl start httpd
$ sudo systemctl enable httpd

トラブルシューティング

Bundler::PermissionError (Bundler::PermissionError)

/var/log/httpd/error_log
Bundler::PermissionError (Bundler::PermissionError)

・・・ 中略 ・・・

  /usr/local/share/gems/gems/passenger-5.0.30/src/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>'
  /usr/local/share/gems/gems/passenger-5.0.30/src/helper-scripts/rack-preloader.rb:29:in `<main>'

対策

  • アプリルート(/opt/redmine3.1.0)の所有者をapacheに変更(ubuntuならwww-data)
  • SELinux無効化
setenforce 0  

上記は暫定OFFです。サーバが再起動するとONになってしまいます。
恒久OFFには/etc/selinux/configの以下の値を変更します。

変更前)SELINUX=enforcing
変更後)SELINUX=disabled

その他の設定

Gitコミット時に実行する処理定義の更新(webhooks)

bitbucketの当該リポジトリの設定からwebhooks設定を更新する。

参考URL

RedmineInstall - Redmine
RedmineBackupRestore - Redmine
Redmine 3.4をCentOS 7.3にインストールする手順

s-katsumata
東京在住の二児の父。絶賛育児中。業界歴21年、フリーランス歴13年。在宅でシステム開発(受託、自社パッケージ)に従事。生涯コード書いていたいアラフィフプログラマ。悩みは老眼。ミッションはスクラッチ開発した「みなたび」を使って地域で頑張る人を応援
https://nyango.com/services/travel
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away