ゴミ捨て場

命を大事にしな

AWS無料枠使ってRedmine立てて公開した 後編(Redmine構築編)

前編はこちら。 popotongue7.hatenablog.com

目的に対する結果

  • とりあえずAWS使うとなった時にやるべきことを確認する
    • 多分確認できた。
  • 無料枠で何かやった気分になる
    • ある程度はなった。
  • VPC、EC2、RDSを使ったWebサーバ構築、公開の手順を一通り覚える
    • 覚えた。
  • あやふやなまんまなネットワーク知識を最低限整理する
    • DNSDHCPはまだよくわかってないけどサブネットの作成、ルートテーブルやセキュリティグループの設定あたりは理解できた。
  • 何が無料でできるのかを把握する
    • EC2、VPC、EIP、RDSあたりは把握した。
  • Redmineで(可能ならスクラムの手法を利用して)普通に作業を管理できるようにする

Redmine構築手順

作業アカウントについて

  • うまくいかなかった(というかめんどくさくなった)原因については途中までec2-userでsudoつけて実行していたのを途中でrootに切り替えてやるようになったということだった。
  • 最初からrootでやるべきだった。
$ export ORIG_PATH=$PATH
$ sudo -s -E
$ export PATH=$ORIG_PATH

SELinuxの無効化、ファイアウォールの設定

EC2の初期設定

とりあえず以下などを参照しつつ必要そうなものだけ実施。 qiita.com

必要なパッケージのインストール

開発ツール(Cコンパイラ等)のインストール

yum -y groupinstall "Development Tools"

groupinstallとかいう便利なコマンドがyumにはあるんだなあと感動した。

RubyとPassengerのビルドに必要なヘッダファイルなどのインストール

yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel

PostgreSQLとヘッダファイルのインストール

yum -y install postgresql-server postgresql-devel

Apacheとヘッダファイルのインストール

yum -y install httpd httpd-devel

ImageMagickとヘッダファイル・日本語フォントのインストール

yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts

このあたりは特に問題なく。

Rubyインストール

  • 公式ドキュメントにはソースコード取得、ビルド、インストールの手順があったがうまくいかず。
  • Amazon Linux 2にはamazon-linux-extrasというリポジトリがあり、ここにあるパッケージはamazon-linux-extras install hogehogeでインストールできる。
  • Rubyもあったのでそれを利用し、インストール成功。
amazon-linux-extras install ruby2.4

bunlerインストール

gem install bundler --no-rdoc --no-ri

ドキュメントのインストールをスキップするオプションを付けている。

postgresql側の設定

  • RDSですべて設定済みなのでスキップできると思っていたが、そうでもないことに気づく。
  • 一応psqlでログインして\lしたところ、ロケール(照合順序とCtype)がen_US.UTF-8になっていたので、ja_JP.UTF-8に変更する必要があった。
  • 一旦使用予定だったDBを削除し、同一名称でDBを再作成した。
postgres=> CREATE DATABASE redmine_postgres LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' ENCODING 'UTF8' TEMPLATE template0;

Redmineソースコード取得

  • 以下のコマンドでは取得できなかった。
svn co https://svn.redmine.org/redmine/branches/3.4-stable /var/lib/redmine
production:
  adapter: postgresql
  database: DB名(自分の場合はredmine_postgres)
  host: ホスト名(RDSダッシュボードからRDSのエンドポイントを確認する)
  username: DBユーザ名(RDS作成時に指定したユーザ名、普通はrootかな?)
  password: "******"
  encoding: utf8
  • 設定ファイル config/configuration.yml の作成
    • メールサーバへの接続設定などを記述するが今回はメール配信は不要だったのでスキップ。

gemパッケージのインストール

  • 以下のコマンドでインストール(できたはずだがうまくいかなかった気がする、しかしよく覚えておらず)
bundle install --without development test --path vendor/bundle
  • セッション改ざん防止用秘密鍵の作成
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

このあたりは何事もなく進んだ。

Passengerのインストール

  • Apache上でRedmineなどのRailsアプリケーションを実行するために使われるPhusion Passengerをインストール
gem install passenger -v 5.1.12 --no-rdoc --no-ri
  • PassengerのApache用モジュールのインストール
passenger-install-apache2-module --auto --languages ruby

Apache用設定内容の確認

  • 下記コマンドを実行するとApacheに追加すべき設定が表示される。この情報はこの後Apacheの設定を行うときに使用する。
passenger-install-apache2-module --snippet

Apacheの設定

  • /etc/httpd/conf.d/redmine.conf の以下の箇所を修正
# Redmineの画像ファイル・CSSファイル等へのアクセスを許可する設定。
# Apache 2.4のデフォルトではサーバ上の全ファイルへのアクセスが禁止されている。
<Directory "/var/lib/redmine/public"> # {インストールディレクトリ/publicを指定}
  Require all granted
</Directory>

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

Apacheの起動および自動起動の設定

  • 下記コマンドを実行し、Apacheを起動するとともにシステム起動時に自動起動されるよう設定。
systemctl start httpd.service
systemctl enable httpd.service

Apache上のPassengerでRedmineを実行するための設定

  • Redmineを配置したディレクトリ以下のファイルを、Apacheを実行するユーザー・グループ(CentOSの場合はいずれも"apache")で読み書きできるよう、オーナーを変更する。
chown -R apache:apache /var/lib/redmine

Apacheのコンフィグファイル(/etc/httpd/conf.d/redmine.conf)の設定

  • サブディレクトリでredmineを実行したい(他のアプリも実行できるようにしたい)場合は以下のように設定する。
Alias /redmine /var/lib/redmine/public
<Location /redmine>
  PassengerBaseURI /redmine
  PassengerAppRoot /var/lib/redmine
</Location>

実行

service httpd configtest
systemctl restart httpd.service

反省点

  • 色々ハマったところがあったけどちゃんとメモらずに作業を進めてしまった
  • 以下について何の知識もないままだったので復習しておきたい
    • gem
    • bundler
    • Apache
    • Passenger
  • こういう記事初めて書いてみたけど、手順のコピペみたいになってるのでもうちょっとうまく書けるようになりたい

次は

  • 今回やったような作業を可能な限り自動化してやってみる
  • S3、EFS使って何かしたい