概要
下記の環境での Redmine のインストール例です。
- CentOS-7.6.1810
- Apache は既にインストールし、基本設定済み
なお、手順は基本的には下記を参考にして必要なものだけを実施した形ですので、詳細は下記を参考にしてください。
http://blog.redmine.jp/articles/3_4/install/centos/
インストール手順
1. selinux を無効にする
% getenforce
Disabled
2. パッケージのインストール
PostgreSQL
# sudo yum -y install postgresql-server postgresql-devel
開発ライブラリ関連
# sudo yum -y install gcc-c++ httpd-devel apr-util-devel apr-devel openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
ImageMagick と日本語フォント
# sudo yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
Subversion のインストール Redmine は Subversion でソースコードが管理されているので、ダウンロードするために Subversion をインストールします。 ※ tarball からでもインストールできるので、その場合には不要
# sudo yum -y install subversion
3. Ruby のインストール
Ruby のサイトから最新版をダウンロードします。
https://www.ruby-lang.org/ja/downloads/
以降、Ruby-2.6.5 の例です。
% curl -O https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.5.tar.gz
ダウンロードしたアーカイブを展開します。
% tar xvfz ruby-2.6.5.tar.gz
% cd ruby-2.6.5
あとはお決まりの手順ですが、–disable-install-doc を指定すると Ruby のドキュメントのインストールが除外されます。
% ./configure --disable-install-doc
% make
% sudo make install
参考サイトではこの後に bundler をインストールする手順になっていますが、、、
# gem list |grep bundler
上記で、bundler (default: 1.17.2)
のような結果が返ってきた場合にはインストールしなくて良いです。
というか、むしろインストールしてしまうと、新しすぎるものが入ってしまうらしく、逆にバージョンの問題で動作しません。
bundler が入っていない場合には下記のようにインストールを行います。
bundler をインストールします。
参考サイトでは --no-rdoc --no-ri
を指定していますが、最近のバージョンでは -N となった模様。
ちなみに、ドキュメントをインストールしないだけなので、指定しなくても問題ないです。
# sudo gem install bundler -N
4. PostgreSQL 設定
まず、DB クラスタを作成します。
# postgresql-setup initdb
次に、生成された /var/lib/pgsql/data/pg_hba.conf に下記を追加します。
host redmine redmine 127.0.0.1/32 md5
host redmine redmine ::1/128 md5
PostgreSQL を起動します。
# systemctl start postgresql.service
ついでに自動起動も設定しておきます。
# systemctl enable postgresql.service
Redmine 用のユーザーを作成します。
% sudo -u postgres createuser -P redmine
Redmine 用の DB を作成します。
% cd /var/lib/pgsql
% sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
5. Redmine のインストール
Subversion を使って、3.4 の安定版をインストールします。
※ /project/redmine は任意のディレクトリです。
% svn co https://svn.redmine.org/redmine/branches/3.4-stable /project/redmine
config/database.yml を作成して、DB 接続設定をします。 xxxxxxxx は実際のパスワードです。
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: xxxxxxxx
encoding: utf8
config/configuration.yml を作成します。xxx.com
は実際に Redmine を使用するドメイン名になります。
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "localhost"
port: 25
domain: "xxx.com"
rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
Redmine が使用する gem パッケージをインストールします。
% bundle install --without development test --path vendor/bundle
注) 下記のエラーが出て rmagick のインストールに失敗することがあります。 この場合は、 gem install rmagickが失敗する を参照。
Installing rmagick 2.16.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
セッション改ざん防止用秘密鍵の作成
% bundle exec rake generate_secret_token
テーブル作成、デフォルトデータ登録
% RAILS_ENV=production bundle exec rake db:migrate
% RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
6. Passenger のインストール
gem を使ってインストールします。
自分の場合は、なぜか最新版をインストールしたら動作しなかったので下記のようにバージョン指定してインストールしました。
# gem install passenger -v 5.1.12 -N
PassengerのApache用モジュールのインストール 下記コマンドを実行してApache用のモジュールをインストールします。
# passenger-install-apache2-module --auto --languages ruby
Apache に設定すべき内容を確認します。
# passenger-install-apache2-module --snippet
LoadModule passenger_module /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12
PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>
7. Apache の設定
以下のような内容で /etc/httpd/conf.d/redmine.conf を作成します。VirtualHost の内容等々は適宜環境次第で変更してください。/project/redmine/public
は環境にあわせて設定してください。
また、サブディレクトリで動かす方法は、大元のサイトに情報があります。
<VirtualHost *:80>
ServerName redmine.xxx.xxx
DocumentRoot /project/redmine/public
<Directory "/project/redmine/public">
Require all granted
</Directory>
</VirtualHost>
# この部分に passenger-install-apache2-module --snippet の実行結果を貼り付ける
LoadModule passenger_module /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12
PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>
#
PassengerLogFile /var/log/httpd/passenger_error_log
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
PassengerStatThrottleRate 10
Header always unset "X-Powered-By"
Header always unset "X-Runtime"
※ PassengerLogFile の設定は参考サイトでは触れられていませんでしたが後述します。
Redmine のディレクトリ配下を apache ユーザーで変更可能にします。
# chown -R apache:apache /project/redmine
最後に、Apache を再起動して設定を有効化します。 ここまでで、ブラウザで Redmine にアクセスできるようになっているはずなので確認します。
うまくいかない場合
上記が参考サイトで解説されている手順になりますが、自分の場合はこれでは Passenger が機能しませんでした。 passenger-status
を実行してみても下記のようにエラーが出ました。
# passenger-status
ERROR: Phusion Passenger doesn't seem to be running. If you are sure that it is running, then the causes of this problem could be:
1. You customized the instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir command line argument. If so, please set the environment variable PASSENGER_INSTANCE_REGISTRY_DIR to that directory and run passenger-status again.
2. The instance directory has been removed by an operating system background service. Please set a different instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir command line argument.
結論としては、以下の対応が必要でした。
まず、下記のようなエラーが出ていました。
*** Passenger could not be initialized because of this error: Apache is configured to log to a pipe, so Passenger cannot be initialized because it doesn't support logging to a pipe. Please configure Passenger with an explicit log file using the `PassengerLogFile` directive.
Passenger のログはパイプ出力をサポートしていないので、エラーに記載されている通り、前述した PassengerLogFile を設定しました。
これで Apache 上のエラー自体は消えましたが、passenger-status
は依然としてエラーになります。
次に、PrivateTmp を無効とする設定をしました。 下記のようにして、設定ファイルを変更します。
# systemctl edit httpd.service
内容は下記です。
[Service]
PrivateTmp=false
これで、自分の場合は有効になりました。
コメント