コラム・事例

ECSでRedmineを構築する

やってみた
#業務効率化

はじめに

こんにちは、株式会社SMSデータテックの社員Mです。
今回はdockerfile編集とECSの設定を解説します。

本記事対象の方

ドメインの設定や環境の構築を、ご自身で設定できる方

ECSで構築するメリット

ECS環境で立ち上げる理由としては、サーバーなどの管理運用が不要なためという点です。
また、最初の環境構築が終われば、イメージのタグを編集するだけでアップデート可能です。

新規CTA

構成図

全体の構成図となります。
本記事で紹介する内容はECSとdockerfileです。
ELBについても紹介していますが、設定に必要な部分のみ記載しています。
今回は、上記構成図の赤線で囲った箇所以外のAWS環境が作成できている前提で進めていきます。

使用技術について

今回使用するサービス、技術について簡単に説明します。

ECSとは

ECSとは、Amazon Elastic Container Service(Amazon ECS)の略です。AWS上で、Dockerコンテナを簡単に管理、配置、スケーリングをすることができます。

ECRとは

ECRとは、Amazon Elastic Container Registry(Amazon ECR)の略です。AWSが提供する、Dockerコンテナイメージのプライベートレジストリサービスのことです。ECRを使用することで、Dockerイメージを安全に保存、管理、デプロイできます。

ELBとは

ELBとはElastic Load Balancing(Amazon ELB)の略です。AWSが提供する負荷分散サービスです。ELBは、複数のEC2インスタンスや他のサービス間でネットワークトラフィックを自動的に分散させることで、高可用性とスケーラビリティを提供します。これにより、アプリケーションのパフォーマンスが向上し、障害が発生した際の影響を最小限に抑えることができます。

Dockerとは

Dockerとは、ソフトウェアのコンテナ化を実現するためのオープンソースのプラットフォームのことです。コンテナは、アプリケーションと定ファイルなどをまとめてパッケージ化し、どの環境でも一貫して動作させることができる技術です。

Dockerfileとは

Dockerfileとは、Dockerのイメージを作成するための手順を記載したテキストファイルのことです。テキストファイルで操作するため、編集管理が非常に簡単です。

DockerfileからRedmineを構築する方法

手順は下記の通りに進めていきます。

  1. Pluginsをインストール
  2. Dockerfileの編集
  3. ECRにpush
  4. ELB作成
  5. ECS設定
  6. ELB編集

Pluginsインストール

dockerfileが存在するディレクトリにpluginsというディレクトリを作成します。

そのディレクトリに移動し、下記コマンドを実行します。

git clone https://github.com/redmica/redmine_issues_panel 
git clone https://github.com/redmica/redmica_ui_extension 
git clone https://github.com/suer/redmine_absolute_dates 
git clone https://github.com/tkusukawa/redmine_work_time

各種Pluginsについての説明

Redmineの使用を改善していくためにDockerfileに幾つかのpluginsをinstallしています。
どんなpluginsなのか簡単に説明していきます。

issues panel

issure panel

チケットをパネル形式で表示してくれるものです。
チケットがステータス毎で分かれているので、進捗状況が分かりやすくなります。

ui extension

ui extension

セレクトボックスで検索が行えるようになります。

absolute dates

absolute dates

Redmineはデフォルトのままだと「〇日前」と表示されます。

このpluginsを入れると、日付が表示されるようになります。

work time

work time

このpluginsで工数の設定、算出が行えるようになります。

Dockerfile編集

ここからDockerfileの編集を行っていきます。
Dockerのイメージを作成し、実行することでDockerコンテナを作成することができます。
今回使用するイメージredmine:5.1.1です。

redmine:5.1.1

実行内容の説明

ビルドするイメージのベースとなるイメージを指定しています。

FROM redmine:5.1.1

必要なパッケージを更新させ、不要なパッケージを削除します。
イメージの容量を小さく保つことができます。

RUN apt-get update
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*

ローカルに保存したpluginsを、コンテナ内にコピーしています。
左側でローカルに保存したpluginsのディレクトリを参照し、右側でコンテナ内のディレクトリを指定しています。

COPY ./plugins/redmine_issues_panel/ /usr/src/redmine/plugins/redmine_issues_panel
COPY ./plugins/redmica_ui_extension /usr/src/redmine/plugins/redmica_ui_extension
COPY ./plugins/redmine_absolute_dates /usr/src/redmine/plugins/redmine_absolute_dates
COPY ./plugins/redmine_work_time /usr/src/redmine/plugins/redmine_work_time

ディレクトリを/usr/src/redmineにします。相対参照で動いているファイルもあるので、必ずこのディレクトリに移動させます。

WORKDIR /usr/src/redmine

所有権をredmineで統一させます。

RUN chown -R redmine:redmine ./

saml.rbをconfig/innitializers/saml.rbにコピーさせます。samlファイルはここを参照して動いています。

RUN cp plugins/redmine_omniauth_saml_saml.rb config/initializers/saml.rb

最後にbundle installを行います。ファイルの依存関係をインストールします。

RUN bundle install

ECRにpush

作成したdockerfileをECRにpushしていきます。
コマンドについては、ECRの画面「プッシュコマンドの表示」から参照できます。

認証トークンを取得し、レジストリに対してDocker クライアントを認証

aws ecr get-login-password --region <リージョン> | docker login --username AWS --password-stdin <AWSアカウントID>

Docker イメージを構築します。

docker build -t <イメージ名> .

リポジトリにイメージをプッシュできるように、イメージにタグを付けます。

docker tag <イメージ名>:<tag> <pushするイメージ名>:<tag>

新しく作成した AWS リポジトリにこのイメージをプッシュします

docker push <pushするイメージ名>:<tag>

ELB作成

ロードバランサーはALB、インターネット向けで作成します。
リスナーとルーティングは後ほど設定しますので、デフォルトで作成してください。

ターゲットグループ作成

ターゲットタイプ:IPアドレス
プロトコルポート:HTTP
ポート番号:3000
ヘルスチェックパス:/login
間隔:300

その他はデフォルトでOKです。

ECS設定

タスク定義

ECRにpush後、ECSのタスク定義を作成します。

起動タイプ:Fargate
オペレーティングシステム:Linux/X86_64
CPU:0.5vCPU
メモリ:1GB
タスクロール:デフォルトのままで問題ありません
タスク実行ロール:デフォルトのままで問題ありません

メモリ、CPUは最小要件で作成しています。

環境変数:

キー値のタイプ
REDMINE_DB_DATABASEデータベース名
REDMINE_DB_MYSQLRDSエンドポイント
REDMINE_DB_PASSWORD RDSパスワード  
REDMINE_DB_USERNAMERDSユーザー名
REDMINE_PLUGINS_MIGRATEtrue

pluginsを導入しない場合、REDMINE_PLUGINS_MIGRATEは不要です。

デフォルトのままで問題ありません。
awslogs-groupはタスク定義の名前が自動的に入ります。

ボリュームタイプ:EFS
ファイルシステム:作成したEFS
ルートディレクトリ:「/」のままで問題ありません
アクセスポイントID:なし

ソースボリューム:ボリューム名
コンテナパス:/usr/src/redmine/files

redmineのファイルは、files配下に保存されるため、コンテナパスは/usr/src/redmine/files
となります。

クラスター作成

デフォルトの設定でOK

サービス作成

ファミリー:タスク定義で設定したタスク定義名

VPC:ECSを配置するVPC
サブネット:prvate subnet
セキュリティグループ:80番、443番、3000番が空いたセキュリティグループ
パブリックIP:オフ

ロードバランサーの種類Application Load Balancer
ヘルスチェック猶予時間:900秒
リスナー:既存のリスナーを使用
ターゲットグループ:作成したターゲットグループ

ELB編集

ELBにリスナーを追加します。

アクションのルーティング:ターゲットグループへ転送
ターゲットグループ:作成したターゲットグループ

証明書は取得した証明書を選択してください。

HTTPS:443の条件を編集します。

ホストヘッダーを選択し、redmineのURLを入力
HTTPS:443の設定は以上です。

最後にHTTP:80のデフォルトの設定も編集していきます。

アクションのルーティングをURLにリダイレクト

以上で設定終了です。

ECS起動後、URLからredmineにアクセスできるようになります。

おわり

ECSでRedmineを構築してみました。多くの記事がdocker-composeやEC2を使った方法を紹介していますが、ECSでの動作方法についてはあまり見かけませんでした。ECSでRedmineを運用することで、Dockerfileのアップデートだけで済み、サーバーの管理が不要になる点は非常に大きなメリットです。
アップデートも簡単で、バージョンを変更してupgradeコマンドを実行するだけで済むため、時間もかかりません。この方法により、管理の負担を大幅に軽減できます。
この記事が、他の方々の負担を少しでも減らすことができることを願っています。

⇒STEP2:RedmineのSSO設定をAWSで行う

筆者イメージ

筆者:R・M(20代)

所属:ハイブリット・マルチクラウド部

まったくの未経験でこの業界に飛び込んできた若手。
パッと見はビジュアル系?
でもプレゼンしだすと、少し胡散臭さもあわせもったセールスように華麗なプレゼンを見せる。
読者と一緒にAWSのプロになりたい、そんな20代。

新規CTA
まずはお気軽にご相談ください
お問い合わせフォーム

その他のイベント・セミナー 一覧へ