Lightsail で起動した Redmine の初期設定

未分類

前回の続きです。

Lightsail で Redmine を起動する!
現在 SIer に転職して、とりあえず「案件」とやらの「プロジェクトマネージャー」というのをトライしています。プロジェクト管理経験ないんですけど、さすがに SIer に入ってプロジェクト回したことないままはまずいでしょうということで、小さ...

Redmine自体は https 化して起動ログインできる状態になったので、いろいろ設定して使えるようにします。

やる内容

  1. メール送信設定
  2. オススメの初期設定を実行1
  3. オススメの初期設定を実行2
  4. 「farend basic」テーマの適用
  5. Easy Gantt プラグインのインストール
  6. ViewCustomizePlugin のインストール

参考サイト

[AWS] LigthsailにBitnami版Redmine4.1を構築する
新たにジョインしたプロジェクトでPM業務を担当することになりまして、古来から伝わりしRedmineを準備した際のメモです。……本当は今をときめくClickUpあたりを使いたかったんですが予算の兼ね合いで泣く泣くw Bac
Lightsailのbitnami RedmineにRedmine Ganttプラグインを導入する - Qiita
Lightsailのbitnami RedmineにPlantUMLプラグインを導入するの続き。 bitnamiのRedmineを使っている関係上、実行ユーザーが管理者権限を持っているため、sudoを使用していますが、ご自身の環境に...

メール送信設定

事前準備

事前に SES でSMTP設定できている状態とします。(ここが面倒なんですが、自分は以前やっていたので・・・)

↓が参考になります。

[AWS] SESを利用しSMTPサーバの準備を行う
AWS SESを利用するとSMTPサーバが簡単に用意できます。EC2から利用する場合、無料枠が月間6.2万通まで用意されていますので、個人的な利用や小規模なプロジェクトであれば料金は気にしなくても良さそうです。 今回はS

sshで設定を変更

以下のコマンドを実行し、設定ファイルの場所を探します。

sudo find / -type f -name configuration.yml

いったんバックアップとっときます。

sudo cp <上記で見つかったファイルのパス> configuration.yml.back

ファイルを変更します。

sudo vi /bitnami/redmine/config/configuration.yml

以下を追記します。

default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: email-smtp.ap-northeast-1.amazonaws.com
      port: 587
      authentication: :plain
      domain: xxx # SESに登録したメール送信元のドメイン
      user_name: xxx
      password: xxx

ここまででいったん念のため Redmine をリブートします。

確認

メールが正しく送られるか確認します。

  • Redmine の上部メニューから、管理 → 設定を選択
  • 「メール通知」タブにて、送信元となるメールアドレスを設定
    • このアドレスでRedmineから通知が来ます
  • 適当にユーザーを作成すると、正しく設定ができていればそのユーザーのアドレスにメールが届きます

「farend basic」テーマの適用

redmine のインスタンスにsshして以下を実行します。

sudo git clone https://github.com/farend/redmine_theme_farend_basic.git /opt/bitnami/redmine/public/themes/farend_basic

特にリブートとか不要で、管理→設定で表示タブの「テーマ」にて「farend_basic」を選択すると適用されます。

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

まず、下記より Redmine Gantt を取得します。

Redmine Community Support by Easy - Easy Redmine
Redmine Community Support by Easy

勝手にダウンロードできるタイプではなく、しっかり氏名・所属・メールアドレス等を入力する必要があります。
登録すると、登録したメールアドレスにダウンロードリンクが送られてきます。

2023/1現在、ダウンロードリンクからダウンロードすると、easy_gantt_pro-5-x.zip が手に入ります。
あれ?pro?さらに解凍すると、 easy_baseline, easy_gantt, easy_gantt_pro の3つが入ってました。
何か100% free とかになってるし、もしかしてproって無償化した?とか思いましたが、とりあえず今回は easy_gantt(proじゃないやつ)を使います。

Redmineのインスタンスにコピー

scp でコピーします。

scp -i <sshとかで使用する秘密鍵> .\tmp\easy_gantt_pro-5-x.zip bitnami@xxxx:~/
プラグインのデプロイ

まず解凍します。

unzip easy_gantt_pro-5-x.zip
mv easy_gantt /bitnami/redmine/plugins/
プラグインファイルの権限変更
cd /bitnami/redmine/plugins/
sudo chown -R bitnami.daemon easy_gantt
sudo chmod -R 775 easy_gantt
インストール
cd /opt/bitnami/redmine/
sudo bundle exec rake redmine:plugins NAME=easy_gantt RAILS_ENV=production
sudo bundle exec rake --trace db:migrate RAILS_ENV=production
sudo bundle exec rake redmine:plugins:migrate RAILS_ENV=production
Redmine 再起動
sudo /opt/bitnami/ctlscript.sh restart

ViewCustomizePlugin のインストール

これはかなりてこずりました。

よくわかってないのですが、とりあえず備忘録しておきます。

plugins フォルダへのデプロイ
cd /opt/bitnami/redmine
git clone https://github.com/onozaty/redmine-view-customize.git plugins/view_customize
インストール

ここでエラーになりました。

bundle install
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the /opt/bitnami/redmine/Gemfile freeze
by running `bundle config unset deployment`.

The dependencies in your gemfile changed

You have added to the Gemfile:
* activerecord-compatible_legacy_migration

こちらを参考にし、.bundle/config の中に BUNDLE_DEPLOYMENT: "true" があるとそれを削除するようにします。

cat .bundle/config
---
BUNDLE_BIN: "bin"
BUNDLE_DEPLOYMENT: "true" # ★いました
BUNDLE_PATH: "vendor/bundle"
BUNDLE_WITHOUT: "test:development"

# 消します
bundle config --delete deployment

# 再確認
cat .bundle/config
---
BUNDLE_BIN: "bin"
BUNDLE_PATH: "vendor/bundle"
BUNDLE_WITHOUT: "test:development"

再度インストール実行

bundle install
# うまくいった

# インストール実行
sudo bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Redmine を再起動します。

sudo /opt/bitnami/ctlscript.sh restart

以下のようになっていたらインストール成功です。

ViewCustomizePlugin による祝日の追加

Easy Gantt では祝日(祝日だけでなく、もちろんオリジナルの休日も)がガントチャートに反映されないそうです。
それに対して力技で強制的に変更します。

前項で ViewCustomizePlugin を入れていることを前提として、以下の流れで設定します。

  • 管理画面の「表示のカスタマイズ」を選択
  • 「新しい表示のカスタマイズ」を選択
  • 以下の通り入力
    • パスのパターン: /projects/.*/easy_gantt
    • プロジェクトのパターン: 空白
    • 挿入位置:「全ページのヘッダ」
    • 種別:「JavaScript」
    • コード:
// 以下例です
$(document).ready(function(){
  // 祝日対応
  window.ysy.settings.holidays = [];    // これないとエラーになる
  window.ysy.settings.holidays.push(
    '2023-01-01',  // 元旦
    '2023-01-02',  // 年始
    '2023-01-03',  // 年始
    '2023-01-09',  // 成人の日
    '2023-02-11',  // 建国記念の日
    '2023-02-23',  // 天皇誕生日
    '2023-03-21',  // 春分の日
    '2023-04-29',  // 昭和の日
    '2023-05-03',  // 憲法記念日
    '2023-05-04',  // みどりの日
    '2023-05-05',  // こどもの日
    '2023-07-17',  // 海の日
    '2023-08-11',  // 山の日
    '2023-09-18',  // 敬老の日
    '2023-09-23',  // 秋分の日
    '2023-10-09',  // スポーツの日
    '2023-11-03',  // 文化の日
    '2023-11-23',  // 勤労感謝の日
    '2023-12-29',  // 年末
    '2023-12-30',  // 年末
    '2023-12-31'   // 年末
  );
});

注意

上記の対応では現在うまく動きませんでした。
みたところ、おそらくプラグイン側のソースコードが変更になっているっぽいです。
以下にたぶんこうしたら動くだろうというeasy_ganttプライグインのソースコードを載せますが、自己責任でお願いします。

# easy_gantt/assets/javascripts/easy_gantt/dhtml_rewrite.js
  ysy.view.initNonworkingDays = function () {
    var work_helper = gantt._working_time_helper;
    work_helper.defHours = ysy.settings.hoursPerDay;
    var i;
    // Now we specify working days
    var nonWorking = ysy.settings.nonWorkingWeekDays;
    for (i in nonWorking) {
      work_helper.set_time({day: nonWorking[i] % 7, hours: false});
    }
+    work_helper.set_holidays(ysy.settings);
    work_helper._cache = {};
  };
  gantt._working_time_helper = {
    defHours: 8,
    timeformat: "YYYY-MM-DD",
    days: {0: true, 1: true, 2: true, 3: true, 4: true, 5: true, 6: true},
+    holidays: [],
    dates: {},
    _cache: {},
    oneDaySeconds: 1000 * 60 * 60 * 24,
    oneHourSeconds: 1000 * 60 * 60,
+    formatDate: function (date) {
+        if (date._isAMomentObject) {
+            return date.format(this.timeformat);
+        }
+        return moment(date).format(this.timeformat);
+    },
    toMoment: function (date) {
      if (date._isAMomentObject) {
        return date;
      }
      return moment(date);
    },
+    set_holidays: function(settings){
+      if(settings.holidays !== undefined){
+        this.holidays = settings.holidays;
+      }
+    },
    set_time: function (settings) {
      var hours = settings.hours !== undefined ? settings.hours : true;
      if (settings.day !== undefined) {
        this.days[settings.day] = hours;
      } else if (settings.date !== undefined) {
        this.dates[+settings.date] = hours;
      }

    },
    is_weekend: function (date) {
      date = this.toMoment(date);
      return !this.days[date.day()];
    },
    is_working_day: function (date) {
+      const formatedDate = this.formatDate(date);
      date = this.toMoment(date);
      if (!this.days[date.day()]) {
        return false;//week day
      }
+      // check if holiday
+      if (this.holidays.indexOf(formatedDate) > 0){
+        return false;
+      }
      var val = this.get_working_hours(date);
      return val > 0;
    },

コメント

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