GPT-4o miniは、2024年7月にOpen AIが発表したGPT-4oの最新モデルで、低コストかつスピーディーな処理速度が魅力...
ECSでRedmineを構築する
目次
はじめに
こんにちは、株式会社SMSデータテックの社員Mです。
今回はdockerfile編集とECSの設定を解説します。
本記事対象の方
ドメインの設定や環境の構築を、ご自身で設定できる方
ECSで構築するメリット
ECS環境で立ち上げる理由としては、サーバーなどの管理運用が不要なためという点です。
また、最初の環境構築が終われば、イメージのタグを編集するだけでアップデート可能です。
構成図
全体の構成図となります。
本記事で紹介する内容は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を構築する方法
手順は下記の通りに進めていきます。
- Pluginsをインストール
- Dockerfileの編集
- ECRにpush
- ELB作成
- ECS設定
- 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
チケットをパネル形式で表示してくれるものです。
チケットがステータス毎で分かれているので、進捗状況が分かりやすくなります。
ui extension
セレクトボックスで検索が行えるようになります。
absolute dates
Redmineはデフォルトのままだと「〇日前」と表示されます。
このpluginsを入れると、日付が表示されるようになります。
work time
このpluginsで工数の設定、算出が行えるようになります。
Dockerfile編集
ここからDockerfileの編集を行っていきます。
Dockerのイメージを作成し、実行することでDockerコンテナを作成することができます。
今回使用するイメージ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、インターネット向けで作成します。
リスナーとルーティングは後ほど設定しますので、デフォルトで作成してください。
ターゲットグループ作成
その他はデフォルトでOKです。
ECS設定
タスク定義
ECRにpush後、ECSのタスク定義を作成します。
メモリ、CPUは最小要件で作成しています。
環境変数:
キー | 値のタイプ | 値 |
REDMINE_DB_DATABASE | 値 | データベース名 |
REDMINE_DB_MYSQL | 値 | RDSエンドポイント |
REDMINE_DB_PASSWORD | 値 | RDSパスワード |
REDMINE_DB_USERNAME | 値 | RDSユーザー名 |
REDMINE_PLUGINS_MIGRATE | 値 | true |
pluginsを導入しない場合、REDMINE_PLUGINS_MIGRATEは不要です。
デフォルトのままで問題ありません。
awslogs-groupはタスク定義の名前が自動的に入ります。
redmineのファイルは、files配下に保存されるため、コンテナパスは/usr/src/redmine/files
となります。
クラスター作成
デフォルトの設定でOK
サービス作成
ELB編集
ELBにリスナーを追加します。
証明書は取得した証明書を選択してください。
HTTPS:443の条件を編集します。
ホストヘッダーを選択し、redmineのURLを入力
HTTPS:443の設定は以上です。
最後にHTTP:80のデフォルトの設定も編集していきます。
アクションのルーティングをURLにリダイレクト
以上で設定終了です。
ECS起動後、URLからredmineにアクセスできるようになります。
おわり
ECSでRedmineを構築してみました。多くの記事がdocker-composeやEC2を使った方法を紹介していますが、ECSでの動作方法についてはあまり見かけませんでした。ECSでRedmineを運用することで、Dockerfileのアップデートだけで済み、サーバーの管理が不要になる点は非常に大きなメリットです。
アップデートも簡単で、バージョンを変更してupgradeコマンドを実行するだけで済むため、時間もかかりません。この方法により、管理の負担を大幅に軽減できます。
この記事が、他の方々の負担を少しでも減らすことができることを願っています。
その他のイベント・セミナー 一覧へ
ChatGPT-4o with canvasはOpenAIがリリースしたAIのアシスタントツールです。ChatGPTとの共同作業が可能...
SearchGPTとはAI機能が実装された情報検索ツールで、言語の壁を越えた多様な情報の要約、関連情報や引用元情報を含めたアウトプット...