前回の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
dbがhealthy、redmineがUpになっていれば起動完了です。起動に失敗した場合は、次のコマンドでログを確認します。
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のセットアップは完了です。
参考: