AWS(EC2)でRedmineとGit、Jenkinsを使ったWordPress開発環境の構築と公開を行う
(その3-Redmine)

前回の続き
予告どおりRedmineをインストールしていく。

前回作成したRDSのMySQLインスタンスに接続できるか確認。

$ mysql -h <RDSインスタンスのエンドポイント> -u <ユーザ名> -p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30293
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

接続成功。

Redmine用のデータベースと接続ユーザを作成。

mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to <redmine用ユーザ>@localhost identified by '<パスワード>';
mysql> quit

Redmineに必要なものをインストール

$ sudo yum install -y mysql55-devel curl-devel httpd24-devel
$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y --enablerepo=epel install ruby-devel ImageMagick ImageMagick-devel ipa-gothic-fonts

bundlerのインストール

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

io-consoleのインストール

$ gem install io-console

mysql2をバージョン指定でインストール

$ gem install mysql2 -v '0.3.20'

Redmineをダウンロードして/var/lib/redmineに展開。

$ mkdir ~/tmp
$ cd ~/tmp
$ curl -O http://www.redmine.org/releases/redmine-3.2.1.tar.gz
$ tar xvf redmine-3.2.1.tar.gz
$ sudo mv redmine-3.2.1 /var/lib/redmine

/var/lib/redmineに移動し、Redmineのインストールを実行。

$ cd /var/lib/redmine
$ bundle install --without development test

DB接続情報を編集

$ cd config
$ cp database.yml.example database.yml
$ vim database.yml
production:
  adapter: mysql2
  database: db_redmine
  host: <RDSのエンドポイント>
  username: <redmine用ユーザ>
  password: <パスワード>
  encoding: utf8

セッションのシークレットトークンの作成。

$ bundle exec rake generate_secret_token

Passengerインストールのため、swap領域を確保し、homeディレクトリの権限をいったん緩める。

$ sudo dd if=/dev/zero of=/swap bs=1M count=1024
$ sudo mkswap /swap
$ sudo swapon /swap
$ chmod o+x "/home/work_user"

Passengerのインストール

$ gem install passenger --no-rdoc --no-ri

続けて、apache2モジュールを起動。

$ passenger-install-apache2-module

途中でApacheの設定を変えろと言ってくるが、面倒なので後回し。
設定情報だけコピーしておく。

LoadModule passenger_module /home/work_user/.gem/ruby/2.0/gems/passenger-5.0.26/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /home/work_user/.gem/ruby/2.0/gems/passenger-5.0.26
  PassengerDefaultRuby /usr/bin/ruby2.0
</IfModule>

Apacheの設定ファイルを編集し、コピーした設定情報を貼り付け。

$ sudo vim /etc/httpd/conf/httpd.conf

今回はRedmineとWordPressを同じサーバで使いたいので、サブディレクトリ公開設定。

$ cd /var/www/html
$ sudo ln -s /var/lib/redmine/public redmine
$ ls -l
total 4
-rw-rw-r-- 1 apache www  22 Mar 14 12:53 phpinfo.php
lrwxrwxrwx 1 root   root 23 Mar 14 14:00 redmine -> /var/lib/redmine/public

再びhttpd.confを編集。

$ sudo vim /etc/httpd/conf/httpd.conf
<Location /redmine>
  Options -Indexes 
  RailsBaseURI /redmine
</Location>

Apacheを再起動

$ sudo service httpd restart

http://(Elastic IPのアドレス)/redmineにアクセスして、動作確認。

さて、このままじゃ無用心なんでssl設定。
今回はログインページだけhttpsにしておく。
まず、SSLに対応するためには、「openssl」と「mod_ssl」が必要。
インストール状況を確認。

$ sudo yum list installed | grep ssl
openssl.x86_64                        1:1.0.1k-14.90.amzn1         installed
openssl-devel.x86_64                  1:1.0.1k-14.90.amzn1         @amzn-main

mod_sslが入っていないので、インストール

$ sudo yum -y install mod24_ssl

秘密鍵(RSA)の生成

$ sudo openssl genrsa -out server.key 1024

証明書要求(CSR)の生成
しょせん、オレオレ証明書用なのでテキトーに。

$ sudo openssl req -new -key server.key -out server.pem -sha1
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:(未入力)
Organization Name (eg, company) [Default Company Ltd]:(未入力)
Organizational Unit Name (eg, section) []:(未入力)
Common Name (eg, your name or your server's hostname) []:(Elastic IPのアドレス)
Email Address []:(未入力)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(未入力)
An optional company name []:(未入力)

証明書の発行(自己署名)

$ sudo openssl x509 -in server.pem -out server.crt -req -signkey server.key -days 365 -sha1
Signature ok
subject=/C=JP/ST=Tokyo/L=Default City/O=Default Company Ltd/CN=XXX.XXX.XXX.XXX
Getting Private key

パーミッションの設定
できあがった鍵はそのままだとアレなんで、パーミッションを変更しておく。

$ sudo chmod 400 server.*
$ ls -l
total 12
-r-------- 1 root root 855 Jul 12 08:30 server.crt
-r-------- 1 root root 891 Jul 12 08:29 server.key
-r-------- 1 root root 651 Jul 12 08:29 server.pem

できあがった鍵を所定の場所に配置

$ sudo mv server.* /etc/pki/tls/private/

次に必要なモジュールを読み込まれているか確認。

$ sudo grep mod_ssl.so /etc/httpd/conf.modules.d/*
/etc/httpd/conf.modules.d/00-ssl.conf:LoadModule ssl_module modules/mod_ssl.so
$ sudo grep mod_rewrite.so /etc/httpd/conf.modules.d/*
/etc/httpd/conf.modules.d/00-base.conf:LoadModule rewrite_module modules/mod_rewrite.so

問題なさそう。ちなみに、この設定がどこにあるか見つけるのに時間かかった。

そして、アクセス制御するために、三度httpd.confを編集。
(※先ほどの編集内容に追記しているので、注意!)
loginページ以外でhttpsアクセスしてきたらhttpに、
loginページでhttpアクセスしてきたらhttpsにリダイレクトする。
なお、stylesheetとjavascriptはどちらでもアクセスできるように
リダイレクトから除外している。

<Location /redmine>
  Options -Indexes
  RailsBaseURI /redmine

  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteCond %{REQUEST_URI} !(^.*/login.*$)
    RewriteCond %{REQUEST_URI} !(^.*/stylesheets.*$)
    RewriteCond %{REQUEST_URI} !(^.*/javascripts.*$)
    RewriteRule /.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} (^.*/login.*$)
    RewriteRule /.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
  </IfModule>
</Location>

鍵情報を設定

<VirtualHost *:443>
  SSLCertificateKeyFile /etc/pki/tls/private/server.pem
  SSLCertificateFile /etc/pki/tls/private/server.pem
  SSLCertificateChainFile /etc/pki/tls/private/server.pem
</VirtualHost>

最後にApacheを再起動

$ sudo service httpd restart

ブラウザでアクセスして、動作確認。
ログインページにhttpでアクセスしたら、自動的にhttpsに、
それ以外のページならhttpにリダイレクトすればOK。

さて、次はGitとGitoliteかな。


この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL