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

AWS EC2にDockerでRedmineを導入

More than 1 year has passed since last update.

実行情報

  • Amazon Linux AMI (EC2) 新規立ち上げ
  • ec2-user で実行

Dockerとは?

簡単に言うと、コンテナ型の仮想環境のこと。
それぞれ独立したプロセスで環境が起動することで、各コンテナが干渉し合わない作りとなっている。

また、仮想環境と言われるだけあり仮想ネットワークI/Fが用意されておりコンテナごとにポートを設定できたりするのもメリット。

docker-composeとは?

各Dockerコンテナをリンクさせるためのユーティリティである。
今回の場合は、RedmineコンテナとMySQLコンテナのそれぞれ独立したコンテナをリンクさせることで、Redmineで登録した情報をMySQLでデータを保存をできる仕組みに利用。

既存パッケージの最新化

新規で立ち上げたサーバーのため、デフォルトでAWS EC2にインストールされている各モジュールを最新化する。

$ sudo yum update -y

Dockerインストール

$ sudo yum install -y docker

Dockerサービス起動

Dockerのインストールが成功したら、Dockerサービスを起動しないと利用ができない。
そのため、Dockerサービスを起動する。

※ 以下コマンドは、起動だけではなく起動確認も含む。

$ sudo service docker start
$ sudo service docker status
$ sudo service docker info

docker-compose導入(1.22.0)

docker-compose.ymlファイルに記載するversion3.5を利用したいため、2018/09/03時点最新バージョンを導入する。
インストールはrootユーザーで実施する。

$ sudo su
$ curl -L --fail https://github.com/docker/compose/releases/download/1.22.0/run.sh > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ exit

ユーザーパス設定

.bash_profileのPATHに /usr/local/bin を追加してdocker-composeコマンドを利用できるように設定。

$ vi .bash_profile
$ source .bash_profile

ec2-userにdockerグループの紐づけ

インストールした後に何も設定をせずにec2-userユーザーでdockerコマンドやdocker-composeコマンドを実行すると権限エラーが発生。

権限エラーを解消するためには、dockerグループにec2-userを紐づける必要がある。

$ sudo su
$ grep -i docker /etc/group
$ sudo gpasswd -a ec2-user docker
$ grep -i docker /etc/group
$ exit

docker-compose.ymlファイルの作成

今回はRedmineとMySQLのDockerコンテナを作成するようなymlファイルを作成。
Redmineに登録する情報はUTF-8で登録するようにする。

また、Dockerを再起動したときにDBデータやRedmineデータがリセットされないようにコンテナ内で情報を保存せずに、AWS EC2サーバに保存するように設定。

version: '3.5'

services:
  redmine:
    image: redmine:passenger
    container_name: redmine
    ports:
      - 3000:3000
    environment:
      TZ: Asia/Tokyo
      REDMINE_DB_MYSQL: mysql
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: redmine
      REDMINE_DB_ENCODING: utf8
    depends_on:
      - mysql
    restart: always
    volumes:
      - /var/www/redmine/files:/usr/src/redmine/files
      - /var/www/redmine/log:/usr/src/redmine/log
      - /var/www/redmine/plugins:/usr/src/redmine/plugins
      - /var/www/redmine/public/themes:/usr/src/redmine/public/themes

  mysql:
     image: mysql:5.7
     container_name: mysql
     restart: always
     environment:
       TZ: Asia/Tokyo
       MYSQL_ROOT_PASSWORD: devops
       MYSQL_DATABASE: redmine
       MYSQL_USER: redmine
       MYSQL_PASSWORD: redmine
     volumes:
       - mysql-data:/var/lib/mysql
     command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

volumes:
  mysql-data:
    name: mysql-redmine

Dockerコンテナの初期設定

Dockerコンテナの起動

※ docker-compose.ymlファイルが配置されているディレクトリに移動する

$ docker-compose up -d
$ docker ps

Remineコンテナ

$ docker exec redmine bundle exec rake redmine:load_default_data RAILS_ENV=production REDMINE_LANG=ja

MySQLのConfigを設定する

※ mysql_config_editorはMySQL5.6以降で使用可能

$ docker exec -it mysql mysql_config_editor set --host=localhost  --user=redmine  --password

AWS EC2ポート開放

docker-compose.ymlでポート3000番を指定したため、サーバのインバウンド3000番を許可する必要がある。

AWS EC2にアクセスして「セキュリティグループ」を選択。
以下の図のように3000番ポートを登録することで3000番ポートが外部から接続できるようになる。
redmine_set1JPG.JPG

Redmineの起動

自分のPCでブラウザを立ち上げ、http://[AWSグローバルアドレス]:3000 にアクセスするとRedmineが使えるようになる。
これで完成!!!!!
redmineJPG.JPG

pluginの導入

docker-compose.ymlで設定した /var/www/redmine/plugins ディレクトリに各種Redmineのpluginを配置するだけで導入が可能。

gitの導入

pluginは主にGithubから取得するためgitが必要となってくる。
gitはEC2デフォルトにインストールされていないため個別でインストール。

$ sudo yum install -y git

plugin(Gantt With Date Plugin)の導入

今回は試しにRedmineプラグインの1つGantt With Date Pluginを導入する。
/var/www/redmine/pluginsはrootユーザでのみ配置できるためスイッチが必要。

plugin一覧はこちら

$ cd /var/www/redmine/plugins
$ sudo su
$ git clone https://github.com/akiko-pusu/redmine_issue_templates.git

データベース更新

docker起動中に実行する。

$ docker exec redmine bundle exec rake redmine:plugins:migrate RAILS_ENV=production

コンテナの再起動

$ docker-compose down
$ docker-compose up -d
$ docker ps

補足

① Docker-Composeのバージョンアップ

以下コマンドの1.22.0をバージョンアップしたい数値に置き換えて実行することでバージョンアップが可能。

$ sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$  docker-compose -v

② Dockerコンテナのデタッチ

docker-compose up -dコマンドをDockerコンテナをアタッチした後に、デタッチしたい場合は以下のコマンドを実行する。

$ docker-compose down
$ docker ps

③ Redmine Plugin

Absolute dates

https://github.com/suer/redmine_absolute_dates.git

Gantt with date

※ Redmine3.2以降は該当プラグインを導入しなくてもよい。
https://github.com/vividtone/redmine_gantt_with_date.git

Issue Templates

https://github.com/akiko-pusu/redmine_issue_templates.git

Backlogs

Backlogsの導入は少し工夫が必要となる。

https://github.com/backlogs/redmine_backlogs

Dockerfile作成

Docker公式のredmineにカスタマイズが必要となる。

FROM redmine:passenger

RUN apt-get update && apt-get install -y --no-install-recommends \
      gcc \
      make \
      g++

RUN bundle install --without development test \
    && gem install holidays --version 1.0.3 \
    && gem install holidays

RUN export RAILS_ENV=production && bundle install --without development test
Dockerイメージをビルド
$ docker build ./ -t redmine_build
$ docker image
docker-composeファイルの編集

変更前

services:
  redmine:
    image: redmine:passenger

変更後

services:
  redmine:
    image: redmine_build:latest
再起動

docker ps コマンドで表示されたIMAGE欄がredmine_buildであれば完了

$ docker-compose down
$ docker-compose up -d
$ docker ps

④ Dockerイメージの削除

$ docker rmi [IMAGE ID]

関連するイメージファイル全てを削除する場合

$ docker rmi -f [IMAGE ID]
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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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