はじめに
今回作るもの
この記事では、Docker Composeを利用してRedmine環境を構築し、テーマやプラグインの導入までを行います。また、データの永続化やバックアップ管理の仕組みも取り入れ、またプラグインやテーマの導入についてまとめます。
背景
弊社kalyteroでは、プロジェクトの工数管理などのためのツールとしてRedmineを試しに導入してみる事になりました。その際の備忘録としてこちらの記事を残します。
準備: 基本の環境構築
必要なもの
- OS: Linux(今回はRocky Linux release 9.5 (Blue Onyx))
- 権限: root権限またはsudo権限
基本ディレクトリ構造
/srv/docker/redmine
などに下記のようなディレクトリー配置で展開します。
/srv/docker/redmine # プロジェクトルート
├── backup.sh # バックアップスクリプト
├── docker-compose.yml # Docker Composeの設定ファイル
├── backups/ # データのバックアップ用ディレクトリ
│ ├── daily/ # 日次バックアップ
│ └── monthly/ # 月次バックアップ
├── mariadb/ # MariaDBコンテナの永続化データ
├── redmine-logs/ # Redmineコンテナのログ
├── redmine_mariadb/ # Redmine関連のカスタム設定とデータ
├── backups/ # バックアップ用
├── plugins/ # プラグインの配置ディレクトリ
├── themes/ # テーマの配置ディレクトリ
├── files/ # アップロードされたファイル
必要なパッケージをインストール
Docker / docker-compose のインストール
Rocky Linux 上で Docker Engine と docker-composeをインストール
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io
sudo dnf install -y docker-compose-plugin
Docker 自動起動設定 & 起動
sudo systemctl enable docker
sudo systemctl start docker
docker-compose.ymlのセットアップ
MariaDB 11.2 と sameersbn/redmine:6.0.2を使って立ち上げます。
services:
database:
image: mariadb:11.2
container_name: redmine-mariadb
environment:
- MARIADB_USER=redmine
- MARIADB_PASSWORD=password
- MARIADB_DATABASE=redmine_production
- MARIADB_RANDOM_ROOT_PASSWORD=1
- MARIADB_AUTO_UPGRADE=1
command:
- mariadbd
- --transaction-isolation=READ-COMMITTED
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- /srv/docker/redmine/mariadb:/var/lib/mysql
restart: unless-stopped
redmine:
image: sameersbn/redmine:6.0.2
container_name: redmine
depends_on:
- database
environment:
- TZ=Asia/Tokyo
# DB設定
- DB_ADAPTER=mysql2
- DB_ENCODING=utf8mb4
- DB_HOST=database
- DB_PORT=3306
- DB_USER=redmine
- DB_PASS=password
- DB_NAME=redmine_production
- REDMINE_PORT=10083
- REDMINE_HTTPS=false
- REDMINE_RELATIVE_URL_ROOT=
ports:
- "8081:80"
volumes:
- /srv/docker/redmine/redmine_mariadb:/home/redmine/data
- /srv/docker/redmine/redmine-logs:/var/log/redmine
restart: unless-stopped
上記をプロジェクトのルートに設定し、docker compose up -d
でDocker Composeを起動すれば、http://<サーバーIPかドメイン>:8081/
でRedmineの初回セットアップ画面が開きます。
デフォルトの管理者ログイン情報は以下です(初回ログイン時にパスワード変更を求められます)。
- ユーザー名:
admin
- パスワード:
admin
Redmineの基本設定
Redmineのテーマを導入
RedmineのThemeをホスト側のedmine_mariadb/themes/
にクローンし、Docker composeを再起動します。今回はfarend bleuclairという和製の日本語と親和性の高いメジャーなテーマを用います。
# /srv/docker/redmin直下にいると想定
cd redmine_mariadb/themes/
git clone https://github.com/farend/redmine_theme_farend_bleuclair.git
docker compose restart redmine
もしRedmineのCSSが壊れていてたら
Redmineにテーマやプラグインを導入した後、変更内容を反映させるためには静的ファイル(アセット)の再コンパイルが必要です。(Docker imageなら基本再起動でスクリプトが走るはずですが)これを行うために以下のコマンドを実行してください。
docker exec -it redmine bash -c "cd /home/redmine/redmine && bundle exec rake assets:precompile RAILS_ENV=production"
Redmineのプラグインを導入
RedmineのPluginをホスト側のedmine_mariadb/plugins/
にクローンし、Docker composeを再起動します。先程のThemeと同じ流れです。
# /srv/docker/redmin直下にいると想定
cd redmine_mariadb/themes/
git clone https://github.com/redmica/redmica_ui_extension
docker compose restart redmine
おすすめのPlugin
redmica_ui_extension
添付ファイルのプレビューやテキストで簡単なUMLを記述できる機能が提供されています。Redmine互換のRedMica用に作成されたオープンソースソフトウェアです。
redmine_issues_panel
こちらはRedmineのチケット画面にチケットパネルを追加するプラグインです。Github ProjectのようなUIが使えます。こちらもRedMicaのために作成されたものです。
Redmine環境のバックアップと復元
sameersbn/redmine
のDocker imageにはバックアップ用のコマンドが用意されていますので、それを利用してバックアップを定期的に作成します。
システム障害やアップデート時に備え、データのバックアップを行います。大分原始的な方法ですが、今回はシェルファイルを作成し、それをcronで実行する方法を用います。下記の内容をbackup.sh
に保存します。
#!/bin/bash
DAILY_BACKUP_DIR="/srv/docker/redmine/backups/daily"
MONTHLY_BACKUP_DIR="/srv/docker/redmine/backups/monthly"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
MONTHLY_TIMESTAMP=$(date +"%Y%m")
REDMINE_CONTAINER="redmine"
mkdir -p "${DAILY_BACKUP_DIR}"
mkdir -p "${MONTHLY_BACKUP_DIR}"
# --- デイリーバックアップ ---
DAILY_BACKUP_FILE="${DAILY_BACKUP_DIR}/redmine_backup_${TIMESTAMP}.tar.gz"
docker exec -it "${REDMINE_CONTAINER}" redmine-backup-create
tar -czf "${DAILY_BACKUP_FILE}" -C /srv/docker/redmine/redmine_mariadb backups
find "${DAILY_BACKUP_DIR}" -type f -name "redmine_backup_*.tar.gz" -mtime +7 -exec rm -f {} \;
# --- マンスリーバックアップ ---
if [[ $(date +"%d") -eq 01 ]]; then
MONTHLY_BACKUP_FILE="${MONTHLY_BACKUP_DIR}/redmine_backup_${MONTHLY_TIMESTAMP}.tar.gz"
tar -czf "${MONTHLY_BACKUP_FILE}" -C /srv/docker/redmine/redmine_mariadb backups
find "${MONTHLY_BACKUP_DIR}" -type f -name "redmine_backup_*.tar.gz" -mtime +180 -exec rm -f {} \;
fi
# 完了メッセージ
echo "バックアップ完了: デイリーバックアップ(${DAILY_BACKUP_FILE})"
if [[ -n "${MONTHLY_BACKUP_FILE}" ]]; then
echo "バックアップ完了: マンスリーバックアップ(${MONTHLY_BACKUP_FILE})"
fi
上記のシェルファイルが作成できたら、実行権限の付与とcronの設定を行います
chmod +x /srv/docker/redmine/backup.sh
crontab -e
crontabでエディターが開くと思いますので最後の行に下記を追加してください。
毎朝二時にバックアップが走ります。
0 2 * * * /srv/docker/redmine/backup.sh