Redmine
オープンソースのプロジェクト管理システム「Redmine」を個人で利用する上での
- インストール方法
- プラグイン
- 運用方法
など
Redmineインストール
Ubuntu 20.04にRedmine4.2(またはRedmine5.0)をインストール
本記事で実施すること
- Redmineを動かすためのパッケージがインストールできるように準備をします。
- Redmineを動かすためのパッケージ(Ruby/データベース/Webサービスなど)をインストールします。
- データベースやWebサービスの基礎設定を行います。
- Redmineの動作確認を行います。
想定している読者
- 「Redmine」をUbuntuにインストールしてみたい
- まずは動くところまで確認できればいい
前提
- Ubuntuサーバの初期設定が終わった直後の状態を想定します。
- DNSでドメインの名前が解決できることを前提としています
- 環境は以下の通りです。
- Apache系
- MySQL
- Ruby 2.7
- また、パッケージ管理としてaptitudeを用いています。aptが好みの方はこちらに読み替えてください。
特記事項
- 本手順ではRedmine 4.2 / Redmine 5.0のどちらかがインストール可能です。
- 本Redmineでは4.2にしています。
- 5.x系にしないのは「筆者が使いたいプラグインが4.2系まででしか動作確認できなかった(2023年1月現在)」という単純にして重要な理由です。
- 同様に、Ubuntu22.04でインストールできるRedmineのバージョンは5.x以降となるため、インストールするUbuntuは20.04系になっています。
- 本記事のredmineの格納ディレクトリは/home/www-data/redmineです。一般的なディレクトリ(/var/lib/redmine)と異なることを最初に注記します。
- また、Ubuntu22.04以降はRubyのバージョンが異なるため、4.2系がインストールできません。
手順
必要なパッケージをインストールします。
- パッケージ全体のアップデート
sudo aptitude update
- 必要パッケージのインストール
sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev
apacheの追加モジュールをインストールします。
sudo aptitude install libapache2-mod-passenger
rubyのパッケージ管理(gem)を用いて必要なライブラリをインストールします。
sudo gem install bundler racc mysql2
「3 gems installed」が表示されればインストール成功です。
必要に応じてmysqlの初期設定を行います。
mysql_secure_installationによる初期設定を行います。
うまくいかない場合は以下を参照してください。
https://barrel.reisalin.com/books/bbf94/page/mysql-secure-installation
mysqlでDBとユーザーを設定します。
sudo mysql -u root -p
上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします
CREATE DATABASE redmine character set utf8mb4;
DB "redmine" を作成します
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';
ユーザ "redmine"を作成し、パスワードを設定します。
この'password'は任意のパスワードに変更してください
GRANT ALL ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit
Redmineプログラムを配置します。
- 配置ディレクトリ作成
sudo mkdir -p /home/www-data/redmine
自分の環境に合わせます。
- 所有者変更
sudo chown -R www-data:www-data /home/www-data
- Redmine 4.2を入手
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/4.2-stable /home/www-data/redmine
- または* Redmine 5.0を入手
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.0-stable /home/www-data/redmine
Redmineのコンフィグを設定します。
- サンプルファイルをコピーしてコンフィグを編集
sudo cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml
/home/www-data/redmine/config/database.yml
このファイルを教義・信仰に従ったエディタで編集してください。
database.yml 編集内容
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
# rootからredmineに変更します
password: "redmine用のパスワード"
encoding: utf8mb4
# 本番環境(production)のみ設定を行います
Redmineのマイグレーションを行います。
- Redmineのルートディレクトリに移動
cd /home/www-data/redmine/ && pwd
/home/www-data/redmine/
(Redmineを配置したディレクトリ)であることを確認します
- bundle install
sudo -u www-data bundle install --without development test --path vendor/bundle
- シークレットトークンの発行
sudo -u www-data bundle exec rake generate_secret_token
- DBマイグレーション
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
- 日本語化
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
Apacheの設定ファイルを作成します。
【】を自分の作成したRedmineのサーバ名/ドメイン名に変更します。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
ServerName 【hoge.example.com】
# ServerNameは自身が設定したredmineに読み替えてください。
DocumentRoot /home/www-data/redmine/public
<Directory /home/www-data/redmine/public>
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
__EOF__
設定を反映させます。
- ファイル作成確認
ls -l /etc/apache2/sites-available/redmine.conf
- 設定ファイル有効化
sudo a2ensite redmine.conf
- 初期サイト設定を無効化
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
- コンフィグファイル整合性確認
sudo apache2ctl configtest
Syntax OK を確認します
- 設定反映前のapacheステータス確認
systemctl status apache2.service
active(running)を確認します
- apache再起動
sudo systemctl restart apache2.service
- 設定反映後のapacheステータス確認
systemctl status apache2.service
active(running)を確認します
Webページの表示を確認します。
http://設定したRedmineドメイン
でRedmineのトップページが表示されれば成功です。
直ちにadmin/adminでログインし、強固なパスワードを設定し直します。
Ubuntu 20.04/22.04/24.04にRedmine5.1をインストール
以下の環境でインストールを確認しています。
- Ubuntu 20.04
- Ubuntu 22.04
- Ubuntu 24.04
ですが、プラグインとの兼ね合いがあるため、Ubuntu 20.04にこのバージョンをインストールすることはおすすめしません。
本記事で実施すること
- Redmineを動かすためのパッケージがインストールできるように準備をします。
- Redmineを動かすためのパッケージ(Ruby/データベース/Webサービスなど)をインストールします。
- データベースやWebサービスの基礎設定を行います。
- Redmineの動作確認を行います。
想定している読者
- 「Redmine」をUbuntuにインストールしてみたい
- まずは動くところまで確認できればいい
前提
- Ubuntuサーバの初期設定が終わった直後の状態を想定します。
- DNSでドメインの名前が解決できることを前提としています
- 環境は以下の通りです。
- Apache系
- MySQL
- Ruby
- 2.7 (Ubuntu 20.04)
- 3.0 (Ubuntu 22.04)
- 3.2 (Ubuntu 24.04)
- また、パッケージ管理としてaptitudeを用いています。aptが好みの方はこちらに読み替えてください。
特記事項
- 本手順ではRedmine 5.1をインストールします。
- よほどのことがない限り、Ubuntu22.04にインストールするのはこのバージョンになります。
- 本記事のredmineの格納ディレクトリは/home/www-data/redmineです。一般的なディレクトリ(/var/lib/redmine)と異なることを最初に注記します。
- ほぼコピペだけで済むような構成にしていますが、一部、テキストエディタを使用する箇所があります。
- また、自身の環境に合わせたりパスワードを設定する項目がありますのでそこは注意してください。
手順
Apacheのレポジトリを追加します。
sudo add-apt-repository ppa:ondrej/apache2
必要なパッケージをインストールします。
- パッケージ全体のアップデート
sudo aptitude update
- 必要なパッケージのインストール
sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev
apacheの追加モジュールをインストールします。
sudo aptitude install libapache2-mod-passenger
apacheのバージョンを確認します。
apache2ctl -v
Apache/2.4.59
以降であることを確認します。2.4.58には、http/2プロトコルへの脆弱性があるので、左記のバージョンであることを確認します。
rubyのパッケージ管理(gem)を用いて必要なライブラリをインストールします。
sudo gem install bundler racc mysql2
「3 gems installed」が表示されればインストール成功です。
必要に応じてmysqlの初期設定を行います。
mysql_secure_installationによる初期設定を行います。
うまくいかない場合は以下を参照してください。
https://barrel.reisalin.com/books/bbf94/page/mysql-secure-installation
mysqlでDBとユーザーを設定します。
sudo mysql -u root -p
上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします
CREATE DATABASE redmine character set utf8mb4;
DB "redmine" を作成します
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';
ユーザ "redmine"を作成し、パスワードを設定します。
この'password'は任意のパスワードに変更してください
GRANT ALL ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit
設定したDBでログインできることを確認します。
mysql -u redmine -p
SHOW DATABASES;
exit
- 配置ディレクトリ作成
sudo mkdir -p /home/www-data/redmine
自分の環境に合わせます。
- 所有者変更
sudo chown -R www-data:www-data /home/www-data
- Redmine 5.1を入手
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.1-stable /home/www-data/redmine
Redmineのコンフィグを設定します。
- サンプルファイルをコピーしてコンフィグを編集
sudo cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml
/home/www-data/redmine/config/database.yml
このファイルを教義・信仰に従ったエディタで編集してください。
database.yml 編集内容
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
# rootからredmineに変更します
password: "redmine用のパスワード"
encoding: utf8mb4
# 本番環境(production)のみ設定を行います
Redmineのマイグレーションを行います。
- Redmineのルートディレクトリに移動
cd /home/www-data/redmine/ && pwd
/home/www-data/redmine/
(Redmineを配置したディレクトリ)であることを確認します
- bundle install
sudo -u www-data bundle install --without development test --path vendor/bundle
- シークレットトークンの発行
sudo -u www-data bundle exec rake generate_secret_token
- シークレットトークンの発行(※Ubuntu 20.04の場合)
sudo -u www-data bundle exec rake generate_secret_token
を実行すると、
Could not find date-3.3.4, timeout-0.4.1 in any of the sources
Run `bundle install` to install missing gems.
というメッセージが出てきます。
sudo -u www-data bundle update date
を実行して再度
sudo -u www-data bundle exec rake generate_secret_token
が有効であることを確認しました。
- DBマイグレーション
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
- 日本語化
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
Apacheの設定ファイルを作成します。
【】を自分の作成したRedmineのサーバ名/ドメイン名に変更します。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
ServerName 【hoge.example.com】
# ServerNameは自身が設定したredmineに読み替えてください。
DocumentRoot /home/www-data/redmine/public
<Directory /home/www-data/redmine/public>
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
__EOF__
設定を反映させます。
- ファイル作成確認
ls -l /etc/apache2/sites-available/redmine.conf
- 設定ファイル有効化
sudo a2ensite redmine.conf
- 初期サイト設定を無効化
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
- コンフィグファイル整合性確認
sudo apache2ctl configtest
Syntax OK を確認します
- 設定反映前のapacheステータス確認
systemctl status apache2.service
active(running)を確認します
- apache再起動
sudo systemctl restart apache2.service
- 設定反映後のapacheステータス確認
systemctl status apache2.service
active(running)を確認します
Webページの表示を確認します。
http://設定したRedmineドメイン
でRedmineのトップページが表示されれば成功です。
直ちにadmin/adminでログインし、強固なパスワードを設定し直します。
Ubuntu 24.04にRedmine6.0をインストール
以下の環境でインストールを確認しています。
- Ubuntu 24.04
Ruby 3.1 / 3.2 / 3.3 が要件であるため、Ubuntu 22.04 / 20.04へのインストールは避けた方が無難です。
※ また、テーマやプラグインの仕様も大きく異なっているため、本格的な移行は筆者は様子見にしています。
本記事で実施すること
- Redmineを動かすためのパッケージがインストールできるように準備をします。
- Redmineを動かすためのパッケージ(Ruby/データベース/Webサービスなど)をインストールします。
- データベースやWebサービスの基礎設定を行います。
- Redmineの動作確認を行います。
想定している読者
- 「Redmine」をUbuntuにインストールしてみたい
- まずは動くところまで確認できればいい
前提
- Ubuntuサーバの初期設定が終わった直後の状態を想定します。
- DNSでドメインの名前が解決できることを前提としています
- 環境は以下の通りです。
- Apache系
- MySQL
- Ruby
- 3.2 (Ubuntu 24.04)
- また、パッケージ管理としてaptitudeを用いています。aptが好みの方はこちらに読み替えてください。
特記事項
- 本手順ではRedmine 6.0.1をインストールします。
- 本記事のredmineの格納ディレクトリは/home/www-data/redmineです。一般的なディレクトリ(/var/lib/redmine)と異なることを最初に注記します。
- ほぼコピペだけで済むような構成にしていますが、一部、テキストエディタを使用する箇所があります。
- また、自身の環境に合わせたりパスワードを設定する項目がありますのでそこは注意してください。
手順
Apacheのレポジトリを追加します。
sudo add-apt-repository ppa:ondrej/apache2
必要なパッケージをインストールします。
- パッケージ全体のアップデート
sudo aptitude update
- 必要なパッケージのインストール
sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev
apacheの追加モジュールをインストールします。
sudo aptitude install libapache2-mod-passenger
apacheのバージョンを確認します。
apache2ctl -v
Apache/2.4.59
以降(2024/11/21現在2.4.62)であることを確認します。2.4.58には、http/2プロトコルへの脆弱性があるので、左記のバージョンであることを確認します。
rubyのパッケージ管理(gem)を用いて必要なライブラリをインストールします。
sudo gem install bundler racc mysql2
「3 gems installed」が表示されればインストール成功です。
必要に応じてmysqlの初期設定を行います。
mysql_secure_installationによる初期設定を行います。
うまくいかない場合は以下を参照してください。
https://barrel.reisalin.com/books/bbf94/page/mysql-secure-installation
mysqlでDBとユーザーを設定します。
sudo mysql -u root -p
上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします
CREATE DATABASE redmine character set utf8mb4;
DB "redmine" を作成します
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';
ユーザ "redmine"を作成し、パスワードを設定します。
この'password'は任意のパスワードに変更してください
GRANT ALL ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit
設定したDBでログインできることを確認します。
mysql -u redmine -p
SHOW DATABASES;
exit
- 配置ディレクトリ作成
sudo mkdir -p /home/www-data/redmine
自分の環境に合わせます。
- 所有者変更
sudo chown -R www-data:www-data /home/www-data
- Redmine 6.0を入手
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/6.0-stable /home/www-data/redmine
Redmineのコンフィグを設定します。
- サンプルファイルをコピーしてコンフィグを編集
sudo -u www-data cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml
/home/www-data/redmine/config/database.yml
このファイルを教義・信仰に従ったエディタで編集してください。
database.yml 編集内容
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
# rootからredmineに変更します
password: "redmine用のパスワード"
encoding: utf8mb4
# 本番環境(production)のみ設定を行います
Redmineのマイグレーションを行います。
- Redmineのルートディレクトリに移動
cd /home/www-data/redmine/ && pwd
/home/www-data/redmine/
(Redmineを配置したディレクトリ)であることを確認します
- bundle install
sudo -u www-data bundle install --without development test --path vendor/bundle
- シークレットトークンの発行
sudo -u www-data bundle exec rake generate_secret_token
- DBマイグレーション
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
- 日本語化
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
Apacheの設定ファイルを作成します。
【】を自分の作成したRedmineのサーバ名/ドメイン名に変更します。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
ServerName 【hoge.example.com】
# ServerNameは自身が設定したredmineに読み替えてください。
DocumentRoot /home/www-data/redmine/public
<Directory /home/www-data/redmine/public>
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
__EOF__
設定を反映させます。
- ファイル作成確認
ls -l /etc/apache2/sites-available/redmine.conf
- 設定ファイル有効化
sudo a2ensite redmine.conf
- 初期サイト設定を無効化
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
- コンフィグファイル整合性確認
sudo apache2ctl configtest
Syntax OK を確認します
- 設定反映前のapacheステータス確認
systemctl status apache2.service
active(running)を確認します
- apache再起動
sudo systemctl restart apache2.service
- 設定反映後のapacheステータス確認
systemctl status apache2.service
active(running)を確認します
Webページの表示を確認します。
http://設定したRedmineドメイン
でRedmineのトップページが表示されれば成功です。
直ちにadmin/adminでログインし、強固なパスワードを設定し直します。
Redmine4.2(Redmine 5.x)のSSL設定
本記事で実施すること
- インストールしたばかりのRedmineにSSLを設定する。
- 常時SSLで接続できるようにする。
想定している読者
- RedmineにSSLを設定したい。
- SSL暗号化強度を見直したい。
前提
ここでの環境は以下の通りです。
- Ubuntu 20.04系 / Ubuntu 22.04系(Redmine 5.x)
- Apache2.4
- ドメインでRedmineにアクセスできるようになっている。
- 既に有効なSSL証明書と秘密鍵を持っている
特記事項
以下のようなSSL証明書の作成は別項で記載します。
- ローカルネットワークでも証明書を設定したい
- Let's Encryptで証明書を取得したい
手順
さっくりとした手順
- 証明書を適切なディレクトリに配置します。
- 常時SSLに対応できるようにモジュールをインストールします。
- Apacheの設定ファイルを常時SSL化に対応させます。
- Redmineの設定を変更します。
- [オプション]外部に公開しているRedmineの暗号化強度を確認します。
証明書の配置
※SSL証明書は、最長でも一年程度と更新サイクルが短くなっています。(Let's Encryptに至っては3ヶ月)
そこで、証明書更新の際にApacheの設定ファイルを修正することなく行えるように、証明書/秘密鍵ファイルにシンボリックリンクを張ります。
ディレクトリを作成します。
sudo mkdir /etc/certs
証明書を格納するディレクトリです
sudo mkdir /etc/private
秘密鍵を格納するディレクトリです
ディレクトリに証明書と秘密鍵を格納します。
- SCPやSFTPでアップロードして対象ディレクトリに配置する
- Let's Encryptなどで作成したファイルをそれぞれ対象ディレクトリにコピー/移動する
など、適当な方法を用います。
ここではLet's Encryptで2023年1月に作成した「hoge.sample.com (/etc/letsencrypt/live/ドメイン名/に格納されています)」を
- hoge.sample.com.crt.202301 (証明書:/etc/certsに格納)
- hoge.sample.com.key.202301 (秘密鍵:/etc/privateに格納)
と定義します。
※中間証明書と分ける場合は
hoge.sample.com.crt.CA.202301
などと作成するとよいでしょう。
証明書のシンボリックファイルを作成します。
cd /etc/certs && pwd
/etc/certs
にいることを確認
sudo ln -sf hoge.sample.com.crt.202301 hoge.sample.com.crt
ls -l hoge.sample.com.crt
リンクの向き先がhoge.sample.com.crt.202301であることを確認します
- ★中間証明書のシンボリック
sudo ln -sf hoge.sample.com.crt.CA.202301 hoge.sample.com.CA.crt
このケースは、Global Sign, Sectigo, GeoTrustのように中間証明書が発行元から提供されている場合です。(Let's Encryptの場合はchain.pemに相当)
秘密鍵のシンボリックファイルを作成します。
cd /etc/private && pwd
/etc/private
にいることを確認
sudo ln -sf hoge.sample.com.key.202301 hoge.sample.com.key
ls -l hoge.sample.com.key
リンクの向き先がhoge.sample.com.crt.202301であることを確認します
証明書の整合性を確認します。
openssl x509 -noout -dates -subject -in /etc/certs/hoge.sample.com.crt
- notBefore=
- notAfter=
の期限が有効期間内であれば、適用できる証明書です。また、
- subject=CN =
が適用するドメインと一致していることを確認します。(例ではhoge.sample.com 。ワイルドカード証明書であれば *.sample.com
- ★証明書と秘密鍵のハッシュ値を確認
openssl x509 -pubkey -in /etc/certs/hoge.example.com.crt -noout | openssl md5
openssl pkey -pubout -in /etc/private/hoge.example.com.key | openssl md5
証明書と秘密鍵から取り出した公開鍵のハッシュ値を確認します。2つのハッシュ値((stdin)= ハッシュ値)が合致していれば、適切な証明書と秘密鍵の組み合わせです。
- ★証明書のチェーンを確認 (Let's Encryptのように中間証明書が結合されている場合)
openssl crl2pkcs7 -nocrl -certfile /etc/certs/hoge.example.com.crt | openssl pkcs7 -print_certs -outform PEM | awk 'BEGIN {c=0;} /BEGIN CERTIFICATE/ {c++} { print > "cert" c ".pem"}' && openssl verify -CAfile cert2.pem cert1.pem
openssl verify -CAfile cert2.pem cert1.pem
cert1.pem: OK
を確認します。
- ★中間証明書の整合性を確認 (別に中間証明書が発行元から提供されている場合)
openssl verify -CAfile /etc/certs/hoge.sample.com.CA.crt /etc/certs/hoge.example.com.crt
/etc/certs/hoge.example.com.crt: OK
を確認します。
常時SSLに必要なモジュールをインストールします。
モジュールの確認
cat /etc/apache2/mods-available/rewrite.load
cat /etc/apache2/mods-available/ssl.load
cat /etc/apache2/mods-available/headers.load
モジュール有効化
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
モジュール反映
sudo systemctl restart apache2
Apache設定ファイルの作成
http接続のみの設定ファイル無効化とコンフィグファイル退避
sudo mkdir -p /etc/apache2/old
cd /etc/apache2/sites-available && pwd
sudo a2dissite redmine.conf
sudo systemctl restart apache2.service
http接続のみの設定ファイルを無効化し、設定を反映します
sudo mv redmine.conf ../old/redmine.conf.$(date +%Y%m%d)
上記、http接続のみの設定ファイルをバックアップ用ディレクトリに移動します
常時SSL化の設定ファイル作成
- 自分の環境に合わせます。(【】でくくっている部分の直下にコメントで詳細を書いています
- cat ~ __EOF__の部分をコピーして別のエディタに貼り付け → 【】内を編集(このとき、【】も取り除きます) → コマンド実行という流れがやりやすいです。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
servername 【hoge.example.com】
# ドメイン名を指定します
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>
<VirtualHost *:443>
ServerName 【hoge.example.com】
# ドメイン名を指定します
DocumentRoot 【/home/www-data/redmine/public】
# 自身の環境に合わせます
<Directory 【/home/www-data/redmine/public】>
# 自身の環境に合わせます
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
#SSL設定
SSLEngine on
Protocols h2 http/1.1
# SSLを有効化します
SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
# 秘密鍵を指定します
# SSLCACertificateFile 【/etc/certs/hoge.example.com.CA.crt】
# 中間証明書が発行元から別ファイルで提供されている場合は、この直上をコメントアウトして中間証明書を指定します
#セキュリティヘッダー付与
Header always set Strict-Transport-Security "max-age=63072000"
Header set X-Content-Type-Options "nosniff"
Header always append X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
# これらのセクションはSSL暗号化強度を高めるための記述です
# </VirtualHost>の外側に書くことにご注意ください
__EOF__
設定を反映します
sudo a2ensite redmine
再設定したredmineの設定を有効化します
sudo apache2ctl configtest
Syntax OK
を確認します。エラーがある場合はモジュールのインストールミスやファイルの指定ミスが多いです。
sudo systemctl restart apache2.service
設定反映後、ブラウザで指定したredmineのドメインにアクセスします。
- https接続になっている
- 証明書が設定されている
- 設定した証明書が有効期限である
を確認します。
Redmineの設定を変更します。
- Redmineに管理者でログインします
- 管理 → 設定に移動します
- 「ホスト名とパス」を例に従って記入します(hoge.example.com)
- 「プロトコル」をHTTP→HTTPSにします
これで、Redmineの常時SSL化が有効になりました。
(オプション)RedmineサイトのSSL暗号化強度を測定します。
以下の条件を満たしていれば、このチェックが可能です。
- Redmineがインターネット環境に公開されていること。
- Let's Encryptやその他市販の正規の証明書を導入していること。
SSL強度チェックサイトにアクセスします。
https://www.ssllabs.com/ssltest/
情報を入力してチェックを行います。
- Hostname:RedmineのURL
- 「Do not show the results on the boards」にチェック(サーバにログを残しません)
- 「Submit」をクリックします。
2023年1月時点で、上記のApache設定ファイル通りであれば「A」と、ある程度の暗号強度の通信制が担保できています。
Redmine4.2(Redmine5.x)のログを設定する。
本記事で実施すること
- Apache設定ファイルを編集し、アクセスログとエラーログをRedmineのlogディレクトリに保存されるようにする。
- ログローテーションの設定を行う。
- Redmineのプラグインを利用して、Web UIからログを参照できるようにする。
想定している読者
- Redmineのアクセスログ / エラーログを気軽に閲覧したい。
前提
以下の環境で動かしています。
- Ubuntu 20.04系
- Ubuntu 22.04で動作確認
- Redmine 4.2
- Redmine5.0でも動作確認済み(2023/02/09)
- Redmine5.1で動作確認(2024/04/01)
- Apache 2.4
特記事項
テキストエディタを使って編集する箇所があります。必ずバックアップを取得し、失敗したときに切り戻しができるようにしましょう。
さっくりとした手順
- Apacheの設定ファイルを編集し、redmineの稼働ディレクトリにログを流すようにします。
- rsyslogを編集して日ごとにログを設定します。
- Redmineのプラグインをインストールして、管理画面からログを閲覧できるようにします。
Apache設定ファイルのバックアップを取ります。
- バーチャルファイル格納ディレクトリに移動
cd /etc/apache2/sites-available && pwd
- ファイルのバックアップ
sudo cp -pi redmine.conf /path/to/backup/directory/redmine.conf.$(date +%Y%m%d)
バップアップディレクトリ及び設定ファイルの名前は自分の環境に合わせます
- バックアップ確認
diff -u redmine.conf /path/to/backup/directory/redmine.conf.$(date +%Y%m%d)
差分が無いことでバックアップの取得を確認します
/var/log配下にシンボリックリンクを張ります。
- Linux全体のログ格納ディレクトリに移動
cd /var/log && pwd
- ログ格納ディレクトリのシンボリックリンク作成```
sudo ln -sf /home/www-data/redmine/log/ redmine
ログの格納場所は自分の環境に合わせます
- シンボリックリンク作成確認
ls -l redmine
所有者が設定したRedmineのログディレクトリに向き先があることを確認します
Apache設定ファイルを編集します。
次のファイルを教義・信仰に従ったエディタで編集します。
/etc/apache2/sites-available/redmine.conf
(※自分が作成したredmineのバーチャルサイトファイルです)
- 追記内容(例)
CustomLog /home/www-data/redmine/log/access.log combined
ErrorLog /home/www-data/redmine/log/error.log
# Redmineが配置されているディレクトリ/logに合わせます
# 追記箇所は
# <VirtualHost *:443>
# ServerName [ドメイン名] の下
# CustomLog /home/www-data/redmine/log/access.log combined
# ErrorLog /home/www-data/redmine/log
#
# 常時SSL化しているため、HTTP通信のアクセスログは設定しません
- 差分確認
diff -u /path/to/backup/directory/redmine.$(date +%Y%m%d) /etc/apache2/sites-available/redmine.conf
先ほど作成したバックアップと編集後のファイルの差分を取ります
- 差分例
<VirtualHost *:443>
ServerName Redmineドメイン名
+ CustomLog /home/www-data/redmine/log/access.log combined
+ ErrorLog /home/www-data/redmine/log/error.log
+
設定を反映します。
- コンフィグファイル整合性確認
sudo apache2ctl configtest
Syntax OKを確認します
- 設定反映前のApacheステータス確認
systemctl status apache2.service
active(running)を確認します
- apache再起動
sudo systemctl restart apache2.service
- 設定反映前のApacheステータス確認
systemctl status apache2.service
active(running)を確認します
ログが流れることを確認します。
tail -f /home/www-data/redmine/log/access.log
作成したログファイルです
このコマンドを発行し、何回かRedmineサイトにアクセスし、ログが正常に出ていることを確認します。
ログの所有者を変更します
- アクセスログの所有者変更
sudo chown www-data:www-data /home/www-data/redmine/log/access.log
- エラーログの所有者変更
sudo chown www-data:www-data /home/www-data/redmine/log/error.log
この処理は、Redmineのログ閲覧プラグインの設定で必要です。
Redmineのログローテーションを設定します
- 【】内は自分の環境に合わせます。
cat <<- __EOF__ | sudo tee -a /etc/logrotate.d/redmine
【/var/log/redmine/】*.log {
daily
missingok
ifempty
copytruncate
rotate 10
compress
su www-data www-data
}
__EOF__
これで、
- 日ごとにログをローテーションする
- 10世代保存
- ローテーション時に保存
- ログが書かれていなくても処理を続行
などの処置を行います。
ログローテーション後の動作確認
sudo logrotate -dv /etc/logrotate.d/redmine
エラーがないことを確認します
Redmineのログ閲覧プラグインをインストールします。
- Redmineのプラグイン配置ディレクトリに移動
cd /home/www-data/redmine/plugins && pwd
自分の環境に合わせます。
- gitでログプラグインを取得
sudo -u www-data git clone https://github.com/haru/redmine_logs
- 設定反映前のApacheステータス確認
systemctl status apache2.service
active(running)を確認します
- apache再起動
sudo systemctl restart apache2.service
- 設定反映前のApacheステータス確認
systemctl status apache2.service
active(running)を確認します
ログ確認
- Redmineに管理者アカウントでログインします。
- 管理>ログに遷移します。
- 任意のログをクリックして閲覧できることを確認します。
Redmine4.2(5.x)とGmailを連携させる。
本記事で実施すること
- RedmineとGmailアカウントを紐付け、Redmineからの各種通知をメールで受け取れるようにする。
想定している読者
- メール通知機能を行いたいが、SMTPサービスを用意したくない
- (AWSはSMTP機能を遮断しているなど)
- redmineのconfiguration.ymlを設定していない
前提
以下が必須です。
- Redmine稼働サーバのSSHアクセス権限がある
- かつ管理者権限を持っている
- Gmailアカウントを持っている
また、Redmineのディレクトリを
/home/www-data/redmine
としていますので、自分の環境に合わせてください。
注意事項
本記事により、以下のリスクが発生します。
- Gmailアプリパスワード漏洩により、用意したアカウントでメールが送信される。
そのため、この作業は細心の注意を払ってください。
手順
さっくりとした手順
- Gmailの2段階認証を有効にします。
- アプリパスワードを発行します。
- Redmine稼働サーバでメールの設定を行います。
- 送信確認を行います。
Googleアカウントでの作業
Googleアカウントで設定をします。
- Googleアカウント > セキュリティに移動します。
- Googleへのログインで「2段階認証プロセス」をオンにします。
どういう方法で認証をするかは運用に合わせてください。
アプリパスワードを用意します。
- Googleアカウント > セキュリティに移動します。
- Googleへのログイン > アプリパスワードに移動します。
- プルダウンメニューから以下を入力し、「生成」をクリックします。
- アプリを選択:メール
- デバイスを選択:その他(名前を入力)
- 任意の名前(redmine等)を入力
- 生成されたパスワードを控えます。このパスワードはGoogleアカウントへの完全なアクセス権が付与されることに注意ください。
Redmine管理サーバでの作業
メールサーバ情報を設定します。
【】内は、自分の環境に合わせます。
cat <<- __EOF__ | sudo tee -a 【/home/www-data/redmine/config/configuration.yml】
default:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.gmail.com"
port: 587
authentication: :plain
domain: "smtp.gmail.com"
user_name: "【Gmailアドレス】"
password: "【上述したアプリパスワード】"
__EOF__
ls -l /home/www-data/redmine/configconfiguration.yml
# 配置したディレクトリは自分の環境に合わせます。
# ファイルがあることを確認します。
設定を反映します。
sudo systemctl restart apache2.service
# 自分が使っているWebサービスに合わせます。
Redmineでの設定
管理者アカウントでログインします。
- 管理>設定に移動します。
- 「メール通知」がタブが有効になっているので、このタブをクリックします。
通知メールの設定を行います。
以下を設定して「保存」をクリックします。
- 送信元メールアドレス:自分のメールアドレス
- 宛先を非表示(bcc):チェックを外す
- メール通知の送信対象とする操作:運用に合わせます。
通知メールの確認を行います。
- Redmineの個人設定に移動します。 1.「自分自身による変更の通知は不要」のチェックを外し、保存をクリックします。
- 任意のチケットを発行/変更し、メールが届いていることを確認します。
以上で、設定は完了です。
Redmine4.2(5.x)のリマインダーを利用する。
概要
Redmineにはデフォルトでチケットの期日まで何日かメールで通知する機能が備わっています。
これにより、
- 作成したチケットの処理忘れを防ぐ
- 定期作業など、開始日が定まっているチケットを事前に把握する
ことが可能になります。
本記事では、この機能を有効化するシェルスクリプトを記します。
環境
以下の環境で動いていることを確認しています。
- Ubuntu 20.04系Linux
- Ubuntu22.04でも動くことを確認
- Redmine 4.2
- Redmine5.1でも動くことを確認
前提
この作業の前に、以下が必須です。
- Redmineでメール通知が有効になっていること
- (Gmailとの連携方法については以下で案内しています)
- https://barrel.reisalin.com/books/redmine/page/redmine425xgmail
- サーバ上でCronログが有効化されていること。
- 必須ではありませんが、運用上ログが有効化されていると心強いです。
さっくりとした手順
- リマインダースクリプトを作成して実行権限を付与します。
- cronで定期実行されるようにします。
リマインダースクリプトの作成
- スクリプト格納ディレクトリを作成
mkdir /home/hoge/scripts
任意のディレクトリを指定します。
- スクリプト格納ディレクトリに移動
cd /home/hoge/scripts && pwd
リマインダースクリプトを作成します。
【】内は自分の環境に合わせ、書き換えてからコマンドを実行します。(詳細をコメントで書いています)
cat <<- __EOF__ | tee -a redmine_reminder.sh
#!/bin/bash
# 引数でルートディレクトリを指定(デフォルトは/home/www-data/redmine)
REDMINE_ROOT=${1:-"/home/www-data/redmine"}
# 引数で日数を指定(デフォルトは3日)
DAYS=${2:-3}
# Redmineのルートディレクトリに移動
cd $REDMINE_ROOT
# リマインダーを送信
bundle exec rake redmine:send_reminders days=$DAYS RAILS_ENV=production
__EOF__
スクリプトに実行権限を付与し、動作を確認します。
- 実行権付与
chmod +x redmine_reminder.sh && ls -l redmine_reminder.sh
実行権がついていることを確認します
- 動作確認
sudo -u www-data bash /home/hoge/scripts/redmine_reminder.sh
warningは無視して大丈夫です
締め切りが3日に到来するチケット一覧のメールが受信されれば成功です。
crontab追記
sudo crontab -e -u www-data
- ※注意事項
初めてこのコマンドを実行した場合、「crontabで用いるエディタは何か」を確認されます。自分の信仰や教義に合わせたエディタを選択してください。
- 追記例
# リマインドしたい日数を引数で指定できます
20 8 * * * /home/hoge/scripts/redmine_reminder.sh 31
30 8 * * * /home/hoge/scripts/redmine_reminder.sh 1
30 16 * * * /home/hoge/scripts/redmine_reminder.sh 7
40 16 * * * /home/hoge/scripts/redmine_reminder.sh 1
20 20 * * * /home/hoge/scripts/redmine_reminder.sh 3
30 20 * * * /home/hoge/scripts/redmine_reminder.sh 1
この例では、
- 8:20 → 31日前に期日が到来する担当チケット
- 8:30 → 1日前に期日が到来する担当チケット
- 16:30 → 7日前に期日が到来する担当チケット
- 16:40 → 1日前に期日が到来する担当チケット
- 20:20 → 3日前に期日が到来する担当チケット
- 20:30 → 1日前に期日が到来する担当チケット
をそれぞれ通知します。
また、このスクリプトでは、
20 8 * * * /home/hoge/scripts/redmine_reminder.sh /home/www-data/redmine2 31
のように、 同一サーバ上に複数のRedmineが動いている場合でも、他のディレクトリを指定可能です。
追記確認
- crontab 追記確認
sudo crontab -l -u www-data
追記した内容があることを確認します。
- cronログ 設定確認
cat /var/log/cron.log
- BEGIN EDIT (www-data)
- REPLACE (www-data)
- END EDIT (www-data)
が、crontabに追記した時間帯にあれば設定完了です。
後は、指定した時間にメールが通知されることを待ちましょう。(キチッと確認したい場合は、cronの実行時刻を調整してください)