タグ: redmine Page 1 of 6

続・Redmineのファイルサーバ化。(2023年2月現在に合わせた対応方法)

概要

こちらの記事より月日が経過。バージョンアップとWindows11のセキュリティポリシー厳格化により、WebDAVサービスが使えなくなってしまいました。

そのため、2023年2月現在に合わせ:

  1. Redmine 4.2でも動く環境でのインストール手順
  2. Redmine本体の設定を修正する手順
  3. Windows 11でのWebDAVを有効にする手順

をそれぞれ追加しました。

備考

  • この作業、下手すればRedmine全体が使えなくなる作業です。(実際にRedmineが使えなくなりました)
  • そのため、DBのバックアップとリストアによる切り戻し手順も込みです。
  • そもそも:WebDAVを有効化するかどうかは組織のセキュリティポリシーに関わる問題です。有効化すべきか否かは事前に了承を取ってください。

プラグイン名

動作を確認した環境

  • Redmine 4.2
  • mysql Ver 8.0.31
  • Windows 11 (WebDav設定)

WebDAV接続の前提

  • Redmineがhttps化されていること。
  • 証明書をWindowsにインポートしていること。

導入時

  • 追加パッケージのインストール:要
  • 設定ファイルの修正:要
  • Gem追加:要
  • DBマイグレーション:要
  • Windows設定:要 (WebDAV接続をする場合のみ)

実施した手順

さっくりとならなかった手順

  1. 念のためDBバックアップ
  2. SSHログイン後、追加パッケージをインストール
  3. 設定ファイルの書き換え
  4. Redmineプラグインに移動
  5. gitでレポジトリをダウンロード
  6. 新規ジェムをインストール
  7. DBマイグレーション
  8. Webサービス再起動
  9. Redmine設定変更
  10. WebDAVサービス有効化(Windows作業)
  11. 切り戻し手順(それでも失敗した場合)

バックアップ取得

mysqldumpによるバックアップ

cd /hoge
# 任意のバックアップディレクトリに移動します

mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
# それぞれ -h ホスト名 -u redmine -p ユーザ オプション db名です。
# パスワードはredmineインストール時に設定したDBユーザのものです

環境が許すなら、AWSのようにシステム全体のバックアップを取った方が後腐れがありません。

動作に必要な追加パッケージのインストールと設定

追加パッケージをインストールします。

sudo aptitude install xapian-omega ruby-xapian libxapian-dev poppler-utils antiword  unzip catdoc libwpd-tools libwps-tools gzip unrtf catdvi djview djview3 uuid uuid-dev xz-utils libemail-outlook-message-perl

Redmineコンフィグファイルの修正

ディレクトリに移動します。

cd /home/www-data/redmine/config/
# 自分の環境に合わせます。

additional_environment.rbの作成(この作業をしていないなら必要です)

cp -pi additional_environment.rb.example additional_environment.rb

addtional_environment.rbの追記

  • 配置ディレクトリは自分の環境に合わせます。
cat <<- __EOF__ | sudo tee -a /home/www-data/redmine/config/additional_environment.rb
# Redmine DMSF's WebDAV
require File.dirname(__FILE__) + '/plugins/redmine_dmsf/lib/redmine_dmsf/webdav/custom_middleware'
config.middleware.insert_before ActionDispatch::Cookies, RedmineDmsf::Webdav::CustomMiddleware
__EOF__

プラグインのインストール

プラグインを配置します。

  • リリースノートによれば、Redmine 4.2に対応しているバージョンはv3.0.5です。
cd /hoge && owd
# 任意の作業ディレクトリに移動し、そのディレクトリにいることを確認します。

wget https://github.com/danmunn/redmine_dmsf/archive/refs/tags/v3.0.5.zip

unzip v3.0.5.zip

sudo chown -R www-data:www-data redmine_dmsf-3.0.5

sudo mv redmine_dmsf-3.0.5/ /home/www-data/redmine/plugins/redmine_dmsf
# 移動先のディレクトリは自分の環境のプラグインは一ディレクトリです。
# ディレクトリ名から-3.0.5を取り除くのを忘れないでください。

ls -ld /home/www-data/redmine/plugins/redmine_dmsf
# このディレクトリがあることを確認します

Gemをインストールします。

cd /home/www-data/redmine/ && pwd
# 自分の環境に合わせます。

sudo -u www-data bundle install

DBのマイグレーションを行います。

cd /home/www-data/redmine/ && pwd
# 自分の環境に合わせます。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

Redmine設定変更

WebDAV有効化

  1. Redmineに管理者アカウントでログインします。
  2. 管理>プラグイン>DMSFの「設定」をクリックします。
  3. 以下のように修正します。
  4. WebDAV:有効 (デフォルト)
  5. WebDavアクセス制御:読み書き可能
  6. 任意のプロジェクトに移動します。
  7. 「設定」をクリックし、「文書管理」にチェックを入れます。
  8. また、Redmine管理画面の「ロールと権限設定」で、ユーザのアクセス権を忘れないようにしてください。(「文書管理」のセクションです)

Windows : WebDAVサービス有効化

  1. Windows 11のスタート画面からwindows featuresと入力。Windowsの機能の有効化または無効化を起動します。
  2. SMB 1.0/CIFS ファイル共有のサポート全てにチェックを入れます。
  3. OKをクリックして再起動します。

多分必要な作業 - 証明書のインポート

Redmineの証明書をWindowsにインポートしておきます。

接続確認

  1. エクスプローラーを開きます。
  2. PCに移動し、右クリックから「ネットワークの場所を追加する」をクリックします。
  3. 次へ > カスタムネットワークの場所を選択 >次へと進みます。
  4. 「インターネットまたはネットワークのアドレスは以下のように指定します。
  5. https://[ドメイン名]/dmsf/webdav/[プロジェクト識別子]
  6. 「次へ」をクリック後、資格情報を確認されるので、Redmineのアカウントを入力します。
  7. エクスプローラーウィンドウが表示され、ファイルの読み書きができれば設定完了です。

おまけ:切り戻し手順

この作業、バージョン変更や設定ミスで軽くRedmine全体が機能不全に陥ります。そのため、切り戻し手順を記しておきます。

通常の切り戻し

ディレクトリ移動

cd /home/www-data/redmine/plugins && pwd
# 自分の環境に合わせます。

プラグインアンインストール

sudo -u rake redmine:plugins:migrate NAME=redmine_dmsf VERSION=0 RAILS_ENV=production

ディレクトリ削除

sudo rm plugins/redmine_dmsf -Rf

Webサービス再起動

sudo systemctl restart apache2.service

それでもダメだった時の切り戻し(DBリストア)

cd /hoge
# mysqldumpを行ったディレクトリ

mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
# パスワードはredmineインストール時に設定したDBユーザのものです

sudo systemctl restart apache2.service

Redmine4.2でredmien_tags→redmine_additonal_tagsへのアップグレード。(メンテナ変更)

概要

Redmineのチケット管理に大いに役立てているタグプラグイン。ひっそりとサービス終了していたので、その後継に置き換えます。

プラグイン名

動作を確認した環境

Redmine 4.2

前提:

  • 稼働要件にadditonalsプラグインが必要です。(インストール方法)
  • additonalプラグインと同様に、2023年1月現在のバージョンはRedmine5.xから対応しているため、作業に少し手間が加わります。
  • 既にredmine_tags (https://github.com/ixti/redmine_tags/) を導入している場合は、以下に示す手順によって設定済みのタグをインポートできます。

導入時

Gem追加:要
DBマイグレーション:要

手順

Redmine_Tagsを導入済みの場合は、バックアップを取り、失敗時に復旧できる準備をすることを強く推奨します。

さっくりとした手順

  1. SSHログイン後、作業ディレクトリに移動
  2. wgetでRedmine4.2に即したパッケージをダウンロード
  3. パッケージの配置
  4. 旧プラグインのディレクトリ削除
  5. 新規ジェムをインストール
  6. DBマイグレーション
  7. Webサービス再起動

Redmine4.2に即したバージョンをダウンロードして展開します。

wget https://github.com/AlphaNodes/additional_tags/archive/refs/tags/1.0.4.zip
# リリースノートで、Redmine 4.2に対応したバージョンがこれでした

unzip 1.0.4.zip

sudo chown -R www-data:www-data additional_tags-1.0.4/
# apache / nginxの実行ユーザに所有者を合わせます

Redmineディレクトリにプログラムを配置します。

sudo mv  additional_tags-1.0.4 /home/www-data/redmine/plugins/additional_tags
# 自分の環境に合わせます。また、ディレクトリ名からバージョン名を外すのを忘れないようにしてください

インストール済みのRedmine_Tagsディレクトリを削除します。

※新規インストールの場合はこの作業は不要です

cd /home/www-data/redmine/plugins
# 自分の環境に合わせます。

ls -ld additional_tags redmine_tags
#2つのディレクトリがあることを確認します

sudo rm -rf redmine_tags

ls -ld additional_tags redmine_tags
#additonal_tagsのみがあることを確認します

Gemをインストールします

cd /home/www-data/redmine/
# 自分の環境に合わせます。

sudo -u www-data bundle install

DBのマイグレーションを行います

cd /home/www-data/redmine/
# 自分の環境に合わせます。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

インストール後の動作

  1. Redmineに管理者アカウントでログインします。
  2. 管理に移動すると、「Tags」メニューが追加されているのでクリックして移動します。
  3. 以下の設定を行います。
    • サイトバーにタグを:シンプルなクラウド
    • タグに金額を表示(※Totalがこう和訳されています):チェック
    • 課題タグを有効にする:チェック
  4. Redmine_tagから移行している場合は、「タグの管理」タブで記載されたタグがあることを確認します。

Redmine4.2にAdditionalプラグインをインストール。

概要

Redmineにかなり強力なmacroを付与するプラグイン:additionalsをインストールします。

プラグイン名

Additionals

https://www.redmine.org/plugins/additionals

前提

2023年1月現在のバージョンはRedmine 5.xから対応しているため、今利用しているRedmine4.2で動かすためには少し作業が必要です。

動作を確認した環境

Redmine 4.2

導入時

Gem追加:要
DBマイグレーション:要

手順

さっくりとした手順

  1. SSHログイン後、作業ディレクトリに移動
  2. wgetでRedmine4.2に即したパッケージをダウンロード
  3. パッケージの配置
  4. 新規ジェムをインストール
  5. DBマイグレーション
  6. Webサービス再起動

作業用ディレクトリに移動します。

cd /hoge
# 任意のディレクトリに移動します

Redmine4.2に即したバージョンをダウンロードして展開します。

wget https://github.com/AlphaNodes/additionals/archive/refs/tags/3.0.5.2.zip
# リリースノートで、Redmine 4.2に対応したバージョンがこれでした

unzip 3.0.5.2.zip

sudo chown -R www-data:www-data additionals-3.0.5.2
# apache / nginxの実行ユーザに所有者を合わせます

Redmineディレクトリにプログラムを配置します。

sudo mv additionals-3.0.5.2 /var/lib/redmine/plugins/additionals
# 自分の環境に合わせます。また、ディレクトリ名からバージョン名を外すのを忘れないようにしてください

Gemをインストールします。

cd /var/lib/redmine/
# 自分の環境に合わせます。

sudo -u www-data bundle install

DBのマイグレーションを行います

cd /var/lib/redmine/
# 自分の環境に合わせます。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

動作

  1. Redmineに管理者アカウントでログインします。
  2. 管理に「Additionals」が加わっていればインストールされています。

「Additionals」の名前は伊達ではなく、有用なマクロが加わっているという印象です。どういう使い方ができるかは要検証です。

続・アクセス解析システム:matomoとRedmineの連携。(View Customize Plugin対応版)

概要

こちらの「matomoとRedmineの連携」にて「view_customize_pluginで設定がうまくいなかった」件について、Redmine_jpの代表様から直々のコメントをいただきました。

View Customizeプラグインでのトラッキングコード挿入がうまくいかなかった件、matomoで生成したトラッキングコードから と の計2行を削除するとうまくいきそうな気がします。

アクセス解析システムmatomoとredmineの連携。コメント

これを元に設定を行いました。

実施した手順

さっくりとした手順

  1. SSHクライアントからベースファイルの切り戻しを行います。
  2. RedmineのWeb画面「表示のカスタマイズ」から再設定を行います。
  3. matomo管理画面からアクセス解析が有効であることを確認します。

前提

  • Redmine上にview_customize_pluginが導入済みであること。
  • ウェブ解析システムmatomoが導入済みであり、対象Redmineのトラッキングコードを控えていること。

Redmineサーバで実施する作業

ベースファイルのバックアップから切り戻しを行います。

sudo cp -pi /path/to/backup/directory/base.html.erb.$(date +%Y%m%d --date '1 Day ago') /var/lib/redmine/app/views/layouts/base.html.erb
# 変数「date」でバックアップを取っているので、作業した日付に修正します
# 2日前なら'2 Days ago'、1週間前なら'1 Week ago'、3年前なら'3 Years ago'など応用が利きます

diff -u /path/to/backup/directory/base.html.erb.$(date +%Y%m%d --date '1 Day ago') /var/lib/redmine/app/views/layouts/base.html.erb
# バックアップと差分がないことで切り戻しを確認します

切り戻し後にWebサービスの再起動を行います。

sudo systemctl restart apache2.service

aystemctl status apache2.service

# 自分が使っているWebサービスに合わせます

Redmine管理画面で実施する作業

Redmineに管理者アカウントでログインします。

  1. 管理>表示のカスタマイズに進みます。
  2. 「新しい表示のカスタマイズ」をクリックします。

トラッキングコードを設定します。

  • パスのパターン:空白
  • プロジェクトのパターン:空白
  • 挿入位置:全ページのヘッダ
  • 種別:JavaScript
  • コード:matomoで提示されたトラッキングコードから、「上部の<script>と下部の </script>を外したコード

設定後、「有効」にチェックを入れ「保存」をクリックします。

保存後、Redmineサイト内のページをいくつか表示させます。

Web解析システムmatomoで実施する作業

解析対象のRedmineで解析されていることを確認します。

今回の学び

  • ダメだった手順を載せることに意義がありました。
  • ソース修正の時に「ヘッダを確認する」のところで、「view_customize_pluginで設定済みの他のヘッダ」を確認すべきでした。そうすれば、設定の誤りに気づくことができました。

アクセス解析システム:matomoとRedmineの連携。

概要

構築を行ったmatomo。Redmineでアクセス解析ができるように設定をしていきます。

前提

以下の環境で動作を確認しています。

  • Redmine 4.2
  • Matomo 4.13.1

手順

さっくりとした手順

以下、SSHクライアントで実施する作業です

  1. Redmineのベースファイルにトラッキングコードを追記します。
  2. Webサービスを再起動します。

※既存システムに変更を加えるため、設定ファイルのバックアップは必須です※

matomo 管理画面で実施する作業

matomoのWebサイトを構築/初期設定後、以下のようなJavaScriptトラッキングコードが表示されます。

<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
 スクリプト
  })();
</script>
<!-- End Matomo Code -->

これを控えておきます。

Redmine稼働サーバで実施する作業

ベースファイルのバックアップを取ります。

sudo cp -pi /var/lib/redmine/app/views/layouts/base.html.erb /path/to/backup/directory/base.html.erb.$(date +%Y%m%d)

diff -u /var/lib/redmine/app/views/layouts/base.html.erb /path/to/backup/directory/base.html.erb.$(date +%Y%m%d)
# 差分が無いことでバックアップが取れていることを確認します。

ベースファイルにトラッキングコードを挿入します。

sudo vi /var/lib/redmine/app/views/layouts/base.html.erb

追記内容と位置

<!-- page specific tags -->
# この直下に、matomoが提供したトラッキングコードを貼り付け
<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
 スクリプト
  })();
</script>
<!-- End Matomo Code -->
<%= yield :header_tags -%>
</head>

保存後、差分を確認します。

diff -u /path/to/backup/directory/base.html.erb.$(date +%Y%m%d) /var/lib/redmine/app/views/layouts/base.html.erb 
 <!-- page specific tags -->
+<!-- Matomo -->
+<script>
+  matomoが提供したトラッキングコード
+  })();
+</script>
+<!-- End Matomo Code -->
 <%= yield :header_tags -%>
 </head>

設定を反映します。

sudo systemctl restart apache2.service

aystemctl status apache2.service

# 自分が使っているWebサービスに合わせます

設定反映確認

  1. 設定を行ったRedmineサイトに数回アクセスをします。
  2. ページのソースを確認し、ヘッダ部分に追記したスクリプトがあることを確認します。
  3. matomo Web画面でアクセス解析が表示されていることを確認します。

以上で、設定は完了です。

おまけ

この手のJavaScriptを入れるため、格好のプラグイン「view_customize_plugin」を使えばSSHで作業する必要は無かったと思いますが、筆者の知見不足でその設定はうまくいきませんでした。

やってダメだった設定

  1. Redmineに管理者権限でログインします。
  2. 管理>表示のカスタマイズに移動します。
  3. 新しい表示のカスタマイズをクリックします。

以下の設定を行いました。

  • パスのパターン:空白
  • プロジェクトのパターン:空白
  • 挿入位置:全ページのヘッダ
  • 種別:JavaScript
  • コード: matomoが提供したトラッキングコード

その後、作成をクリックするもヘッダに

})();

と追加されるのみでした。

Redmineへの不正ログインをfail2banで制御する。

概要

インターネット環境にあるRedmineを不正ログインから防ぐため、不正ログイン対策パッケージfail2banと連携させました。

参考としたURL

https://www.redmine.org/projects/redmine/wiki/HowTo_Configure_Fail2ban_For_Redmine

環境

2023年1月現在、以下の環境で動かしています。

  • AWS Lightsailに立てているUbuntu20.04インスタンス

前提(導入済みパッケージ)

以下、既に導入済みです。

  • Redmine 4.2
  • fail2ban 0.11.1

本記事ではproduction.logの格納場所を

/var/log/redmine/production.log

としています。ご自身の環境に合わせてください。(通例は/var/lib/redmine/log の場合が多いです)

手順

さっくりとした手順

  1. fail2banの設定ファイルにredmine用の設定ファイルを作成します。
  2. jail.localファイルに上記設定ファイルを読み込ませます。(ファイルに追記します)
  3. fail2banサービスを再起動します。

稼働サービス(fail2ban)に修正を加えるので、必ずバックアップは取りましょう。

詳細手順

redmine用の設定ファイルを作成します。

cat <<- __EOF__ | sudo tee -a /etc/fail2ban/filter.d/redmine.conf
# redmine configuration file
#
# Author: David Siewert
#
# $Revision$
#
[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

datepattern = %%Y-%%m-%%d %%H:%%M:%%S %%Z$
failregex = Failed [-/\w]+ for .* from <HOST>

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

# Source:
#http://www.fail2ban.org/wiki/index.php/MANUAL_0_8
__EOF__
作成確認
ls -l /etc/fail2ban/filter.d/redmine.conf
# rootユーザで上記ファイルが作成されていることを確認します。

jail.localファイルのバックアップを取ります。

sudo cp -pi /etc/fail2ban/jail.local /etc/old/jail.local.$(date +%Y%m%d)
# バックアップの格納ディレクトリは自分の環境に合わせます。

diff -u /etc/fail2ban/jail.local /etc/old/jail.local.$(date +%Y%m%d)
# バックアップ元とバックアップ先の差分が無いことでバックアップが取れていることを確認します。(何も返ってこなければ正常にバックアップできています)

jail.localファイルに追記を行います。

cat <<- __EOF__ | sudo tee -a /etc/fail2ban/jail.local

[redmine]
enabled  = true
filter   = redmine
port     = 80,443
#backend  = polling
# 動作がうまくいかない場合は上記「backend」をコメントアウトしてください。
action   = iptables-allports[name=redmine]
logpath  = /var/log/redmine/production.log
# production.logの格納位置です。ここは自分の環境に合わせます。
maxretry = 3
# ログイン試行に3回失敗した場合、アクセスを拒否します。
findtime = 86,400
# 1日アクセスを禁止します。
bantime  = 20
# ログイン試行の判定です
# トータルで「20秒の間、ログインに3回失敗したときに1日アクセスを禁止する」設定です
__EOF__

追記した内容の差分を確認します。

diff -u /etc/old/jail.local.$(date +%Y%m%d) /etc/fail2ban/jail.local
差分内容
+
+[redmine]
+enabled  = true
+filter   = redmine
+port     = 80,443
+#backend  = polling
+# 動作がうまくいかない場合は上記「backend」をコメントアウトしてください。
+action   = iptables-allports[name=redmine]
+logpath  = /var/log/redmine/production.log
+# production.logの格納位置です。ここは自分の環境に合わせます。
+maxretry = 3
+# ログイン試行に3回失敗した場合、アクセスを拒否します。
+findtime = 86,400
+# 判定失敗時、1日アクセスを禁止します。
+bantime  = 20
+# ログイン試行の判定です
+# トータルで「20秒の間、ログインに3回失敗したときに1日アクセスを禁止する」設定です。

設定ファイルの動作確認を行います。

まず、自分のredmineのログイン画面でわざとログインを失敗させます。

このとき、

cat /var/log/redmine/production.log |grep Failed
# production.logのパスは自分の環境に合わせます。

とすることで、

Failed login for 'ユーザ名' from IPアドレス at 2023-01-01 00:00:00 UTC

のように、失敗させたときのログが表示されます。

次に、

fail2ban-regex /var/log/redmine/production.log /etc/fail2ban/filter.d/redmine.conf
# production.logのパスは分の環境に合わせます。

を実行します。

Results
=======

Failregex: 1 total
|-  #) [# of hits] regular expression
|   1) [1] Failed [-/\w]+ for .* from <HOST>
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [2] Year-Month-Day 24hour:Minute:Second Zone name$
`-

Lines: 4281 lines, 0 ignored, 1 matched, 4280 missed
[processed in 0.08 sec]

と、ログイン失敗時の行数分「X matched」と表示されます。これで、設定ファイルとログのパス設定に問題がないと確認が取れました。

設定を反映します。

sudo systemctl restart fail2ban.service

systemctl status fail2ban.service
#active (running)であることを確認します。

以上で、設定は完了です。

Redmineのチケットをダイレクトに編集するプラグインを追加。 (redmine_issue_dynamic_edit)

概要

Redmineのチケット、作成した後に細部を修正することは多々あると思います。
そういうとき、Jiraのように修正したい箇所をクリックするだけで修正できるプラグインを導入しました。

プラグイン名

redmine_issue_dynamic_edit

動作を確認した環境

Redmine 4.2

導入時

Gem追加:不要
DBマイグレーション:不要

手順

さっくりとした手順

  1. SSHログイン後、Redmineプラグインに移動
  2. gitでレポジトリをダウンロード
  3. Webサービス再起動

ディレクトリに移動します。

cd /var/lib/redmine/plugins
# 自分の環境に合わせます。

プラグインを配置します。

sudo -u www-data git clone https://github.com/Ilogeek/redmine_issue_dynamic_edit

ls -ld redmine_issue_dynamic_edit
# このディレクトリがあることを確認します

Webサービスを再起動します。

sudo systemctl restart apache2

動作

Redmineで任意のチケットを開きます。

エディットアイコンが出てくるのでそれをクリックします。

項目を編集し、チェックをクリックします。

修正内容が反映されています。

redmineのテーブルをタブ区切りで書くプラグイン導入。(redmine_tsv_macro)

これで、Redmineでの記事やチケットの作成作業が更に捗ります。

プラグイン概要

こういうエクセルファイルのテーブルをredmineのMarkdownに書き写す場合、TyporaやGrowiのテーブル機能を経由して変換する必要がありました。

これをほぼコピペだけで完結させるプラグインです。

参照URL

  • https://taikii.net/posts/2019/12/redmine-plugins-2019/
  • https://github.com/taikii/redmine_tsv_macro

手順

全て管理者権限で実施しています。

redmineディレクトリに移動します。

cd /var/lib/redmine/plugins
# 自分の環境に読み替えます

プラグインをインストールします。

sudo -u www-data git clone https://github.com/taikii/redmine_tsv_macro.git
# Webサービスを実行するユーザに合わせます(apache,nginxなど)

システムに反映させます。

systemctl restart apache2.service
# 自身の環境に合わせます

使い方

テーブルを作りたいところに{{tsv_h }}と入力し、その間にエクセルのブックをコピーしてペーストするだけです。

入力例

{{tsv_h
日付    曜日  天気  朝   朝:場所    昼   昼:場所    夜   夜:場所    備考
2023/1/1    日   晴れ  おせち 自宅  おせち 自宅  カレー 自宅  
2023/1/2    月   晴れ  明太釜玉うどん 自宅  クリームパスタ 自宅  餃子雑煮    自宅  
2023/1/3    火   晴れ  鳥オムレツ   自宅  ソーセージ定食 自宅  カツ丼 自宅  
2023/1/4    水   晴れ  ハンバーグ定食 自宅  春巻き弁当   自宅  雑煮  自宅  
2023/1/5    木   晴れ  ソーセージ定食 自宅  チャーシュー麺セット  ぎょうざの満洲 プラウンマサラ 自宅  
}}

出力結果

Excelのみならず、Googleスプレッドシート経由でも他のアプリを利用することなく、ブラウザ間のみでシートの貼り付けが可能になります。

また、{{tsv_h }}{{tsv }}とすることで、ヘッダを用いないテーブルが作成可能です。

注意点

  • ヘッダは空白行を作らないようにしてください。そうしないと全体のテーブルがずれます。
  • また、セルに改行があったり記号などでも崩れるようです。
  • 崩れないテーブルを作りたい場合は素直に他のツールを使います。

同一サーバ上で2つめのredmineを構築。

redmineはプロジェクトごとに機能の増減やアクセス権を増やせるものの、諸般の事情で「全く別のドメインで新たにredmineを構築する」必要がありました。

以下の手順でうまくいったので、メモとして残します。

環境

  • Ubunut 20.04 (AWS Lightsailインスタンス上)
  • 既に以下のredmineを立ち上げ済み
    • redmine 4.2
    • ruby 2.7
    • mysql 8.0.31

rubyのバージョンの関係で4.2系をインストールすることにします。また、既に動いている環境なのでapacheやmysqlの初期設定は行っていません。

立ち上げ手順

前提

  1. 新たなドメインを取得しているものとします。
  2. mysqlは同一サーバ上にあり、管理者権限を持っているものとします。
  3. この段階ではhttpsを行わないので、グローバル環境で実施する際は早急にSSL化を行ってください。
  4. また、筆者が使いたいプラグインの関係上、4.2をインストールします。

さっくりとした概要

次の内容を実施します。

  1. 新たなredmine用のデータベースを新規で作る。
  2. 現行とは別のディレクトリ上にredmineのプログラムを展開する。
  3. apacheのバーチャルホスト機能で新規redmineの機能を

注意事項

  • 現行のredmineをredmine.sample.com/redmine
  • 新しいredmineをredmine2.sample.com/redmine2

で稼働させます。

現行稼働している時に新しいものを立ち上げる場合は、現行環境のバックアップを取るなどの施策を行ってください。

以下、管理者権限で行います。

redmine用DB/ユーザ作成

mysql -uroot -p
CREATE DATABASE redmine2 character set utf8mb4;
CREATE USER 'redmine2'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL ON redmine2.* TO 'redmine2'@'localhost';
flush privileges;
exit

redmine取得

ソースダウンロード

mkdir /var/lib/redmine2
chown -R www-data:www-data /var/lib/redmine2
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/4.2-stable /var/lib/redmine2

configファイル編集

cp -pi /var/lib/redmine2/config/database.yml.example /var/lib/redmine2/config/database.yml
vi /var/lib/redmine2/config/database.yml
編集ファイル内容

productionの部分を以下のように変更します。

production:
  adapter: mysql2
  database: redmine2
  host: localhost
  username: redmine2
  password: "パスワード"
  encoding: utf8mb4

redmineインストール

cd /var/lib/redmine2
sudo -u www-data bundle install --without development test --path vendor/bundle
sudo -u www-data bundle exec rake generate_secret_token
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

設定ファイル編集

vi /etc/apache2/sites-available/redmine2.conf
設定ファイル内容
<VirtualHost *:80>
  ServerName redmine2.sample.com

Alias /redmine2 /var/lib/redmine2/public
<Location /redmine2>
PassengerBaseURI /redmine2
PassengerAppRoot /var/lib/redmine2
Require all granted
</Location>

  ErrorLog /var/log/apache2/redmine2.sample.com_error.log
  CustomLog /var/log/apache2/redmine2.sample.com_access.log combined
</VirtualHost>

リダイレクトなどで軽くハマり、この設定に落ち着きました。この後、SSL化の手順を実施します。

設定ファイル有効化

a2ensite redmine2.conf
apache2ctl configtest
# Syntax OKを確認します。
systemctl  reload apache2.service

アクセス確認

http://redmine2.sample.com/redmine2

でログインします。

定期作業のチケット化。(redmine_チケットテンプレート)

やりたいこと

このワイルドカード証明書発行は自動発行ではありません。また、ローカル証明書としても保存したいので結構やることがあります。

現時点での運用案

redmineのチケットテンプレートとすることで、手順をチケットに流し込むことにしました。

一度作ってしまえば後は新規チケットとして発行し、それに沿って行けば抜け漏れがありません。(redmineのリマインド機能も利用します)

また、テンプレートそのものを直すことで後の手順変更にも対応可能です。

設定したテンプレート

  • ドメインはsample.domainとしています。
  • 実施時期はLet's Encryptの更新サイクルに合わせています。
  • 作成年月を後で修正することがないように変数化しています。
  • apacheとnginxの設定ファイルの証明書/秘密鍵参照先はそれぞれシンボリックリンク先なので、リンクを貼り替えるだけで証明書が更新できるようにしています。
### 概要

Let's EncryptのSSLワイルドカード証明書を発行して更新する。

### 実施時期

毎年
- 3月
- 6月
- 9月
- 12月

### 実施手順 (AWS Lightsailサーバ)

#### 作業ディレクトリ作成

```bash
mkdir -p /home/work/ssl$(date +%Y%m)
cd /home/work/ssl$(date +%Y%m)
```

#### 証明書発行

```bash
sudo certbot certonly --manual \
    --preferred-challenges dns-01 \
    --server https://acme-v02.api.letsencrypt.org/directory \
    -m メールアドレス \
    -d *.sample.domain
```

1. コマンド発行後、TXTレコードの登録指示がある。
1. AWS管理コンソールにログインする
1. 指示があったTXTレコードを登録
1. 以下のコマンドで結果が返ってくるまでしばらく待つ

```bash
nslookup -type=TXT _acme-challenge.sample.domain
```
→ 結果が返ってきたらEnter。証明書が更新される。

#### 証明書を作業ディレクトリにコピー

```bash
sudo cp -pi /etc/letsencrypt/live/sample.domain-0001/fullchain.pem ./sample.domain.crt.$(date +%Y%m)
sudo cp -pi /etc/letsencrypt/live/sample.domain-0001/privkey.pem ./sample.domain.key.$(date +%Y%m)
```

#### 証明書の整合性を確認

```bash
openssl x509 -noout -dates -subject -in sample.domain.crt.$(date +%Y%m)
# 期限が延びていることを確認

openssl x509 -in sample.domain.crt.$(date +%Y%m) -noout -modulus | md5sum
openssl rsa -in sample.domain.key.$(date +%Y%m) -noout -modulus | md5sum
# 証明書-秘密鍵のハッシュ値が同じであることを確認

openssl x509 -issuer_hash -noout -in sample.domain.crt.$(date +%Y%m)
sed -n -e'1d' -e'/BEGIN/,$p' sample.domain.crt.$(date +%Y%m) | openssl x509 -subject_hash -noout
# 証明書-中間証明書の発行元のハッシュ値が同じであることを確認
```

### 実施手順 (apache/nginxサーバ)

#### 証明書を格納する(nginx/apache共通)

ここからは管理者権限で実施する。

```
cd /etc/certs/
# 証明書ファイルを格納したディレクトリに移動します

vi sample.domain.crt.$(date +%Y%m)
# AWSサーバで発行した証明書を貼り付けます

ls -l
# *以下を確認します*
# 更新したLet's Encyrptの証明書ファイルがあること
# 証明書のシンボリックリンクの向き先が前回更新年月であること

ln -sf sample.domain.crt.$(date +%Y%m) sample.domain.crt 

ls -l
# *以下を確認します*
# 証明書のシンボリックリンクの向き先が*今回*更新年月であること
```


#### 秘密鍵を格納する(nginx/aapche共通)

```bash
cd /etc/private
# SSL秘密鍵を格納したディレクトリに移動します

vi sample.domain.key.$(date +%Y%m)
# AWSサーバで発行した秘密鍵を貼り付けます

ls -l
# *以下を確認します*
# 更新したLet's Encyrptの秘密鍵ファイルがあること
# 証明書の秘密鍵の向き先が前回更新年月であること

ln -sf sample.domain.key.$(date +%Y%m) sample.domain.key 

ls -l

# *以下を確認します*
# 証明書の秘密鍵の向き先が*今回*更新年月であること
```

#### 設定反映 

##### nginxの場合

```bash
nginx -t
# syntax is okを確認
systemctl restart nginx
systemctl status nginx
# 再起動後、正常に稼働していることを確認
```

##### apacheの場合

```bash
apache2ctl configtest
# Syntax okを確認
systemctl restart apache2
systemctl status apache2
# 再起動後、正常に稼働していることを確認
```

#### 反映確認

ブラウザで証明書が延びていることを確認

Page 1 of 6

Powered by WordPress & Theme by Anders Norén