【Redmine】セットアップして使ってみる

前回のGiteaの導入に続いて、タスクや進捗を管理するためにRedmineも導入します。

ここでは、Docker ComposeでRedmineとPostgreSQLを起動し、nginxでドメインに紐づけてHTTPS化します。ドメインのDNSレコードがサーバーを向いており、ファイアウォールでTCP 80番と443番ポートにアクセスできることを前提にしています。

導入

Docker EngineとCompose pluginがインストールされていることを確認します。未導入の場合は、前回のGiteaの記事にあるDockerの導入手順を先に実行してください。

以下のコマンドは、/optへの書き込みやDockerの操作ができるユーザーで実行します。権限がない場合は、必要に応じてsudoを付けてください。

まず、Redmine用のフォルダを作成します。

sudo mkdir -p /opt/redmine
sudo chown "$USER":"$USER" /opt/redmine
cd /opt/redmine

.envを作成します。

nano .env

中身は次のようにします。パスワードと秘密鍵は、実際には推測されにくいランダムな値に置き換えてください。

POSTGRES_DB=redmine
POSTGRES_USER=redmine
POSTGRES_PASSWORD=<強固なデータベースパスワード>

SECRET_KEY_BASE=<十分に長いランダムな文字列>

.envには認証情報が含まれるため、他のユーザーから読めないようにします。

chmod 600 .env

次に、compose.yamlを作成します。

nano compose.yaml

中身は次のとおりです。

services:
  db:
    image: postgres:17
    container_name: redmine-db
    restart: unless-stopped

    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

    volumes:
      - redmine_db:/var/lib/postgresql/data

    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  redmine:
    image: redmine:7.0.1
    container_name: redmine
    restart: unless-stopped

    depends_on:
      db:
        condition: service_healthy

    environment:
      REDMINE_DB_POSTGRES: db
      REDMINE_DB_PORT: 5432
      REDMINE_DB_DATABASE: ${POSTGRES_DB}
      REDMINE_DB_USERNAME: ${POSTGRES_USER}
      REDMINE_DB_PASSWORD: ${POSTGRES_PASSWORD}
      SECRET_KEY_BASE: ${SECRET_KEY_BASE}

    ports:
      - "127.0.0.1:8081:3000"

    volumes:
      - redmine_files:/usr/src/redmine/files

volumes:
  redmine_db:
  redmine_files:

redmine:7.0.1は記事作成時点のRedmine 7.0系のバージョンです。バージョンを更新するときは、変更内容を確認してからタグを書き換えてください。PostgreSQLのデータとRedmineの添付ファイルは、それぞれ名前付きボリュームに保存されます。

Redmineを起動します。

docker compose pull
docker compose up -d

起動状態を確認します。

docker compose ps

dbhealthyredmineUpになっていれば起動完了です。起動に失敗した場合は、次のコマンドでログを確認します。

docker compose logs --tail=100 redmine db

nginx

Redmineをドメインから開けるように、nginxの設定を作成します。ここではredmine.dnyr.orgを例にします。自分のドメインを使う場合は、以下の設定と後述のCertbotコマンドのドメインを置き換えてください。

sudo nano /etc/nginx/sites-available/redmine

中身は次のとおりです。

server {
    listen 80;
    listen [::]:80;

    server_name redmine.dnyr.org;

    location / {
        client_max_body_size 100M;
        proxy_pass http://127.0.0.1:8081;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
    }
}

client_max_body_sizeは、Redmineに添付できるファイルの上限です。必要なサイズに合わせて変更してください。

設定を有効化します。

sudo ln -s /etc/nginx/sites-available/redmine /etc/nginx/sites-enabled/redmine

設定を確認し、問題がなければnginxを再読み込みします。

sudo nginx -t
sudo systemctl reload nginx

この時点で、http://redmine.dnyr.orgにアクセスできるはずです。

HTTPS化

Certbotとnginx用のプラグインをインストールします。

sudo apt update
sudo apt install -y certbot python3-certbot-nginx

証明書を発行します。

sudo certbot --nginx -d redmine.dnyr.org

画面の案内に従ってメールアドレスの登録と規約への同意を行います。HTTPからHTTPSへのリダイレクトを有効にするか聞かれた場合は、通常はリダイレクトを有効にします。

証明書の更新確認は、次のコマンドで行えます。

sudo certbot renew --dry-run

初回ログインとバックアップ

Redmineの初期ユーザーはadmin、初期パスワードもadminです。初回ログイン後、必ずパスワードを変更してください。

PostgreSQLのデータと添付ファイルは、障害や操作ミスに備えて定期的にバックアップします。例えば、データベースは次のようにダンプできます。

docker compose exec -T db sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > redmine_$(date +%Y%m%d).sql

このダンプとは別に、redmine_filesボリュームに保存されている添付ファイルもバックアップしてください。

以上で、Redmineのセットアップは完了です。

参考: