ベストネットクラウド上にRedmineを構築する

ベストネットクラウド上にRedmineを構築する

4 min read

本記事では、ベストネットクラウド上に用意した Ubuntu 24.04 LTS の仮想マシンへ
Redmine を構築し、ブラウザから初回ログインできる状態までを順番にまとめます。

LDAP/LDAPS 連携や外部 SMTP、Zabbix 連携はこのあと続く別記事で扱う想定とし、
今回はまず「安定してログイン画面を表示できる Redmine サーバー」を完成させるところまでをゴールにします。

今回のゴール #

到達点 #

HTTPS で Redmine のログイン画面が表示され、管理者で初回ログインできる状態にする。

今回の範囲 #

OS 初期セットアップ、Redmine 配置、DB 初期化、Apache + Passenger、自己署名 SSL まで。

次回以降 #

AD / LDAPS、外部 SMTP、Zabbix エージェント導入、監視連携などを分けて扱う。

構成概要 #

OS Ubuntu Server 24.04 LTS
Web/AP Apache + Passenger
DB PostgreSQL
Redmine 6.1.1
Ruby Ubuntu 24.04 同梱の Ruby 3.2 系
公開方式 80 → 443 リダイレクト、443 は自己署名証明書で待受
配置先 /opt/redmine/releases/redmine-6.1.1
注意:
この記事では検証しやすさを優先して自己署名証明書を使っています。
公開環境では商用証明書または社内 CA 証明書への置き換えを推奨します。

Step 1. OS更新と必要パッケージの導入 #

最初に OS を最新化し、Redmine のビルドと PostgreSQL 接続に必要なパッケージをまとめて導入します。
libyaml-dev を入れておくのがポイントです。

sudo apt update
sudo apt full-upgrade -y

sudo apt install -y \
  build-essential \
  ruby-full ruby-dev bundler \
  zlib1g-dev libpq-dev libyaml-dev pkg-config \
  postgresql postgresql-contrib \
  apache2 apache2-dev \
  imagemagick ghostscript \
  curl ca-certificates gnupg dirmngr apt-transport-https \
  ldap-utils tar

Step 2. Passenger の導入 #

Passenger の公式リポジトリを追加し、Apache モジュールとしてインストールします。

curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key-2025.txt \
  | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/phusion.gpg >/dev/null

echo "deb https://oss-binaries.phusionpassenger.com/apt/passenger noble main" \
  | sudo tee /etc/apt/sources.list.d/passenger.list

sudo apt update
sudo apt install -y passenger libapache2-mod-passenger

sudo a2enmod passenger
sudo a2enconf servername
echo "ServerName rdm.bestnetllc.co.jp" | sudo tee /etc/apache2/conf-available/servername.conf

sudo apache2ctl configtest
sudo systemctl reload apache2

動作確認は以下で行います。

sudo /usr/bin/passenger-config validate-install
sudo /usr/sbin/passenger-memory-stats

Step 3. Redmine 用ユーザーと配置ディレクトリの準備 #

アップグレードをしやすくするため、リリースディレクトリ方式で配置します。

sudo adduser --system --group --home /opt/redmine --shell /bin/bash redmine

sudo mkdir -p /opt/redmine/releases
sudo chown -R redmine:redmine /opt/redmine

Step 4. PostgreSQL の作成 #

Redmine 専用のロールとデータベースを作成します。

sudo -u postgres psql
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD '<DB_PASSWORD>' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
\q

Step 5. Redmine 本体の展開 #

ここでは 6.1.1 を例にします。必要に応じてメンテナンスリリースへ読み替えてください。

cd /tmp
curl -L -o redmine-6.1.1.tar.gz https://www.redmine.org/releases/redmine-6.1.1.tar.gz

sudo -u redmine tar xzf redmine-6.1.1.tar.gz -C /opt/redmine/releases
sudo ln -sfn /opt/redmine/releases/redmine-6.1.1 /opt/redmine/current

Step 6. database.yml の設定 #

ここはハマりやすいポイントです。MySQL 用サンプルを残さず、PostgreSQL の定義だけにします。

cd /opt/redmine/releases/redmine-6.1.1

sudo tee config/database.yml > /dev/null <<'EOF'
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "<DB_PASSWORD>"
  encoding: utf8
  schema_search_path: public
EOF

ついでに暗号鍵用の configuration.yml も準備します。

sudo -u redmine cp config/configuration.yml.example config/configuration.yml
default:
  database_cipher_key: "<LONG_RANDOM_STRING>"

production:

Step 7. bundle install と DB 初期化 #

Gem の導入、シークレット生成、DB マイグレーション、初期データ投入を実行します。

sudo chown -R redmine:redmine /opt/redmine

sudo -u redmine -H bash -lc '
  cd /opt/redmine/releases/redmine-6.1.1
  rm -rf vendor/bundle
  bundle config set --local path vendor/bundle
  bundle config set --local without "development test"
  bundle install
  bundle exec rake generate_secret_token
  RAILS_ENV=production bundle exec rake db:migrate
  RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
'
補足:
yaml.h not found が出た場合は libyaml-dev 不足、
mysql2 が bundle 対象に入ってくる場合は config/database.yml
MySQL 設定が残っている可能性が高いです。

Step 8. 自己署名証明書の作成 #

今回の例ではCA:FALSE と SAN 付きの自己署名証明書を作成します。
古い作り方だとブラウザや Apache の警告が増えるため、この形にしておくと扱いやすくなります。

sudo mkdir -p /etc/apache2/ssl

sudo tee /tmp/rdm-openssl.cnf > /dev/null <<'EOF'
[req]
default_bits = 4096
prompt = no
default_md = sha256
x509_extensions = v3_req
distinguished_name = dn

[dn]
C  = JP
ST = Tokyo
L  = Tokyo
O  = BestNetLLC
OU = IT
CN = rdm.bestnetllc.co.jp

[v3_req]
basicConstraints = critical,CA:FALSE
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = rdm.bestnetllc.co.jp
EOF

sudo openssl req -x509 -nodes -newkey rsa:4096 -sha256 -days 3650 \
  -keyout /etc/apache2/ssl/rdm.bestnetllc.co.jp.key \
  -out /etc/apache2/ssl/rdm.bestnetllc.co.jp.crt \
  -config /tmp/rdm-openssl.cnf

sudo chmod 600 /etc/apache2/ssl/rdm.bestnetllc.co.jp.key
sudo chmod 644 /etc/apache2/ssl/rdm.bestnetllc.co.jp.crt

Step 9. Apache VirtualHost の設定 #

80 は 443 にリダイレクトし、443 は Redmine の public を DocumentRoot に設定します。
実体パスを直接指定しているのは、シンボリックリンク起因の 403 を避けるためです。

sudo a2enmod ssl rewrite headers

sudo tee /etc/apache2/sites-available/redmine.conf > /dev/null <<'EOF'
<VirtualHost *:80>
    ServerName rdm.bestnetllc.co.jp
    RewriteEngine On
    RewriteRule ^/(.*)$ https://rdm.bestnetllc.co.jp/$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName rdm.bestnetllc.co.jp
    DocumentRoot /opt/redmine/releases/redmine-6.1.1/public

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/rdm.bestnetllc.co.jp.crt
    SSLCertificateKeyFile /etc/apache2/ssl/rdm.bestnetllc.co.jp.key

    PassengerRuby /usr/bin/ruby
    PassengerAppEnv production

    <Directory /opt/redmine/releases/redmine-6.1.1/public>
        Options FollowSymLinks
        AllowOverride all
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/redmine_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/redmine_ssl_access.log combined
</VirtualHost>
EOF

sudo a2ensite redmine
sudo a2dissite 000-default
sudo a2dissite default-ssl

sudo apache2ctl configtest
sudo systemctl reload apache2

Step 10. 権限調整と再起動 #

Apache から Redmine 配下へ到達できるよう、親ディレクトリにも実行権限を付与します。

sudo chmod 755 /opt
sudo chmod 755 /opt/redmine
sudo chmod 755 /opt/redmine/releases
sudo chmod 755 /opt/redmine/releases/redmine-6.1.1
sudo chmod 755 /opt/redmine/releases/redmine-6.1.1/public

sudo -u redmine mkdir -p /opt/redmine/releases/redmine-6.1.1/tmp/pdf
sudo -u redmine mkdir -p /opt/redmine/releases/redmine-6.1.1/public/assets

sudo touch /opt/redmine/releases/redmine-6.1.1/tmp/restart.txt
sudo systemctl restart apache2

Step 11. 初回アクセス確認 #

まずはローカル疎通を確認します。

curl -kI https://127.0.0.1/
openssl s_client -connect 127.0.0.1:443 -servername rdm.bestnetllc.co.jp </dev/null

ブラウザでは https://rdm.bestnetllc.co.jp へアクセスします。
自己署名証明書なのでブラウザ警告は出ますが、Redmine のログイン画面が表示されれば成功です。

初期ログイン:
ユーザー名 admin / パスワード admin

初回ログイン後は、管理者パスワードをすぐに変更し、
Redmine の「管理 → 設定 → 一般」でホスト名とプロトコルを https に合わせます。

構築中にハマりやすいポイント #

1. Passenger リポジトリの GPG エラー #

古い鍵 URL を使うと NO_PUBKEY で失敗することがあります。
公式の新しい鍵ファイルを使う形に統一すると解消しやすいです。

2. yaml.h not found で Psych のビルドに失敗する #

libyaml-dev が不足しているケースが多いです。
OS パッケージを追加してから bundle install をやり直します。

3. mysql2 が bundle 対象に出てくる #

config/database.yml に MySQL のサンプル定義が残っていると起こりやすいです。
PostgreSQL 用の production 定義だけに整理すると解消します。

4. ERR_SSL_PROTOCOL_ERROR が出る #

443 の VirtualHost が有効になっていない、または別サイトが有効なままになっているケースがあります。
apache2ctl -S で有効な vhost を確認すると切り分けしやすくなります。

5. 403 Forbidden になる #

current のシンボリックリンク経由で権限に引っかかることがあります。
実体パスを直接 DocumentRoot に指定し、/opt から下に検索権限を付けると改善しやすいです。

まとめ #

以上で、ベストネットクラウド上に Ubuntu 24.04 / Apache + Passenger / PostgreSQL 構成の
Redmine サーバーを構築し、HTTPS 経由で初回ログインできるところまで到達できます。

  • Redmine 本体の展開が完了している
  • PostgreSQL に接続できる
  • Apache + Passenger でアプリが起動する
  • 自己署名証明書で 443 待受できる
  • ブラウザからログイン画面が表示される

次の記事では、AD / LDAPS 認証、外部 SMTP、そして Zabbix による監視連携へ進みます。

© BestNet Tech Blog

Updated on 2026年3月17日

What are your feelings

  • Happy
  • Normal
  • Sad