Redmine構築

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側に入力して設定完了。

コメント

タイトルとURLをコピーしました