FJcloud実践
DockerでFJcloud-VにOSSをインストールする方法~Redmine編~
本記事では、プロジェクト管理ツールである「Redmine」をDockerを用いてFJcloud-Vにインストールする方法について、具体的なコードを交えて解説します。
Redmineとは
ITシステム開発のようなプロジェクトを遂行するためには、プロジェクトに関する情報をいかに管理するかが重要です。そしてプロジェクトにおいて管理すべき情報は、ソースコードをはじめ、バグ、課題、ガントチャート、関連ドキュメントなど、非常に多岐にのぼります。当たり前ですが、これらをスプレッドシートなどで管理するのは、少々無理があると言わざるをえません。もちろん人の記憶に依存するなど、もってのほかです。やはり最近であれば、Webベースのプロジェクト管理ツールを使うのが一般的でしょう。
GitHubやGitLab.comといったSaaSには、ソースコードリポジトリとあわせて、こうしたツールが用意されていることもあります。ですが企業によっては、セキュリティポリシーの都合上、SaaSの利用が許可されないケースも多いのではないでしょうか。また予算や機能カスタマイズの面から、SaaSでは要求が満たせないことがあるかもしれません。
そこで、自由にセルフホストできるプロジェクト管理ツールがあると便利です。そしてこうした目的で広く使われている、オープンソースのプロジェクト管理ツールが「Redmine」です。
Dockerのインストール
それではRedmineをインストールして、実際にその動作を体験してみましょう。Redmineのインストール方法には、いくつかのパターンがあります。ですが今時のWebアプリに共通して、コンテナを使うのがもっとも便利で簡単です。なぜならば、コンテナであれば依存関係を気にせず、またホストOSやバージョンなどにも左右されず、気軽にアプリケーションをデプロイできるからです。アプリケーションのバージョンアップやロールバックも簡単なため、運用にかかる手間も軽減できます。コンテナは同一環境を容易に再現できるため、ステージング環境やテスト環境を追加するといった要望にも、簡単に応えることができます。
Redmineは、公式のDockerイメージが用意されています。今回はFJCloud-V上にUbuntu 22.04のVMを起動し、その中でDockerを使ってRedmineを立ち上げてみましょう。なおFJcloud-VのUbuntuは、rootユーザーでログインするのが前提となっています。Dockerの利用にもroot権限が必要なため、本記事ではすべての作業をrootで実行する前提で解説します。
VMにログインできたら、まずはUbuntuにDockerをインストールします。それには、大きく以下の3つの方法があります。
- 1.Ubuntuが提供する「docker.io」パッケージを使う
- 2.Snapで提供されている「docker」パッケージを使う
- 3.Dockerの公式が提供しているUbuntu向けのパッケージを使う
今回は一番簡単に動かせる、1の方法を採用しました。以下のコマンドを実行してください。
# apt update
# apt install -y docker.io
ちなみに最新のDockerを利用したいのであれば、3の方法がお薦めです。詳しくはドキュメントを参照してください。
Dockerのインストールが完了したら、以下のコマンドを実行してみましょう。Dockerのサーバーの情報(Server: 以下)が、エラーなく返ってくることを確認してください。
# docker info
Client:
(...略...)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
(...以下略...)
Docker ComposeでRedmineを起動する
Redmineを動かすには、アプリケーション本体の他に、データを記録するデータベースが必要です。テスト目的であれば、同梱されたSQLite3を利用することも可能ですが、本番環境では別途、MySQLやPostgreSQLのデータベースを用意することが推奨されています。つまりRedmineコンテナのほかに、データベースコンテナを起動する必要があるわけです。
とはいえ、単にふたつのコンテナを起動すればよいというものでもありません。まずそれぞれのコンテナは、相互に通信可能でなければなりません。データベースコンテナは、Redmineよりも先に起動していなければなりませんし、Redmineコンテナは、データベースコンテナのIPアドレスや、データベースのパスワードを知っている必要があります。
複数コンテナの協調動作を、手動でハンドリングするのは非常に面倒です。そこでこうしたケースでは、複数のコンテナの管理を自動化する「コンテナオーケストレーション」と呼ばれるツールが利用されます。そして単一ホストで動作しているDocker環境において、最も広く使われているであろうオーケストレーションツールが「Compose」です。
以下のコマンドでComposeをインストールしてください。
# apt install -y docker-compose-v2
データベースと、Redmineにアップロードしたファイルを永続化するためのディレクトリを作成します。
# mkdir -p /srv/redmine/{db,files}
続いて「compose.yml」というファイルを、以下の内容で作成してください。ここでは作成したdbとfilesのディレクトリのみをコンテナにマウントしていますが、運用のスタイルによっては、プラグインディレクトリやコンフィグファイルなども同様に用意する必要があるかもしれません。詳しくはRedmineのマニュアルを参照してください。
services:
redmine:
image: redmine:5.1.3
restart: always
depends_on:
- db
ports:
- 8080:3000
volumes:
- /srv/redmine/files:/usr/src/redmine/files
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: ${MYSQL_PASSWORD}
db:
image: mysql:8.4.0
restart: always
volumes:
- /srv/redmine/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: redmine
MYSQL_USER: redmine
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
パスワードは機密情報のため、別のファイルに隔離します。「compose.yml」と同じディレクトリに、「.env」というファイルを以下の内容で作成してください。また念の為、rootユーザー以外に見られないよう、パーミッションを設定しておくとよいでしょう。
MYSQL_ROOT_PASSWORD=MySQLのrootユーザーのパスワード
MYSQL_PASSWORD=MySQLのredmineユーザーのパスワード
「compose.yml」のあるディレクトリで、以下のコマンドを実行します。初期化に少し時間がかかるため、しばらく待ちましょう。
# docker compose up -d
Redmineにアクセスする
Webブラウザから、「http://サーバーのIPアドレス:8080」にアクセスしてください。Redmineのトップページが表示されたら成功です。
Redmineの初期ユーザー名とパスワードは、どちらも「admin」です。ログインしてパスワードの変更などを行っておきましょう。
Redmineはプロジェクト管理ツールですので、まずは新規プロジェクトを立ち上げます。左上にある「管理」から「プロジェクト」を開き、「新しいプロジェクト」をクリックします。
プロジェクトの名前、説明と識別子を入力しましょう。チケットトラッキングやWikiなど、そのプロジェクトで使用する機能を、個別にOn/Offすることもできます。最後に「作成」をクリックします。
プロジェクトが作成されました。後はこのページ以下に、このプロジェクトで利用する様々な情報を登録していきましょう。なおRedmine上に存在するすべてのプロジェクトには、左上の「プロジェクト」からアクセスできます。
Redmineのデータベースやアップロードしたファイルは、先ほど作成した/srv/redmine以下のディレクトリに保存されています。これらのディレクトリと、compose.ymlと.envさえバックアップしておけば、異なるサーバー上であっても、何度でも同じ環境を再現できます。こうしたデプロイの効率化と、非常に高い環境再現性が、コンテナを使うメリットのひとつです。
今回は8080番ポートに直接HTTPでアクセスしましたが、本番運用するのであれば、SSL化は必須でしょう。また非標準のポートを指定するのは使い勝手が悪いため、別途リバースプロキシを導入し、443番ポートを待ち受け、SSL終端を行うとよいでしょう。このあたりはWebアプリ運用に共通した話題となり、Redmineそのものとは関係のない話のため、本記事では省略します。