EC2サーバーにDockerをインストールし、DockerイメージからRedmineを構築する。
必要なスペックは以下。
- インスタンス:t3a.medium
- ボリューム:50
インスタンス変更、ボリューム拡張は以下の記事を参考にすること。
Dockerがインストールされていない場合は以下を参考にすること。
自己署名証明書の作成
作業ディレクトリを作成
sudo mkdir -p /opt/redmine/nginx/conf.d
sudo mkdir -p /opt/redmine/nginx/certs
自己署名証明書を作成
作成したフォルダに移動する。
cd /opt/redmine/nginx/certs
秘密鍵を生成する。
sudo openssl genrsa -out redmine.key 2048
鍵(redmine.key)が作成されたことを確認する。
権限を調整する。
sudo chmod 600 redmine.key
下記のコードを一括貼り付けして実行し、証明書設定ファイルを作成する。
※ IP アドレス部分(2か所)を書き換えること。
sudo tee redmine-ip.cnf > /dev/null <<'EOF'
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
x509_extensions = v3_req
distinguished_name = dn
[ dn ]
C = JP
O = YourCompany
OU = IT
CN = 10.0.0.123
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 10.0.0.123
EOF
ファイルの内容を確認する。
cat redmine-ip.cnf
自己署名証明書を作成する。
sudo openssl req -x509 -new -nodes -key redmine.key -days 36500 -out redmine.crt -config redmine-ip.cnf
証明書(redmine.crt)が作成されたことを確認する。
ll
nginx・Docker Compose の設定
nginx 設定ファイル(redmine.conf)を作成
下記のコードを一括貼り付けして実行し、nginx 設定ファイルを作成する。
sudo tee /opt/redmine/nginx/conf.d/redmine.conf > /dev/null <<'EOF'
server {
listen 443 ssl http2;
server_name _;
ssl_certificate /etc/nginx/certs/redmine.crt;
ssl_certificate_key /etc/nginx/certs/redmine.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
client_max_body_size 50m;
location /redmine/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Prefix /redmine;
proxy_pass http://redmine:3000/;
}
}
EOF
ファイルの内容を確認する。
cat /opt/redmine/nginx/conf.d/redmine.conf
docker-compose.yml を作成
下記のコードを一括貼り付けして実行し、 docker-compose.yml ファイルを作成する。
※ 2か所ある change_me_db_password は必ず変更すること。
sudo tee /opt/redmine/docker-compose.yml > /dev/null <<'EOF'
services:
db:
image: postgres:16
container_name: redmine-db
restart: unless-stopped
environment:
POSTGRES_DB: redmine
POSTGRES_USER: redmine
POSTGRES_PASSWORD: change_me_db_password
volumes:
- db_data:/var/lib/postgresql/data
redmine:
image: redmine:5
container_name: redmine
restart: unless-stopped
depends_on:
- db
environment:
REDMINE_DB_POSTGRES: db
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: change_me_db_password
REDMINE_RELATIVE_URL_ROOT: /redmine
RAILS_RELATIVE_URL_ROOT: /redmine
TZ: Asia/Tokyo
expose:
- "3000"
volumes:
- redmine_files:/usr/src/redmine/files
nginx:
image: nginx:1.27
container_name: redmine-nginx
restart: unless-stopped
depends_on:
- redmine
ports:
- "443:443"
volumes:
- /opt/redmine/nginx/conf.d:/etc/nginx/conf.d:ro
- /opt/redmine/nginx/certs:/etc/nginx/certs:ro
volumes:
db_data:
redmine_files:
EOF
ファイルの内容を確認する。
cat /opt/redmine/docker-compose.yml
YAML 構文をチェックする。
sudo docker compose config
起動
docker-compose.yml を配置したフォルダへ移動する。
cd /opt/redmine
コンテナを起動する。
sudo docker compose up -d
コンテナの状態を確認する。
sudo docker compose ps
STATUS が running または Up と表示されていれば正常に起動している。
コンテナのログを表示する。
sudo docker compose logs -t --tail 200
目立ったエラーがなければ問題ない。
動作確認
サーバーからアクセスできるか確認する。
curl -k https://localhost/
HTMLが返ってくればOK。
ブラウザからIPに直でアクセスできるか確認する。
https://xxx.xxx.xxx.xxx/redmine
初期設定
ブラウザからRedmineにアクセスできたら、管理者権限でログインする。デフォルトは以下。
- username: admin
- password: admin
※初回ログイン時にパスワードの変更を求められるので、任意の文字列に変更する。
次に、初期設定画面に遷移する。言語とタイムゾーンだけ変更しておく。
ホーム画面に遷移したら、ナビゲーションバーの『管理』を選択する。すると、『デフォルト設定をロード』を推奨されるので、実行する。
Appendix
セキュリティグループの設定
社内環境などで上記アクセスできない場合はセキュリティグループの設定を行う。
AWS > EC2 > 該当サーバーを選択
アクション > セキュリティ > セキュリティグループを変更
頻出コマンド
docker compose ps:起動中のコンテナを確認する。docker logs -f redmine:Redmineのログをリアルタイムで表示する。docker logs redmine-nginx --tail 50 | grep -v -E "stylesheets|javascripts|favicon|images":nginxのログを確認する。docker exec redmine-nginx nginx -t:nginx設定ファイルの構文をチェックする。docker exec redmine-nginx nginx -s reload:nginx設定を再読み込みする。docker compose restart redmine:Redmineコンテナを再起動する。docker compose up -d --force-recreate redmine:Redmineコンテナを再構築する。docker compose stop redmine:Redmineコンテナを停止する。
起動中のコンテナを確認する
docker compose ps
Redmineを構成するコンテナの状態を確認する。
Redmineのログを確認する
sudo docker logs -f redmine
Redmineのログをリアルタイムで表示する。
Listening on http://0.0.0.0:3000 が表示されれば、正常に起動している。
nginxのログを確認する
sudo docker logs redmine-nginx --tail 50 | grep -v -E "stylesheets|javascripts|favicon|images"
静的ファイルへのアクセスログを除外して表示する。
nginx設定ファイルの構文をチェックする
sudo docker exec redmine-nginx nginx -t
設定ファイルに構文エラーがないか確認する。
nginx設定を再読み込みする
sudo docker exec redmine-nginx nginx -s reload
~/nginx/conf.d/redmine.conf を修正した後に実行する。
Redmineコンテナを再起動する
sudo docker compose restart redmine
コンテナを再起動する。
Redmineコンテナを再構築する
sudo docker compose up -d --force-recreate redmine
docker-compose.yml を変更した場合に実行する。
Redmineコンテナを停止する
sudo docker compose stop redmine
Redmineコンテナを停止する。コンテナ起動時にエラーでループ再起動になった場合などにも使用する。
DBを変更する
DBをPostgreSQLからMySQLへ変更する。
Redmineの既存DBがMySQLだったため、データ移行を行うために新RedmineのDBをPostgreSQLからMySQLへ変更する。
docker-compose.yml の以下の設定を書き換える。
※2か所あるPASSWORDは必ず変更すること。
# Before (PostgreSQL)
db:
image: postgres:16
container_name: redmine-db
restart: unless-stopped
environment:
POSTGRES_DB: redmine
POSTGRES_USER: redmine
POSTGRES_PASSWORD: change_me_db_password
volumes:
- db_data:/var/lib/postgresql/data
redmine:
…
environment:
REDMINE_DB_POSTGRES: db
# After (MySQL)
db:
image: mysql:8.0
container_name: redmine-db
restart: unless-stopped
environment:
MYSQL_DATABASE: redmine
MYSQL_USER: redmine
MYSQL_PASSWORD: xxxx
MYSQL_ROOT_PASSWORD: xxxx
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- db_data:/var/lib/mysql
redmine:
…
environment:
REDMINE_DB_MYSQL: db #ここも修正
Redmineコンテナを再起動する。
docker compose down
docker compose up -d
起動ログを確認する。
docker compose logs -f redmine
Listening on tcp://0.0.0.0:3000 が表示されればOK。
別サーバーのRedmineからデータ移行
『Redmineデータ移行』を参照。
MFA対応
Redmine標準機能のTOTPで、サイトから簡単に設定可能。
Microsoft Authenticatorを使用する(プライベート端末にインストールしておく)。
管理者ユーザーで全体設定変更
ナビゲーションバー[管理]→[設定]→[認証]タブ
二要素認証>『任意』を選択>保存
※POCなので任意を選択するが、実運用時は『必須』等を選択する。
個人設定で自分の設定にMFAを反映してみる
右上の『個人設定』>二要素認証>二要素認証を有効にする
Microsoft AuthenticatorでQRを読み込むなどして連携する。
Microsoft AuthenticatorにRedmine用のOTP(ワンタイムパスワード)が発行されるようになる。
OTPをRedmine側に入力して設定完了。

コメント