Rocky LinuxにRedmine 6.xを構築する

以前の記事で、Proxmox上の仮想マシンにRocky Linuxをインストールしました。
https://www.logw.jp/server/10693.html

今回はこのRocky Linux環境に、Dockerを使ってRedmineを構築してみたいと思います。
単に起動するだけでなく、「モダンなテーマの自動適用」「ログのファイル出力(永続化)」で考慮した構成をご紹介します。

Dockerについて

本記事では、DockerおよびDocker Composeが既にインストールされている前提で進めます。
もし未インストールの場合は、dnf install docker-ce 等で検索してインストールを済ませておいてください。

結論:ymlはこれを使えば良い

あれこれ説明する前に、結論となる compose.yaml を貼っておきます。
これをコピペして docker compose up -d すれば、テーマ適用済みのRedmineが立ち上がります。

services:
  # -----------------------------------------------------
  # 1. 権限修正用コンテナ 
  # -----------------------------------------------------
  # ホスト側のフォルダがroot権限で作られても、
  # Redmine(id:999)が書き込めるように強制的に所有者を変更します。
  fix-permissions:
    image: busybox
    container_name: fix-permissions
    command: chown -R 999:999 /usr/src/redmine/log
    volumes:
      - ./data/log:/usr/src/redmine/log

  # -----------------------------------------------------
  # 2. テーマインストーラー (既存のまま)
  # -----------------------------------------------------
  theme-installer:
    image: alpine/git
    container_name: theme-installer
    volumes:
      - ./data/themes:/themes
    entrypoint: ["/bin/sh", "-c"]
    command: >
      "if [ ! -d /themes/bleuclair ]; then
        echo 'Starting download...';
        git clone https://github.com/farend/redmine_theme_farend_bleuclair.git /themes/bleuclair;
        cd /themes/bleuclair;
        echo 'Cleaning up junk files...';
        rm -rf .git .github .husky src storybook node_modules;
        rm -f package.json package-lock.json webpack.config.js .gitignore LICENSE README.md README.ja.md remove_development_files;
        chmod -R 755 /themes/bleuclair;
        echo 'Install Complete';
      else
        echo 'Folder already exists. Skipping download.';
      fi"

  # -----------------------------------------------------
  # 3. Redmine 本体
  # -----------------------------------------------------
  redmine:
    image: redmine:latest
    container_name: redmine-app
    ports:
      - "3000:3000"
    environment:
      - REDMINE_DB_MYSQL=db
      - REDMINE_DB_PASSWORD=secret
      - REDMINE_DB_USERNAME=redmine
      - REDMINE_DB_DATABASE=redmine
      - REDMINE_SECRET_KEY_BASE=secret_key_base
      - TZ=Asia/Tokyo
      # ファイル出力設定 (falseにしないとファイルに出ません)
      - RAILS_LOG_TO_STDOUT=
      - REDMINE_LOG_LEVEL=info
    volumes:
      - ./data/files:/usr/src/redmine/files:z
      - ./data/log:/usr/src/redmine/log:z
      - ./data/themes:/usr/src/redmine/themes:z
    depends_on:
      - db
      - fix-permissions # ★権限修正が終わってから起動
    restart: always

  # -----------------------------------------------------
  # 4. データベース
  # -----------------------------------------------------
  db:
    image: mysql:8.4
    container_name: redmine-mysql
    command: 
      - --mysql-native-password=ON
      - --innodb_use_native_aio=0
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=redmine
      - MYSQL_USER=redmine
      - MYSQL_PASSWORD=secret
      - TZ=Asia/Tokyo
    volumes:
      - db-data:/var/lib/mysql
    restart: always

volumes:
  db-data:

これでRedmineが構築されます。

技術的要素

上記のYAMLファイルで工夫している点について解説します。

テーマのインストール

Redmineのデフォルトテーマは「デザインが少し古くさい」と言われることが多いです。
そこで、今回は人気のある farend basic (bleuclair) テーマを最初から使えるようにしています。

theme-installer コンテナが起動時に git clone を行い、必要なファイルを ./data/themes に配置します。これをRedmineコンテナがマウントすることで、手動でダウンロードする手間を省いています。

テーマのディレクトリ変更(Redmine 6.x〜)

Redmineのバージョン6からはテーマの配置場所が変わっています。

  • 旧: /usr/src/redmine/public/themes
  • 新: /usr/src/redmine/themes

最新の redmine:latest を使う場合は、マウント先に注意が必要です(上記YAMLは新パスに対応しています)。

ログデータの取得

Docker版Redmineは、デフォルトだとログを標準出力(docker logs)にしか吐きません。
しかし、運用上はファイルとしてログが残っていたほうが解析しやすい場合があります。

  • RAILS_LOG_TO_STDOUT= (空にする)
  • volumes: - ./data/log:/usr/src/redmine/log

この設定により、ホスト側の ./data/log ディレクトリに production.log が保存されるようになります。

権限修正用コンテナ(fix-permissions)

ログをホスト側に保存しようとすると、「ホスト側でroot権限で作られたフォルダに、コンテナ内のRedmineユーザー(id:999)が書き込めない」という権限エラーが発生しがちです。
これを防ぐため、Redmine起動前に busybox コンテナを一瞬だけ起動し、ログ保存先の所有権を 999:999 に強制変更しています。

まとめと動画

今回はYAMLファイルをコピペするだけで、実用的なRedmine環境が作れるように構成してみました。
データベースもMySQL 8.4を指定し、認証プラグインのオプション(mysql-native-password=ON)なども含めているので、最新環境でも動作するはずです。

この記事に関する技術サポート・ご相談

「手順通りにいかない」「自社環境への構築を代行してほしい」など、
インフラ・サーバー周りでハマった際はお気軽にご相談ください。

相談・問い合わせフォームを開く

※ Googleフォームへ移動します(初回相談無料)

個人支援・寄付について

サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。

  • ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS