redmineの構築、プラグインの導入をふつーにやると面倒くさい。
あと、一旦構築した後redmineのバージョンをあげるのもやっぱり面倒くさい。
→ので、dockerにてプラグインのインストールやらなにやらを手順をコード化して簡単にRedmineの導入が
できるようにしました。
なお動作環境はAWSのECS(Elastic Container Service)を使います。
大きな流れ
1.Dockerfileを用意
2.AWSにてElastic Container Service(ECS)のタスクを定義
3.ECSのインスタンスを用意
今回はまず1を用意します。
1.Dockerfileを用意
redmineの公式イメージがdockerhubにあるのでこれをもとにpluginを導入する手順を
dockerfile化していきます。
ポイントは2つです。
1.ベースのイメージはredmine:x.x.x-passengerを利用する
2.DBのマイグレーションが必要ないものはpluginsフォルダに配置し、マイグレーションが必要なものは別フォルダ(install_plugins)に配置。
→コンテナ起動時にマイグレーションを行うようdocker-entrypoint.shに記載しておきます。
インストールするプラグイン一覧
独断と偏見で入れたプラグインです。
No | プラグインの名前 | 概要 |
---|---|---|
1 | gitmike | githubの雰囲気のデザインテーマ |
2 | backlogs | スクラム開発でおなじみ。ストーリーボード |
3 | redmine_github_hook | redmineとgitを連動 |
4 | redmine Information Plugin | redmineの情報を表示可能 |
5 | redmine Good Job plugin | チケット完了したら「Good Job」が表示 |
6 | redmine_local_avatars | アイコンのアバター |
7 | redmine_startpage plugin | 初期ページをカスタマイズ |
8 | clipboard_image_paste | クリップボードから画像を添付できる |
9 | Google Analytics Plugin | 閲覧PV測定用 |
10 | redmine_absolute_dates Plugin | 日付を「XX日前」 ではなくyyyy/mm/ddで表示してくれる |
11 | sidebar_hide Plugin | サイドバーを隠せる |
12 | redmine_pivot_table | ピボットテーブルできる画面追加 |
13 | redmine-slack | 指定したslack channnelに通知可能 |
14 | redmine Issue Templates | チケットのテンプレート |
15 | redmine Default Custom Query | 一覧表示時のデフォルト絞り込みが可能に |
16 | redmine Lightbox Plugin 2 | 添付画像をプレビューできる |
17 | redmine_banner Plugin | 画面上にお知らせを出せます |
18 | redmine_dmsf Plugin | フォルダで文書管理できる |
19 | redmine_omniauth_google Plugin | googleアカウントで認証可能 |
20 | redmine view customize Plugin | 画面カスタマイズがコードで可能 |
Dockerfile
上記のプラグインをインストール済みとするためのDockerfileです。
なお、ベースイメージは最新(2017/05/19時点)の3.3.3を使用しています。
FROM redmine:3.3.3-passenger
MAINTAINER xxxxxxxxxxxxxxxxx
#必要コマンドのインストール
RUN apt-get update -y \
&& apt-get install -y curl unzip ruby ruby-dev cpp gcc libxml2 libxml2-dev \
libxslt1-dev g++ git make xz-utils xapian-omega libxapian-dev xpdf \
xpdf-utils antiword catdoc libwpd-tools libwps-tools gzip unrtf \
catdvi djview djview3 uuid uuid-dev \
&& apt-get clean
#timezoneの変更(日本時間)
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ENV RAILS_ENV production
#gitmakeテーマのインストール
RUN cd /usr/src/redmine/public/themes \
&& git clone https://github.com/makotokw/redmine-theme-gitmike.git gitmike \
&& chown -R redmine.redmine /usr/src/redmine/public/themes/gitmike
#redmine_github_hookのインストール
RUN cd /usr/src/redmine/plugins \
&& git clone https://github.com/koppen/redmine_github_hook.git
#Redmine Information Pluginのインストール
RUN curl http://iij.dl.osdn.jp/rp-information/57155/rp-information-1.0.2.zip > /usr/src/redmine/plugins/rp-information-1.0.2.zip \
&& unzip /usr/src/redmine/plugins/rp-information-1.0.2.zip -d /usr/src/redmine/plugins/ \
&& rm -f /usr/src/redmine/plugins/rp-information-1.0.2.zip
#Redmine Good Job pluginのインストール
RUN curl -L https://bitbucket.org/changeworld/redmine_good_job/downloads/redmine_good_job-0.0.1.1.zip > /usr/src/redmine/plugins/redmine_good_job-0.0.1.1.zip \
&& unzip /usr/src/redmine/plugins/redmine_good_job-0.0.1.1.zip -d /usr/src/redmine/plugins/redmine_good_job \
&& rm -rf /usr/src/redmine/plugins/redmine_good_job-0.0.1.1.zip
#redmine_startpage pluginのインストール
RUN cd /usr/src/redmine/plugins \
&& git clone https://github.com/txinto/redmine_startpage.git
#Redmine Lightbox Plugin 2 Pluginのインストール
RUN cd /usr/src/redmine/plugins \
&& git clone https://github.com/peclik/clipboard_image_paste.git
#Google Analytics Pluginのインストール
RUN cd /usr/src/redmine/plugins \
&& git clone https://github.com/paginagmbh/redmine-google-analytics-plugin.git google_analytics_plugin
#redmine_absolute_dates Pluginのインストール
RUN cd /usr/src/redmine/plugins \
&& git clone https://github.com/suer/redmine_absolute_dates
#sidebar_hide Pluginのインストール
RUN cd /usr/src/redmine/plugins \
&& git clone https://github.com/bdemirkir/sidebar_hide.git
#redmine_pivot_tableのインストール
RUN cd /usr/src/redmine/plugins \
&& git clone https://github.com/deecay/redmine_pivot_table.git
#redmine-slackのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/sciyoshi/redmine-slack.git redmine_slack
#Redmine Issue Templates Pluginのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/akiko-pusu/redmine_issue_templates.git redmine_issue_templates
#Redmine Default Custom Query Pluginのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/hidakatsuya/redmine_default_custom_query.git redmine_default_custom_query
#Redmine Lightbox Plugin 2 Pluginのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/paginagmbh/redmine_lightbox2.git redmine_lightbox2
#redmine_banner Pluginのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/akiko-pusu/redmine_banner.git redmine_banner
#redmine_dmsf Pluginのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/danmunn/redmine_dmsf.git redmine_dmsf
#redmine_omniauth_google Pluginのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/yamamanx/redmine_omniauth_google.git redmine_omniauth_google
#redmine_omniauth_google Pluginのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/onozaty/redmine-view-customize.git view_customize
#redmine_local_avatars用モジュールを用意(インストールはredmine起動時に実施)
RUN cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/ncoders/redmine_local_avatars.git
#backlogsのインストール用モジュールを用意(インストールはredmine起動時に実施)
RUN mkdir /usr/src/redmine/install_plugins \
&& cd /usr/src/redmine/install_plugins \
&& git clone https://github.com/AlexDAlexeev/redmine_backlogs.git \
&& cd /usr/src/redmine/install_plugins/redmine_backlogs/ \
&& sed -i -e '11,17d' Gemfile
#database.ymlファイルを置くフォルダを用意
RUN mkdir /config
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 3000
CMD ["passenger", "start"]
docker-entrypoint.sh
次にdocker-entrypoint.shファイルです。
githubに公開されているファイル
(https://github.com/docker-library/redmine/blob/41c44367d9c1996a587e2bcc9462e4794f533c15/3.3/docker-entrypoint.sh)
を元にプラグインのインストールを行うコードを記載していきます。
#!/bin/bash
set -e
case "$1" in
rails|rake|passenger)
if [ -e '/config/database.yml' ]; then
if [ ! -f './config/database.yml' ]; then
echo "use external database.uml file"
ln -s /config/database.yml /usr/src/redmine/config/database.yml
fi
fi
if [ -e '/config/configuration.yml' ]; then
if [ ! -f './config/configuration.yml' ]; then
echo "use external configuration.uml file"
ln -s /config/configuration.yml /usr/src/redmine/config/configuration.yml
fi
fi
if [ ! -f './config/database.yml' ]; then
if [ "$MYSQL_PORT_3306_TCP" ]; then
adapter='mysql2'
host='mysql'
port="${MYSQL_PORT_3306_TCP_PORT:-3306}"
username="${MYSQL_ENV_MYSQL_USER:-root}"
password="${MYSQL_ENV_MYSQL_PASSWORD:-$MYSQL_ENV_MYSQL_ROOT_PASSWORD}"
database="${MYSQL_ENV_MYSQL_DATABASE:-${MYSQL_ENV_MYSQL_USER:-redmine}}"
encoding=
elif [ "$POSTGRES_PORT_5432_TCP" ]; then
adapter='postgresql'
host='postgres'
port="${POSTGRES_PORT_5432_TCP_PORT:-5432}"
username="${POSTGRES_ENV_POSTGRES_USER:-postgres}"
password="${POSTGRES_ENV_POSTGRES_PASSWORD}"
database="${POSTGRES_ENV_POSTGRES_DB:-$username}"
encoding=utf8
else
echo >&2 'warning: missing MYSQL_PORT_3306_TCP or POSTGRES_PORT_5432_TCP environment variables'
echo >&2 ' Did you forget to --link some_mysql_container:mysql or some-postgres:postgres?'
echo >&2
echo >&2 '*** Using sqlite3 as fallback. ***'
adapter='sqlite3'
host='localhost'
username='redmine'
database='sqlite/redmine.db'
encoding=utf8
mkdir -p "$(dirname "$database")"
chown -R redmine:redmine "$(dirname "$database")"
fi
cat > './config/database.yml' <<-YML
$RAILS_ENV:
adapter: $adapter
database: $database
host: $host
username: $username
password: "$password"
encoding: $encoding
port: $port
YML
fi
# ensure the right database adapter is active in the Gemfile.lock
bundle install --without development test
if [ ! -s config/secrets.yml ]; then
if [ "$REDMINE_SECRET_KEY_BASE" ]; then
cat > 'config/secrets.yml' <<-YML
$RAILS_ENV:
secret_key_base: "$REDMINE_SECRET_KEY_BASE"
YML
elif [ ! -f /usr/src/redmine/config/initializers/secret_token.rb ]; then
rake generate_secret_token
fi
fi
if [ "$1" != 'rake' -a -z "$REDMINE_NO_DB_MIGRATE" ]; then
gosu redmine rake db:migrate
fi
chown -R redmine:redmine files log public/plugin_assets
if [ "$1" = 'passenger' ]; then
# Don't fear the reaper.
set -- tini -- "$@"
fi
if [ -e /usr/src/redmine/install_plugins/redmine_backlogs ]; then
mv -f /usr/src/redmine/install_plugins/redmine_backlogs /usr/src/redmine/plugins/
bundle update nokogiri
bundle install
bundle exec rake db:migrate
bundle exec rake tmp:cache:clear
bundle exec rake tmp:sessions:clear
set +e
bundle exec rake redmine:backlogs:install RAILS_ENV="production"
if [ $? -eq 0 ]; then
echo "installed backlogs"
touch /usr/src/redmine/plugins/redmine_backlogs/installed
else
echo "can't install backlogs"
fi
set -e
touch /usr/src/redmine/plugins/redmine_backlogs/installed
fi
if [ -e /usr/src/redmine/install_plugins/redmine_local_avatars ]; then
mv -f /usr/src/redmine/install_plugins/redmine_local_avatars /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/redmine_slack ]; then
mv -f /usr/src/redmine/install_plugins/redmine_slack /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/redmine_issue_templates ]; then
mv -f /usr/src/redmine/install_plugins/redmine_issue_templates /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/redmine_default_custom_query ]; then
mv -f /usr/src/redmine/install_plugins/redmine_default_custom_query /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/redmine_lightbox2 ]; then
mv -f /usr/src/redmine/install_plugins/redmine_lightbox2 /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/redmine_banner ]; then
mv -f /usr/src/redmine/install_plugins/redmine_banner /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/redmine_dmsf ]; then
mv -f /usr/src/redmine/install_plugins/redmine_dmsf /usr/src/redmine/plugins/
bundle install --without development test xapian
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/redmine_omniauth_google ]; then
mv -f /usr/src/redmine/install_plugins/redmine_omniauth_google /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ -e /usr/src/redmine/install_plugins/view_customize ]; then
mv -f /usr/src/redmine/install_plugins/view_customize /usr/src/redmine/plugins/
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
fi
if [ ! -f '/usr/src/redmine/plugins/redmine_backlogs/installed' ]; then
set +e
bundle exec rake redmine:backlogs:install RAILS_ENV="production"
if [ $? -eq 0 ]; then
echo "installed backlogs"
touch /usr/src/redmine/plugins/redmine_backlogs/installed
else
echo "can't install backlogs"
fi
set -e
fi
set -- gosu redmine "$@"
;;
esac
exec "$@"
次はこのイメージをAWSのECSにて動作させます。
(次回に続く)