目次
はじめに
UbuntuにRedmine 5.1をインストールする手順をステップバイステップで紹介します。コピー&ペーストで実行可能です。構成としてRuby 2.7, MySQL 8.0を使い、WEBrick, Pumaで起動するまでをカバーします。またCORS対応, HTTPS化についても解説しています。
Redmine 5.1 + Ruby 3.2を組み合わせたインストールについて次の記事に紹介しました。
Ruby 2.7に限定する必要がなければ、上記記事を参照してください。(Ruby 2.7は公式サポートが終了しています)
続きとしてこちらも … WebサーバーとしてApache/Nginxを組み合わせた構成について説明しています。
TrelloとRedmineを比較している方、Redmineの展開に悩んでいる方、ぜひご一読を!
環境
ソフトウェア
- OS: Ubuntu Server 22.04 LTS
- Redmine: 5.1
- Ruby: 2.7
- Rails: 6.1 (Redmineのインストールに連動)
- MySQL: 8.0
Ruby, Rails, MySQLのバージョンは、Redmineの前提ソフトウェアのバージョンを確認してください。以下の説明では、執筆時点での最新版を例として説明しているので、適宜最新情報に合わせてください。
参考情報
- Installing Redmine (オフィシャルサイトのインストレーションガイド)
- Rack CORS Middleware
- enable cross-origin resource sharing
セットアップの手順
下記の順番でセットアップを行います。
- Ubuntu環境のセットアップ
- MySQLのセットアップ
- Rubyのセットアップ
- Redmineのセットアップ
- CORSへの対応
- HTTPS化
- サービス化
Ubuntu環境のセットアップ
Ubuntuのインストール
特殊な設定はないので手順は割愛します。 (因みに筆者の場合は、Windows 11上のVMwareにサーバー版をインストール)
ユーザーの作成
Redmineの操作を行うユーザー (redmine) を作成します。
sudo adduser redmine
sudoを操作できるようにしておきます。
sudo gpasswd -a redmine sudo
この後の作業は、ユーザーredmineにログインして行います。
ライブラリのインストール
パケージリストを最新化し、インストール済みのモジュールを更新します。
sudo apt update
sudo apt upgrade -y
この後の作業の前提となるライブリをインストールします。
sudo apt install -y build-essential git vim
MySQLのセットアップ
MySQLのインストール
MySQLのCommunity Editionをダウンロードします。
上記ページからパッケージをダウンロードするためのURLを取得します。wgetでパッケージをダウンロードし、aptのレポジトリに追加します。(下記のファイル名は執筆時の最新版)
cd ~
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
インストール対象を聞かれるので、デフォルトのままでOKします。
パッケージリストを更新しインストールします。
sudo apt update
sudo apt install -y mysql-server libmysqlclient-dev
rootのパスワードを設定します。
“Use Strong Password Encryption”を選択します。
MySQLが稼働していることを確認します。
systemctl status mysql
次のような出力が表示され、Active: active が確認できれば稼働しています。
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-06-17 06:53:26 UTC; 16s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 26378 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 4575)
Memory: 359.0M
CGroup: /system.slice/mysql.service
└─26378 /usr/sbin/mysqld
安全性の低いデフォルトの設定を変更します。
sudo mysql_secure_installation
設定例: (特に要件は無いので適宜設定してください)
redmine@redmine-test:~$ sudo mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: N
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
データベースとユーザーの作成
MySQLのシェルを起動します。
mysql -u root -p
ユーザーとデータベースを作成し権限を付与します。
my_passwordの変更を忘れずに行ってください。
CREATE DATABASE redmine CHARACTER SET utf8mb4;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Rubyのセットアップ
rbenvのインストール
Rubyのインストールには、何らかのバージョン管理ツールを使うことが推奨されています。ここではRubyのバージョン管理ツールとしてrbenvをインストールします。
sudo apt install -y rbenv
初期設定を行います。
rbenv init
下記のメッセージが表示されます。
# Load rbenv automatically by appending
# the following to ~/.bashrc:
eval "$(rbenv init -)"
上記の内容を.bashrcに追記します。これにより、シェルの起動時にPATHの設定などが行われます。
cd ~
vim .bashrc
変更内容を反映します。
source .bashrc
ruby-buildのインストール
rbenvはRubyのインストール機能を持っていないため、ruby-buildと組み合わせます。
cd ~
mkdir -p "$(rbenv root)"/plugins
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
最後のコマンドで、下記のような診断結果が表示されます。
Checking for `rbenv' in PATH: /usr/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /home/redmine/.rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20211203)
Counting installed Ruby versions: none
...
Auditing installed plugins: OK
これでrbenvを使ってRubyをインストールする準備が完了しました。
Rubyのインストール
インストール可能なRubyのバージョンを確認します。
rbenv install --list
バージョン2.7の最新版を選択してインストールします。(執筆時点では2.7.8)
rbenv install 2.7.8
rbenv global 2.7.8
rbenvは、使用するRubyのバージョンをlocalまたはglobalに指定できます。localの指定は、指定時のディレクトリに対して有効になります。Rubyの実行時には、実行するRubyのバージョンを、現行ディレクトリまたは上位のディレクトリで検索します。もし見つかればそのバージョンが、もし見つからなければglobalの指定が使用されます。
インストール後にバージョンを確認します。
ruby -v
Redmineのセットアップ
Redmineのインストール
Redmine.orgのサイトから、最新版をダウンロードし、ファイルを展開します。
cd ~
wget https://www.redmine.org/releases/redmine-5.1.2.tar.gz
cd /opt
sudo tar xvf ~/redmine-5.1.2.tar.gz
展開後のディレクトリには、バージョン番号が入っていて扱いにくいので、省略名 (redmine) で扱えるようにリンクを作成します。またファイルの所有者を変更します。
sudo ln -s redmine-5.1.2 redmine
sudo chown -R redmine:redmine redmine/
データベース接続の作成
データベース接続は、redmine/config/database.ymlに定義します。redmine/config/database.yml.exampleをコピーして編集します。
cd /opt
sudo cp redmine/config/database.yml.example redmine/config/database.yml
上記ファイルにはすでにMySQLに対応した定義が記述されています。
sudo vim redmine/config/database.yml
下記項目を上書きします。
- username: redmine
- password: MySQLのセットアップで定義した上記ユーザーのパスワード
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "<password>"
encoding: utf8mb4
database.ymlには、productionの他に、development, testに対する定義も含まれています。Railsではproduction / development / test で稼働環境を切り替えられるようになっており、そのためにデータベースを分けて定義できるようになっています。
Redmineを開発するわけではないので、production環境のみ設定します。この後のインストール手順でもproduction環境のみを対象にしています。(オフィシャルのインストールガイドの説明がそうなっているので …)
Gemのインストール
Gemfileに記述されたgemをインストールします。ただしdevelopment, test環境は対象から除外します。
cd /opt/redmine
bundle config set --local without 'development test'
bundle install
Session Store Secretの作成
セッションハイジャックによる不正アクセスを防ぐために必要な定義を行います。
RAILS_ENV=production bundle exec rake generate_secret_token
データベースの初期化
スキーマを作成しデフォルトデータをロードします。
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake redmine:load_default_data
途中で言語を選択するように求められます。日本語で使用する場合は、”ja”を選択します。この選択は、例えばチケットのステータスや優先度などの選択肢に使われます。
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] en
稼働確認
WEBrick
WEBrickを使ってRedmineサーバーを起動します。
cd /opt/redmine
bundle exec rails server -u webrick -e production
Webブラウザで下記にアクセスします。
http://<サーバーアドレス>:3000
Redmineの画面が表示されるのでログインします。
- User ID: admin
- Password: admin
尚、Redmineのインストレーションガイドによれば、WEBrickはあくまで稼働確認用で、本番用にはちゃんとしたWebサーバーを使うべしとのこと。
Puma
Pumaを使ってRedmineサーバーを起動します。
まずredmine/Gemfile.localを作成します。
cd /opt/redmine
sudo vim Gemfile.local
次の内容を書き込みます。
gem 'puma'
Gemをインストールします。
bundle install
次のようなメッセージが表示されます。Gemfileにはtest環境にPumaが定義されており、それとの重複が指摘されているようです。ただ今回はtest環境はインストールの対象としていないので、実際の重複は発生しません。このためこのメッセージは無視します。
Your Gemfile lists the gem puma (>= 0) more than once.
You should probably keep only one of them.
Remove any duplicate entries and specify the gem only once.
While it's not a problem now, it could cause errors if you change the version of one of them later.
Webサーバーを起動します。
bundle exec puma -e production
Webブラウザで下記にアクセスします。
http://<サーバーアドレス>:9292
(Pumaは”ちゃんとしたWebサーバー”ということになるのでしょうか?)
CORSへの対応
RedmineをWebブラウザから利用するだけであればCORSへの対応は必要ありません。筆者の場合は、別のWebアプリからRedmineのAPIを呼び出しており、このためにCORSへの対応が必要となりました。
CORSへの対応にはRack CORS Middlewareというライブラリを利用しました。
Gemfile.localを編集します。
cd /opt/redmine
sudo vim Gemfile.local
次を追加します。
gem 'rack-cors'
Gemをインストールします。
bundle install
config/initializers/cors.rbを作成します。
sudo vim config/initializers/cors.rb
次の内容を書き込みます。
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :patch, :put, :delete, :options]
end
end
Webサーバー (WEBrick / Puma) を再起動し、WebブラウザでRedmineにアクセスします。
WebブラウザからのアクセスではCORSを確認できませんが、これでCORS対応となっています。
PumaによるHTTPS化
参考資料: Puma: A Ruby Web Server Built For Parallelism | Binding TCP Socket
Pumaを使ってHTTPS化します。ここでは、自己署名証明書 (オレオレ証明書) を使いますが、グローバルIPを持つ環境では、正式な証明書で置き換えることができます。
まず秘密鍵 (private.key) と署名リクエスト (request.csr) を作成します。秘密鍵は暗号化せずに作成しています。暗号化していると、Apacheを起動するサービス中でPass Phraseの入力を求められ、エラーとなるためです。
cd ~
openssl genrsa -out private.key 2048
openssl req -new -key private.key -out request.csr
必須項目は、Country Name, Organization Name, Common Nameです。
Common Nameは、Webブラウザに入力されたアドレスと比較されます。WebサーバーがFQDN (Fully Qualified Domain Name) を持っている場合は、それを指定します。IPアドレスしか持たない場合は、IPアドレスを指定します。
証明書 (certificate.crt) を生成します。
openssl x509 -in request.csr -out certificate.crt -req -signkey private.key -days 365
Pumaを起動します。
cd /opt/redmine
bundle exec puma -b 'ssl://0.0.0.0:9393?key=/home/redmine/private.key&cert=/home/redmine/certificate.crt' -e production
Webブラウザで下記にアクセスします。
https://<サーバーアドレス>:9393
自己署名証明書のため警告が表示されますが、指示に従ってアクセスすると、Redmineのページが表示されます。
サービス化
毎回コマンドラインから起動するのは手間なので、OSにサービスとして登録して、OS起動時に自動的に起動されるようにします。
起動するためのシェルを~/start_redmine.shとして作成します。ここではWEBrickを使っていますが、もちろんPumaを使っても良いです。起動コマンドを置き換えてください。
cd ~
vim start_redmine.sh
#!/bin/sh
cd /opt/redmine
/home/redmine/.rbenv/shims/bundle exec rails server -u webrick -e production
実行可能に変更します。
chmod +x start_redmine.sh
サービスの定義ファイルを/lib/systemd/system/redmine.serviceとして作成します。
sudo vim /lib/systemd/system/redmine.service
次を書き込みます。
[Unit]
Description=Start Redmine Server
After=network.target
[Service]
Type=simple
ExecStart=/home/redmine/start_redmine.sh
Restart=always
[Install]
WantedBy=multi-user.target
サービスとして登録します。
sudo systemctl enable redmine
サービスを開始します。
sudo systemctl start redmine
サービス化に関係するコマンド群
- 開始:
sudo systemctl start redmine
- 停止:
sudo systemctl stop redmine
- 再起動:
sudo systemctl restart redmine
- 最新ログの表示:
sudo journalctl --unit=redmine -e
- ログの監視:
sudo journalctl --unit=redmine -f
変更履歴
日時 | 内容 |
2024/03/17 | 対象のソフトウェアのバージョンを更新 Redmine 4.2/5.0 -> 5.1 Ubuntu 20.04 -> 22.04 |
2023/04/08 | rack-corsの定義 (cors.rb) にdeleteを追加 |
2023/03/19 | 新しいバージョンのMySQLのインストール時に、ルートのパスワードを指定する方法について追記 |
2022/07/02 | ログの監視コマンドを修正 > sudo journalctl –unit=redmine -f |
2022/06/29 | PumaのHTTPS化後のアクセス先をhttpsに修正 > http:<サーバーアドレス>:9393 -> https:<サーバーアドレス>:9393 |
2022/06/24 | 記述体裁を改善 (4.2と5.2をそれぞれ例示) 不要または重複するライブラリ項目を削除 Redmineのインストール先を変更 > ~/redmine/redmine -> /opt/redmine pumaを使ったHTTPS化について追記 |
2022/06/15 | redmine.serviceの登録方法を修正 X sudo systemctl start redmine O sudo systemctl enable redmine |
2022/06/13 | CORS対応のセクションを整理 ブラウザのプラグインに関する記述を削除 |
2022/06/10 | ApacheのCORS対応についての記述を削除 rack-corsでサポートされることが判ったため (別記事に記載予定) |
2022/06/09 | ブラウザのプラグインによるCORSサポート不可について追記 |
2022/05/24 | RedSyncの紹介を追加 |
2022/05/06 | Bitnami on AWSについて追記 ブラウザのCORS対応プラグインについて追記 |
2022/04/17 | ApacheでのCORS対応方法を追記 |
2022/04/10 | Redmine 5.0.0のインストールについて追記 その他の補足修正 – ruby-dev -> ruby2.7-dev に変更 – DBの初期化コマンドに、RAILS_ENV=production の記述を追加 – Gemfile -> Gemfile.local に変更 – start_redmine.service -> redmine.service |
2021/12/17 | 初版リリース |