実行情報
- 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の起動
自分のPCでブラウザを立ち上げ、http://[AWSグローバルアドレス]:3000
にアクセスするとRedmineが使えるようになる。
これで完成!!!!!
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
Gantt with date
※ Redmine3.2以降は該当プラグインを導入しなくてもよい。
https://github.com/vividtone/redmine_gantt_with_date.git
Issue Templates
Backlogs
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]