1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rocky LinuxにDocker Composeを使ってRedmineを構築 +テーマとプラグイン導入

Posted at

はじめに

今回作るもの

この記事では、Docker Composeを利用してRedmine環境を構築し、テーマやプラグインの導入までを行います。また、データの永続化やバックアップ管理の仕組みも取り入れ、またプラグインやテーマの導入についてまとめます。

image.png

背景

弊社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

参考サイト

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?