Linux活用レシピ > AWS活用 > RHEL7にRedmineを構築するレシピ

EC2のRHEL7にRedmineを構築するレシピ

Redmineの構築
    EC2Redhat Enterprise Linux 7インスタンスに、Redmineの構築を行います。


目次



1. システムの準備

1-1. SSHでの接続

  • SSHで接続し、以下の画面にします。
    login as: ec2-user
    Authenticating with public key "imported-openssh-key"
    Last login: Sun Nov  2 22:14:59 2014 from xxxx
    [ec2-user@ip-n-n-n-n ~]$
    

1-2. システムロケールの変更

    AWSで作成したインスタンスでは、システムロケールが「us」に設定されていますので変更を行います。

  1. 以下のコマンドで変更前の状態を確認します。
    [ec2-user@ip-n-n-n-n ~]$ sudo localectl status
       System Locale: LANG=en_US.UTF-8
           VC Keymap: us
          X11 Layout: us
    

  2. 次に以下のコマンドで日本語ロケールに変更します。
    [ec2-user@ip-n-n-n-n ~]$ sudo localectl set-locale LANG=ja_JP.utf8
    

  3. 先ほどのコマンドで変更出来たか確認します。
    [ec2-user@ip-n-n-n-n ~]$ sudo localectl status
       System Locale: LANG=ja_JP.utf8
           VC Keymap: us
          X11 Layout: us
    
    無事変わっているようです。


1-3. タイムゾーンの変更

    AWSで作成したインスタンスでは、タイムゾーンが「New_York」に設定されていますので変更を行います。

  1. 以下のコマンドで変更前の状態を確認します。
    [ec2-user@ip-n-n-n-n ~]$ sudo ls -al /etc/localtime
    
    lrwxrwxrwx. 1 root root 38 Oct 17 14:38 /etc/localtime -> ../usr/share/zoneinfo/America/New_York

  2. 次に以下のコマンドで日本時間に設定を変更します。
    [ec2-user@ip-n-n-n-n ~]$ sudo rm /etc/localtime
    [ec2-user@ip-n-n-n-n ~]$ sudo ln -s /usr/share/zoneinfo/Japan \
     /etc/localtime
    

     

  3. 先ほどのコマンドで変更出来たか確認します。
    [ec2-user@ip-n-n-n-n ~]$ sudo ls -al /etc/localtime
    
    lrwxrwxrwx. 1 root root 25 Nov 19 13:30 /etc/localtime -> /usr/share/zoneinfo/Japan
    無事変わっているようです。
▲目次


2. 周辺ソフトのインストールと設定

2-1. 開発ツールのインストール

  1. 開発ツールのインストールを以下のコマンドで実施します。
    [ec2-user@ip-n-n-n-n ~]$ sudo yum groupinstall "Development Tools"
    

  2. 以下の通り確認メッセージ表示されますので、[y]を入力しENTERキーを入力します。
    Transaction Summary
    ===================================================================
    Install  26 Packages (+64 Dependent packages)
    
    Total download size: 90 M
    Installed size: 269 M
    Is this ok [y/d/N]:y [ENTER] 
    

  3. 約30秒で以下の通り表示されコンソールが戻れば、開発ツールのインストールは完了です。
    Complete!
    [ec2-user@ip-n-n-n-n ~]$
    

2-2. 「MariaDB」のインストール

  1. 以下の通り「MariaDB」とその開発ツールをインストールします。
    [ec2-user@ip-n-n-n-n ~]$ sudo yum install mariadb-server mariadb-devel
    

    先ほどの通り、確認メッセージは、[y]を入力しENTERキーを入力、その後「Complete!」が出れば、インストール完了です。

  2. 次に「MariaDB」の設定を行います。まずは「server.cnf」
    [ec2-user@ip-n-n-n-n ~]$ sudo vi /etc/my.cnf.d/server.cnf
    
    以下の赤文字の行を[mysqld]セクションに追加し、保存します。
    [mysqld]
    character-set-server = utf8
    
    次は「mysql-clients.cnf」
    [ec2-user@ip-n-n-n-n ~]$ sudo vi /etc/my.cnf.d/mysql-clients.cnf
    
    以下の赤文字の行を[mysql]セクションに追加し、保存します。
    [mysql]
    default-character-set = utf8
    show-warnings
    

  3. 設定が完了したら、「MariaDB」サービスを開始します。
    [ec2-user@ip-n-n-n-n ~]$ sudo systemctl start mariadb
    [ec2-user@ip-n-n-n-n ~]$
    
    正常に起動しているか、確認しましよう。
    [ec2-user@ip-n-n-n-n ~]$ sudo systemctl status mariadb
    
    mariadb.service - MariaDB database server
    Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled)
    Active: active (running) since Tue 2014-11-18 22:41:22 EST; 7min ago
    Process: 11638 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
    Process: 11559 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
    Main PID: 11637 (mysqld_safe)
    CGroup: /system.slice/mariadb.service
    ├─11637 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
    └─11807 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysq...
    [ec2-user@ip-n-n-n-n ~]$
    
    上記の通りであれば、起動できています。

  4. インスタンス起動時に、MariaDBが自動起動する設定 以下のコマンドで、インスタンス起動時に、MariaDBが自動起動するよう設定します。
    [ec2-user@ip-n-n-n-n ~]$ sudo systemctl enable mariadb
    

  5. MariaDB」のrootのパスワードを設定します。
    まず、以下の通りDBに接続します。
    [ec2-user@ip-n-n-n-n ~]$ mysql -uroot
    
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 2
    Server version: 5.5.40-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    MariaDB [(none)]>
    
    「root」ユーザのパスワードが設定されていないことが以下のクエリーで確認できます。
    MariaDB [(none)]> SELECT user,host,password FROM mysql.user;
    
    +------+---------------------------------------------+----------+
    | user | host                                        | password |
    +------+---------------------------------------------+----------+
    | root | localhost                                   |          |
    | root | ip-n-n-n-n.us-west-2.compute.internal       |          |
    | root | 127.0.0.1                                   |          |
    | root | ::1                                         |          |
    |      | localhost                                   |          |
    |      | ip-n-n-n-n.us-west-2.compute.internal       |          |
    +------+---------------------------------------------+----------+
    MariaDB [(none)]>
    
    上記の通り「root」ユーザはホストごとに計4つ存在しますので、それぞれにパスワードを設定します。
    MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('パス');
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> SET PASSWORD 
     FOR 'root'@'ip-n-n-n-n.us-west-2.compute.internal' = PASSWORD('パス');
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('パス');
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> SET PASSWORD FOR 'root'@'::1' = PASSWORD('パス');
    Query OK, 0 rows affected (0.00 sec)
    
    
    パスワードが設置できたか確認します。
    MariaDB [(none)]> SELECT user,host,password FROM mysql.user;
    
    +------+---------------------------------------------+----------+
    | user | host                                        | password |
    +------+---------------------------------------------+----------+
    | root | localhost                                   | *9E406・・ |
    | root | ip-n-n-n-n.us-west-2.compute.internal       | *9E406・・ |
    | root | 127.0.0.1                                   | *9E406・・ |
    | root | ::1                                         | *9E406・・ |
    |      | localhost                                   |          |
    |      | ip-n-n-n-n.us-west-2.compute.internal       |          |
    +------+---------------------------------------------+----------+
    MariaDB [(none)]>
    
    以下の通り[quit]を入力し、DBコンソールから抜けます。
    MariaDB [(none)]> quit
    Bye
    [ec2-user@ip-n-n-n-n ~]$
    

2-3. Rubyのインストール

  • 以下の通り「Ruby」とその開発ツールをインストールします。
    [ec2-user@ip-n-n-n-n ~]$ sudo yum install ruby ruby-devel
    

    これまでと同じく、確認メッセージは、[y]を入力しENTERキーを入力、その後「Complete!」が出れば、インストール完了です。

2-4. wgetのインストール

  • インターネットからRedmineのソースファイルをコンソールからダウンロードできるよう「wget」をインストールします。
    [ec2-user@ip-n-n-n-n ~]$ sudo yum install wget
    

    これまでと同じく、確認メッセージは、[y]を入力しENTERキーを入力、その後「Complete!」が出れば、インストール完了です。

2-5. Apacheのインストール

  • WWWサービスとして「apache」をインストールします。
    [ec2-user@ip-n-n-n-n ~]$ sudo yum install httpd mod_ssl
    

    これまでと同じく、確認メッセージは、[y]を入力しENTERキーを入力、その後「Complete!」が出れば、インストール完了です。

  • 続いてredmineのログファイルの保管場所を作成します。
    [ec2-user@ip-n-n-n-n ~]$ sudo mkdir -p /var/log/httpd/redmine
    
▲目次


3. Redmine本体のインストールと設定

3-1. Redmine本体の入手

  1. Redmine本体を入手します。

    Redmine本体は、Redmineの公式ダウンロードサイトから、安定版(Stable releases)の最新を入手します。

    2014/11/19時点で「2.6.0」が最新で、ファイル名は「redmine-2.6.0.tar.gz」で公開されていますので、以下の通りコンソールから/usr/local/srcにダウンロードします。
    [ec2-user@ip-n-n-n-n ~]$ cd /usr/local/src
    [ec2-user@ip-n-n-n-n src]$ sudo wget \
     http://www.redmine.org/releases/redmine-2.6.0.tar.gz
    


3-2. Redmineの展開

  1. Redmineを展開します。

    ダウンロードしたファイルを/usr/libに展開、/usr/lib/redmineにシンボリックリンクします。
    [ec2-user@ip-n-n-n-n src]$ cd /var/lib
    [ec2-user@ip-n-n-n-n lib]$ sudo tar xzfv \
     /usr/local/src/redmine-2.6.0.tar.gz
    [ec2-user@ip-n-n-n-n lib]$ sudo ln -s redmine-2.6.0/ redmine
    

  2. シンボリックリンクを確認します。

    以下の通りシンボリックリンクが張れていることを確認しましょう。
    [ec2-user@ip-n-n-n-n lib]$ ls -al redmine
    lrwxrwxrwx. 1 root root 14 Nov 19 16:21 redmine -> redmine-2.6.0/
    [ec2-user@ip-n-n-n-n lib]$ 
    


3-3. DB設定ファイルの作成

    RedmineのDB設定ファイルを(/var/lib/redmine/config/database.yml)に作成します。

  1. サンプルが「/var/lib/redmine/config/database.yml.example」に保管されていますので、まずこちらをコピーします。
    [ec2-user@ip-n-n-n-n lib]$ cd /var/lib/redmine/config/
    [ec2-user@ip-n-n-n-n config]$ sudo cp -ip \
     database.yml.example database.yml
    

  2. 「/var/lib/redmine/config/database.yml」をviで開きます。
    [ec2-user@ip-n-n-n-n config]$ sudo vi database.yml
    
    # Default setup is given for MySQL with ruby1.9. If you're running Redmine
    # with MySQL and ruby1.8, replace the adapter name with `mysql`.
    # Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end.
    # Line indentation must be 2 spaces (no tabs).
    
    production:
      adapter: mysql2
      database: redmine
      host: localhost
      username: root
      password: ""
      encoding: utf8
    
    development:
      adapter: mysql2
      database: redmine_development
      host: localhost
      username: root
      password: ""
      encoding: utf8
    

  3. 以下の通り「production:」セクションだけにし、ユーザ名とパスワードを変更して、保管します。
    production:
      adapter: mysql2
      database: redmine
      host: localhost
      username: redmine
      password: xxxxxxxx
      encoding: utf8
    
    ※「xxxxxxxx」部分は任意のパスワードを設定してください。

  4. パーミッションを変更します。
    [ec2-user@ip-n-n-n-n config]$ sudo chmod 600 database.yml
    

3-4. MariaDBの設定

    MariaDBにRedmine用のテーブルを作成します。

  1. MariaDBに接続します。
    [ec2-user@ip-n-n-n-n ~]$ sudo mysql -uroot -p
    
    Enter password: <--MariaDBのrootパスワードを入力します。
    
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MariaDB connection id is 5
    Server version: 5.5.40-MariaDB MariaDB Server

    Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    MariaDB [(none)]>
    

  2. Redmine用のテーブルを以下のクエリーで作成します。
    MariaDB [(none)]> CREATE DATABASE redmine;
    Query OK, 1 row affected (0.00 sec)
    
    MariaDB [(none)]>
    

  3. 作成できたか確認します。
    MariaDB [(none)]> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | redmine            |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    MariaDB [(none)]>
    

  4. Redmine用のユーザを以下のクエリーで作成します。
    MariaDB [(none)]> GRANT ALL ON redmine.* TO 'redmine'@'localhost'
     IDENTIFIED BY 'xxxxxxxx' WITH GRANT OPTION;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]>
    
    ※「xxxxxxxx」部分は「database.yml」ファイル内の「password:」セクションで設定したものを指定します。

  5. DBコンソールから抜けます。
    MariaDB [(none)]> quit
    Bye
    [ec2-user@ip-n-n-n-n ~]$
    

3-5. Redmineのメール接続設定

    Redmine用のメール接続設定を(/var/lib/redmine/config/configuration.yml)に定義します。

      AWSポイント
      EC2のインスタンスは、デフォルトでローカルにメールサーバが起動しており、特にメールサーバの準備を行なわなくとも、Redmineの通知メールなどを、各ユーザの様々なメールアドレスに安全に送信することが出来ますので、非常に便利です。

  1. 設定サンプルが「/var/lib/redmine/config/configuration.yml.example」に保管されていますので、まずこちらをコピーします。
    [ec2-user@ip-n-n-n-n lib]$ cd /var/lib/redmine/config/
    [ec2-user@ip-n-n-n-n config]$ sudo cp -ip \
     configuration.yml.example configuration.yml
    

  2. 「/var/lib/redmine/config/configuration.yml」をviで開きます。
    [ec2-user@ip-n-n-n-n config]$ sudo vi configuration.yml
    
    以下の「#」部分を、編集し削除します。
      email_delivery:
    
      # ==== Simple SMTP server at localhost
      #
      #  email_delivery:
      #    delivery_method: :smtp
      #    smtp_settings:
      #      address: "localhost"
      #      port: 25
      #
    
    ↓↓↓↓↓↓↓↓↓↓以下の通り編集し保存します。
      email_delivery:
    
      # ==== Simple SMTP server at localhost
      #
      # email_delivery:          <---注意ここはコメントのまま!
          delivery_method: :smtp
          smtp_settings:
            address: "localhost"
            port: 25
      #
    
    ※これはローカルのSMTPサーバを使う内容です。
    ※「email_delivery:」は2回記述しないよう上記赤文字注意の部分はコメントのままにします。
    ちなみに、2回宣言すると、以降で実施するMariaDBへのスキーマを作成する際、
    "undefined method 'email_delivery=' for ActionMailer::Base:Class"
    というエラーが表示されスキーマが出来ません。


  3. 編集した「configuration.yml」のパーミッションを念のため変更しておきます。
    [ec2-user@ip-n-n-n-n config]$ sudo chmod 600 configuration.yml
    

3-6. Redmineユーザを作成

  1. 「redmine」ユーザを作成します。
    [ec2-user@ip-n-n-n-n ~]$ sudo useradd redmine
    
  2. 「redmine」ユーザのパスワードを設定します。
    [ec2-user@ip-n-n-n-n ~]$ sudo passwd redmine
    新しいパスワード: ←設定したいパスワードを入力します。
    新しいパスワードを再入力してください:  ←もう一度入力します。
    passwd: すべての認証トークンが正しく更新できました。
    
  3. Redmineのインストール先「/var/lib/redmine」のオーナを、「redmine」ユーザに設定します。
    [ec2-user@ip-n-n-n-n ~]$ cd /var/lib/redmine
    [ec2-user@ip-n-n-n-n redmine]$ sudo chown -R redmine.redmine .
    
▲目次


4. RubyのRedMine関連モジュールのインストール

4-1. bundlerのインストール

    Rubyモジュール(gemパッケージ)のbundlerのインストールを行います。これはシステム共通場所にインストールします。

  1. システム共通にインストールされているgemパッケージを一覧表示します。。
    [ec2-user@ip-n-n-n-n ~]$ gem list
    
    *** LOCAL GEMS ***
    
    bigdecimal (1.2.0)
    io-console (0.4.2)
    json (1.7.7)
    psych (2.0.0)
    rdoc (4.0.0)
    
  2. bundlerがないので、以下の通りインストールします。
    [ec2-user@ip-n-n-n-n ~]$ sudo gem install bundler
    Fetching: bundler-1.7.9.gem (100%)
    Successfully installed bundler-1.7.9
    Parsing documentation for bundler-1.7.9
    Installing ri documentation for bundler-1.7.9
    1 gem installed
    

4-2. その他のRubyパッケージをインストール

    Redmineのインストールディレクトリ下のvender/bundlerにRubyパッケージをインストールします。

  1. まずは以下の通り「ruby-devel」をインストールします。
    [ec2-user@ip-n-n-n-n ~]$ cd /usr/local/src
    
    [ec2-user@ip-n-n-n-n src]$ sudo wget ftp://ftp.muug.mb.ca/mirror/centos/7.0.1406/updates/x86_64/Packages/ruby-devel-2.0.0.353-22.el7_0.x86_64.rpm
    ※RHEL7のパッケージにはないので、CentOS7用をダウンロード&インストール
    [ec2-user@ip-n-n-n-n src]$ sudo rpm -Uvh \
      ./ruby-devel-2.0.0.353-22.el7_0.x86_64.rpm
    
    準備しています... ################################# [100%]
    更新中 / インストール中...
    1:ruby-devel-2.0.0.353-22.el7_0 ################################# [100%]

  2. 次にImageMagicをソースからインストールします。
    [ec2-user@ip-n-n-n-n src]$ http://www.imagemagick.org/download/ImageMagick-6.9.0-1.tar.gz
    ※RHEL7のパッケージにImageMagick-develがなく、
    以降に必要なMagickCore.pcが入手できないので、
    ソースをコンパイル&インストール
    [ec2-user@ip-n-n-n-n src]$ cd ImageMagick-6.9.0-1
    [ec2-user@ip-n-n-n-n ImageMagick-6.9.0-1]$ sudo ./configure
    [ec2-user@ip-n-n-n-n ImageMagick-6.9.0-1]$ sudo make
    [ec2-user@ip-n-n-n-n ImageMagick-6.9.0-1]$ sudo make install
    

  3. これで、その他のrubyパッケージを入れる準備が出来ましたので、redmineユーザになります。
    [ec2-user@ip-n-n-n-n ~]$ su - redmine
    パスワード:  ←先ほど設定したredmineのパスワードを入力します。
    [redmine@ip-n-n-n-n ~]$
     ^^^^^^^^コンソールのユーザ名が「redmine」になります。
    

  4. redmineユーザで、redmineインストールディレクトリ以下の「vendor/bundler」にモジュールをインストールします。
    [redmine@ip-n-n-n-n ~]$ cd /var/lib/redmine
    MagickCore.pcが見つけられるよう、パスを通します。
    [redmine@ip-n-n-n-n redmine]$ export \
      PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    インストールします。
    [redmine@ip-n-n-n-n redmine]$ bundle install --path vendor/bundler \
      --without development test
    
    以下の通りインストールが開始され、エラーなく終了すれば完了です。
    Fetching gem metadata from https://rubygems.org/.........
    Resolving dependencies...
    Installing rake 10.4.2
    Installing i18n 0.7.0
    Installing multi_json 1.10.1
    Installing activesupport 3.2.19
    Installing builder 3.0.4
       :
       :
    Installing rmagick 2.13.4
    Your bundle is complete!
    Gems in the groups development and test were not installed.
    It was installed into ./vendor/bundle
    Post-install message from rmagick: Please report any bugs. See https://github.com/gemhome/rmagick/compare/RMagick_2-13-2...master and https://github.com/rmagick/rmagick/issues/18


5. Redmineの初期化

5-1. セッション暗号化の鍵を作成

    改竄を防止するためのセキュリティ設定を施します。

  1. redmineユーザで、カレントディレクトリを「/var/lib/redmine」にしておきます。
    ※なっていない場合は以下で
    [ec2-user@ip-n-n-n-n ~]$ su - redmine
    パスワード:
    [redmine@ip-n-n-n-n ~]$ cd /var/lib/redmine
    [redmine@ip-n-n-n-n redmine]$
    

  2. 以下のコマンドでクッキーを暗号化する鍵をランダムに生成します。
    [redmine@ip-n-n-n-n redmine]$ bundle exec rake generate_secret_token
    
    コンソールが戻ってくれば完了です。
    [redmine@ip-n-n-n-n redmine]$
    

5-2. MariaDBにスキーマを作成

    Redmineで使うデータベース(MariaDB)にスキーマを作成します。

  1. redmineユーザで、カレントディレクトリを「/var/lib/redmine」にし、以下を実行します。
    [redmine@ip-n-n-n-n redmine]$ bundle exec rake db:migrate \
     RAILS_ENV=production
    
    色々表示されますが、以下のようなメッセージの後、コンソールが戻ってくれば完了です。
    == ChangeChangesetsCommentsLimit: migrating ==================================
    -- change_column(:changesets, :comments, :text, {:limit=>16777216})
    -> 0.0078s
    == ChangeChangesetsCommentsLimit: migrated (0.0079s) =========================

    == AddPasswordChangedAtToUser: migrating =====================================
    -- add_column(:users, :passwd_changed_on, :datetime)
    -> 0.0070s
    == AddPasswordChangedAtToUser: migrated (0.0071s) ============================

    == InsertBuiltinGroups: migrating ============================================
    == InsertBuiltinGroups: migrated (0.1624s) ===================================
    [redmine@ip-n-n-n-n redmine]$
    

  2. データベースにテーブルが作成されていることを確認します。
    まずはデータベースに接続。
    [redmine@ip-n-n-n-n redmine]$ mysql -uredmine -p
    Enter password:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 4
    Server version: 5.5.40-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input
     statement.
    
    続いて、確認する「redmine」データベースを指定
    MariaDB [(none)]> USE redmine
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    
    テーブル一覧を表示
    MariaDB [redmine]> SHOW TABLES;
    +-------------------------------------+
    | Tables_in_redmine                   |
    +-------------------------------------+
    | attachments                         |
    | auth_sources                        |
    | boards                              |
    | changes                             |
    | changeset_parents                   |
    | changesets                          |
    | changesets_issues                   |
    | comments                            |
    | custom_fields                       |
    | custom_fields_projects              |
    | custom_fields_roles                 |
    | custom_fields_trackers              |
    | custom_values                       |
    | documents                           |
    | enabled_modules                     |
    | enumerations                        |
    | groups_users                        |
    | issue_categories                    |
    | issue_relations                     |
    | issue_statuses                      |
    | issues                              |
    | journal_details                     |
    | journals                            |
    | member_roles                        |
    | members                             |
    | messages                            |
    | news                                |
    | open_id_authentication_associations |
    | open_id_authentication_nonces       |
    | projects                            |
    | projects_trackers                   |
    | queries                             |
    | queries_roles                       |
    | repositories                        |
    | roles                               |
    | schema_migrations                   |
    | settings                            |
    | time_entries                        |
    | tokens                              |
    | trackers                            |
    | user_preferences                    |
    | users                               |
    | versions                            |
    | watchers                            |
    | wiki_content_versions               |
    | wiki_contents                       |
    | wiki_pages                          |
    | wiki_redirects                      |
    | wikis                               |
    | workflows                           |
    +-------------------------------------+
    50 rows in set (0.00 sec)
    
    この通り、50本のテーブルがあればOKです。
    データーベースから抜けます。
    MariaDB [redmine]> quit
    Bye
    [redmine@ip-n-n-n-n redmine]$ 
    

5-3. Unicornを構成

    UnicornというRackアプリケーション向けのHTTPサーバを構成します。

  1. まずはRedmineのインストールされたディレクトリ「/var/lib/redmine」に移動し、
    [redmine@ip-n-n-n-n redmine]$ cd /var/lib/redmine
    
  2. Gemfile.localというファイルを作成し、そこに「gem "unicorn"」を記述し、自分が使いたいgemを宣言します。
    [redmine@ip-n-n-n-n redmine]$ echo 'gem "unicorn"' > Gemfile.local
    [redmine@ip-n-n-n-n redmine]$
    
    確認します。
    [redmine@ip-n-n-n-n redmine]$ cat Gemfile.local
    gem "unicorn"
    
    「gem "unicorn"」だけが表示されればOKです。

  3. bundle updateを実行します。
    [redmine@ip-n-n-n-n redmine]$ bundle update
    
    以下の通り「Installing unicorn 4.8.3」と表示されればOKです。
    Fetching gem metadata from https://rubygems.org/.........
    Resolving dependencies...
    Using rake 10.4.2
    Using i18n 0.7.0
    :
    :
    Using request_store 1.0.5
    Using rmagick 2.13.4
    Installing unicorn 4.8.3 <--これが表示されればOK
    Your bundle is updated!
    Gems in the groups development and test were not installed.
    

  4. 設定ファイル「unicorn.rb」を準備します。
    [redmine@ip-n-n-n-n redmine]$ vi config/unicorn.rb
    
    以下の通り記載します。
    listen 8080 # by default Unicorn listens on port 8080
    worker_processes 2 # this should be >= nr_cpus
    pid "/var/log/httpd/redmine/unicorn.pid"
    stderr_path "/var/log/httpd/redmine/unicorn.log"
    stdout_path "/var/log/httpd/redmine/unicorn.log"
    

  5. 起動確認を行います。ポートは8080番を使用します。
    [redmine@ip-n-n-n-n redmine]$ bundle exec unicorn_rails \
     -l 8080 -E production
    
    コンソールは以下のように表示され、接続待ちになります。
    I, [2015-01-04T11:35:56.942549 #1709] INFO -- : listening on addr=0.0.0.0:8080 fd=9
    I, [2015-01-04T11:35:56.942677 #1709] INFO -- : worker=0 spawning...
    I, [2015-01-04T11:35:56.943481 #1709] INFO -- : master process ready
    I, [2015-01-04T11:35:56.944246 #1712] INFO -- : worker=0 spawned pid=1712
    I, [2015-01-04T11:35:56.944393 #1712] INFO -- : Refreshing Gem list
    I, [2015-01-04T11:35:59.486115 #1712] INFO -- : worker=0 ready
    AWSのマネージメントコンソールも、「NETWORK & SECURITY」の「Security Groups」から、以下の通りインスタンスに割り当てられた、セキュリティグループのインバウンドルールに、TCP:8000番を一時的に追加します。
    これで、ブラウザからグローバルアドレスとポート番号8080を指定して接続し、Redmineのログイン画面が、表示されることを確認します。


    確認が出来れば、「CTRL」+「c」で終了します。
    I, [2015-01-04T11:35:56.944393 #1712] INFO -- : Refreshing Gem list
    I, [2015-01-04T11:35:59.486115 #1712] INFO -- : worker=0 ready
    ^CI, [2015-01-04T11:46:27.190356 #1709] INFO -- : reaped # worker=0
    I, [2015-01-04T11:46:27.190557 #1709] INFO -- : master complete
    [redmine@ip-n-n-n-n redmine]$

  6. 起動終了用のUnicornのサービスの作成を行います。
    一旦、ec2-userに戻ります。
    [redmine@ip-n-n-n-n redmine]$ exit
    ログアウト
    [ec2-user@ip-n-n-n-n ~]$
     ^^^^^^^^
    
    Unicornサービス定義ファイル「/etc/systemd/system/redmine-unicorn.service」を作成します。
    [ec2-user@ip-n-n-n-n ~]$ sudo vi \
     /etc/systemd/system/redmine-unicorn.service
    
    以下の通り記述します。
    [Unit]
    Description=Redmine Unicorn Server
    
    [Service]
    WorkingDirectory=/var/lib/redmine
    Environment=RAILS_ENV=production
    SyslogIdentifier=redmine-unicorn
    PIDFile=/var/lib/redmine/tmp/pids/unicorn.pid
    
    ExecStart=/usr/local/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"
    ExecStop=/usr/bin/kill -QUIT $MAINPID
    ExecReload=/bin/kill -USR2 $MAINPID
    [Install]
    WantedBy=multi-user.target
    

  7. Unicornのサービスの起動を確認します。
    [ec2-user@ip-n-n-n-n ~]$ sudo systemctl start redmine-unicorn.service
    [ec2-user@ip-n-n-n-n ~]$
    
    サービスの実行状態を確認します。
    [ec2-user@ip-n-n-n-n ~]$ sudo systemctl status redmine-unicorn.service
    
    redmine-unicorn.service - Redmine Unicorn Server
    Loaded: loaded (/etc/systemd/system/redmine-unicorn.service; enabled)
    Active: active (running) since 日 2015-01-04 15:30:35 JST; 2s ago
    Process: 1245 ExecStop=/usr/bin/kill -QUIT $MAINPID (code=exited, status=0/SUCCESS)
    Main PID: 1253 (ruby)
    CGroup: /system.slice/redmine-unicorn.service
    ├─1253 unicorn_rails master -c config/unicorn.rb -E production
    ├─1256 unicorn_rails worker[0] -c config/unicorn.rb -E production
    └─1259 unicorn_rails worker[1] -c config/unicorn.rb -E production

    1月 04 15:30:35 ip-172-31-14-244.us-west-2.compute.internal systemd[1]: Sta...
    1月 04 15:30:35 ip-172-31-14-244.us-west-2.compute.internal systemd[1]: Sta...
    Hint: Some lines were ellipsized, use -l to show in full.
    上記の通り「active (running) 」になれば起動しています。
    これで、ブラウザからグローバルアドレスとポート番号8080を指定して接続し、Redmineのログイン画面が、表示されることを確認します。


  8. サービスが自動起動するよう構成します。
    [ec2-user@ip-n-n-n-n ~]$ sudo systemctl enable redmine-unicorn.service
    
    結果以下の通り表示されます。
    ln -s '/etc/systemd/system/redmine-unicorn.service' '/etc/systemd/system/multi-user.target.wants/redmine-unicorn.service'

5-4. Apacheを構成

    ApacheのリバースProxy機能を使って公開します。

  1. サーバー用秘密鍵・自己署名証明書の作成
    作成用ディレクトリに移動します
    [ec2-user@ip-n-n-n-n ~]$ cd /etc/pki/tls/certs/
    [ec2-user@ip-n-n-n-n certs]$
    
    オリジナルのMakeファイルをバックアップします
    [ec2-user@ip-n-n-n-n certs]$ sudo cp -ip Makefile Makefile.org
    
    サーバー用証明書有効期限を1年から10年に変更します
    [ec2-user@ip-n-n-n-n certs]$ sudo sed -i 's/365/3650/g' Makefile
    
    サーバー用秘密鍵・自己署名証明書の作成
    [ec2-user@ip-n-n-n-n certs]$ sudo make server.crt
    
    以下の通り入力します。
    umask 77 ; \
    /usr/bin/openssl genrsa -aes128 2048 > server.key
    Generating RSA private key, 2048 bit long modulus
    ........+++
    ................+++
    e is 65537 (0x10001)
    Enter pass phrase:1234 ←表示されません
    Verifying - Enter pass phrase:1234 ←表示されません
    Enter pass phrase for server.key:1234 ←表示されません
    Country Name (2 letter code) [XX]:JP
    State or Province Name (full name) []: ←改行のみ入力
    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) []:redmine
    Email Address []: ←改行のみ入力
    
    サーバー用秘密鍵からパスワード削除します。
    [ec2-user@ip-n-n-n-n certs]$ sudo openssl rsa \
     -in server.key -out server.key
    
    以下の通りパスフレーズを入力します。
    Enter pass phrase for server.key:1234 ←表示されません
    writing RSA key
    

  2. Apacheの設定(SSL)
    SSL設定ファイルのオリジナルをバックアッップします
    [ec2-user@ip-n-n-n-n certs]$ sudo cp -pi /etc/httpd/conf.d/ssl.conf \
     /etc/httpd/conf.d/ssl.conf.org
    
    SSL設定ファイルを編集します。
    [ec2-user@ip-n-n-n-n certs]$ sudo vi /etc/httpd/conf.d/ssl.conf
    
    以下の部分を変更します。
    SSLProtocol all -SSLv2
    ↓以下に変更
    SSLProtocol all -All +TLSv1 +TLSv1.1 +TLSv1.2
    
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    ↓以下に変更
    SSLCertificateFile /etc/pki/tls/certs/server.crt
    
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    ↓以下に変更
    SSLCertificateFile /etc/pki/tls/certs/server.key
    
    </VirtualHost>
    ↓手前に以下3行追加
    RequestHeader set X_FORWARDED_PROTO 'https' ←常にhttpsでリダイレクト
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    </VirtualHost>
    
    ※「RequestHeader set X_FORWARDED_PROTO 'https'」がないとログイン時などにhttpにリダイレクトされてしまい、ブラウザに「接続がタイムアウトしました」と表示されてしまいます。

  3. apacheを起動します。
    [ec2-user@ip-n-n-n-n certs]$ sudo systemctl start httpd.service
    
    サービスの実行状態を確認します。
    [ec2-user@ip-n-n-n-n certs]$ sudo systemctl status httpd.service
    
    httpd.service - The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
    Active: active (running) since 日 2015-01-04 17:15:11 JST; 9s ago
    Main PID: 1435 (httpd)
    Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
    CGroup: /system.slice/httpd.service
    ├─1435 /usr/sbin/httpd -DFOREGROUND
    ├─1436 /usr/sbin/httpd -DFOREGROUND
    ├─1437 /usr/sbin/httpd -DFOREGROUND
    ├─1438 /usr/sbin/httpd -DFOREGROUND
    ├─1439 /usr/sbin/httpd -DFOREGROUND
    └─1440 /usr/sbin/httpd -DFOREGROUND

    1月 04 17:15:11 ip-172-31-14-244.us-west-2.compute.internal systemd[1]: Sta...
    1月 04 17:15:11 ip-172-31-14-244.us-west-2.compute.internal systemd[1]: Sta...
    Hint: Some lines were ellipsized, use -l to show in full.
    上記の通り「active (running) 」になれば起動しています。

  4. SELinuxに、Apacheにネットワーク通信許可を指示します。
    [ec2-user@ip-n-n-n-n certs]$ sudo setsebool -P httpd_can_network_connect=1
    
    ※この設定を行わないと「The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.」というエラーがブラウザに表示され接続できません。


    これで、ブラウザから「https」でグローバルアドレスを指定して接続し、Redmineのログイン画面が、表示されることを確認します。


  5. Apacheサービスが自動起動するよう構成します。
    [ec2-user@ip-n-n-n-n ~]$ sudo systemctl enable httpd.service
    
    結果以下の通り表示されます。
    ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
▲目次


以上で、EC2Redhat Enterprise Linux 7インスタンスへの、Redmineの構築は完了です。