Docker+Redmineにkanban Pluginを導入する

社内でプロジェクト管理に使うツールを物色しています。

Trelloあたりで管理していましたが、思った通り管理できませんので、Redmineあたりを試験導入してみます。

試験導入の前に、QNAP上でREDMINEをいれてみましたが、Trelloより状況が見渡せると感じました。

すこしTrelloも触っていたので、かんばんシステムが欲しいところです。

https://github.com/happy-se-life/kanban

を導入してみます。

さて、Docker上のコンテナにはどうやってアクセスしたら良いのだろう

[~] # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c52effcf336 sameersbn/redmine:3.4.6 "/sbin/entrypoint.sh…" 3 days ago Up 3 days 443/tcp, 0.0.0.0:10083->80/tcp redmine_redmine_1
58101793bec7 sameersbn/postgresql:9.6-2 "/sbin/entrypoint.sh" 3 days ago Up 3 days 5432/tcp redmine_postgresql_1
[~] #

でアクセスしたいコンテナのNAMESを調べて、

[~] # docker exec -it redmine_redmine_1 bash

でshellに入ります。
あとは、installに書かれているとおり実行すればOKでした。


1.Move to plugins folder.
git clone https://github.com/happy-se-life/kanban.git
2.Edit models/constants.rb for your environment.

3.Restart redmine.
4.Enable role permission to each users groups
5.Enable modules for each project.

aptが入っていたので、ついでにvimを入れておこう。

QNAP UPS + VMware ESXi

先の記事でQNAPにUPSを接続し、QNAPのNUTでクライアントに商用電源の状態を送り、クライアントマシンをshutdownするまでの設定を行ったが、あと1台VMWare ESXiが稼働している。
このマシンにもshutdownの信号を受信できるよう少し調べてみたが、ssh経由でshutdownを行う感じで出来そうだ。

具体的には、QNAPのNUT SERVERからVMwareESXi上に展開したWindowsマシンでNUT CLIENTを建てて、商用電源の喪失信号を受けると、ShutdownScriptを走らせる。

upsmon.conf内のSHUTDOWNCMDを変更
OSのシャットダウンを行わず、ESXiにゲストの停止(/bin/shutdown.sh)とESXi自体の停止(poweroff)をSSHで実行すると良いそうだ。

#SHUTDOWNCMD “/sbin/shutdown -h +0”
SHUTDOWNCMD “/usr/bin/ssh root@ESXiのIP ‘/bin/shutdown.sh;/bin/poweroff’”

下記参考ページの構成と私の構成が異なっており、そのまま対応できない。
しかし、非常に参考になる。
参考ページのGuestOSはUbuntuを利用されているが、私の環境ではWindowsなので、WinNUTを使いGuestWindowsホストのupsmon.confにシャッドダウンコマンドにsshを足して設定すれば良さそうだ。
sshの設定は、参考ページと同じで良さそうだ。

upsmon.conf内のSHUTDOWNCMDを変更することでゲストOSのシャットダウンを行うのではなく、ESXiにゲストの停止(/bin/shutdown.sh)とESXi自体の停止(poweroff)をSSHで実行する。
#SHUTDOWNCMD “/sbin/shutdown -h +0”
SHUTDOWNCMD “/usr/bin/ssh root@ESXiのIP ‘/bin/shutdown.sh;/bin/poweroff'”

なお、これを動作させるためにはESXi上で以下の設定をしておく必要がある。
+ESXiへのSSHログインができるように設定しておく。~
→vSphere Clientからホストの[構成]-[セキュリティプロファイル]で[サービス]のプロパティを開きSSHを選んでオプションボタンを押す。「ホストに連携して開始および停止」を選んで開始ボタンを押した後、OKボタンを押す。
+nutを入れたサーバからのパスワードなしでコマンドを実行するために、SSHキーを登録する。~
→ESXiサーバの/etc/ssh/keys-root/authorized_keys にパブリックキーを登録する。
+ESXi 上でゲストOSの自動起動・停止を設定しておく。~
→vSphere Clientからホストの[構成]-ソフトウェア項目の[仮想マシン起動/シャットダウン]から自動起動設定を選ぶ。

VMwareESXiがGuestOSが何台か稼働中なので、間をみて設定しておくことにする。
参考)

VMware ESXiのUPS連携

QNAP UPS + Windows WinNUT

QNAPにはUPSのために、NUT(Network UPS Tools)がインストールされているようだ。
WEB GUIから設定できるので楽に稼働状態まで持って行ける。
Network UPS Toolsというくらいなので、クライアントへ渡す事も可能だ。

QNAP同士なら、全くCUIに頼らなくても設定できる。

QNAP同士の設定後、Client側で、きちんとUPSを認識してくれた。

QNAPをNUT SERVER、WindowをNUT CLIENTにしてWindowsマシンもShutdownさせる。

WinNUTをインストール
EDITを押し、下記設定を入力

# MONITOR myups@bigserver 1 monmaster blah master
# MONITOR su700@server.example.com 1 upsmon secretpass slave

MONITOR qnapups@192.168.xxx.xxx 1 admin 123456 slave

Install As Service Windowsのサービスとして起動
Use Timed Shutdown バッテリーに切り替わった時にWindowsをshutdown
Shutdown Method バッテリーに切り替わってから何秒後にシャットダウンするかの秒数
Normal(通常),Forced(強制),Force If Hung(止まった場合強制),Hibernate(休止)から選択

WinNUT Ups MonitorがServiceに追加されており、状態が開始、スタートアップが自動に設定されていればOK

WinNUT起動ログ

Level     INFO	09/19/2018 11:40:09	Detected OS as Windows 7
Level   NOTICE	09/19/2018 11:40:09	Network UPS Tools upsmon 2.0.0.4
Level     INFO	09/19/2018 11:40:09	UPS: qnapups@192.168.xxx.xxx (slave) (power value 1)
Level     INFO	09/19/2018 11:40:09	Config Load: MINSUPPLIES set to 1
Level     INFO	09/19/2018 11:40:09	Config Load: NOTIFYCMD set to c:\Program Files\WinNUT\alertPopup.exe
Level     INFO	09/19/2018 11:40:09	Config Load: POLLFREQ set to 5
Level     INFO	09/19/2018 11:40:09	Config Load: POLLFREQALERT set to 5
Level     INFO	09/19/2018 11:40:09	Config Load: HOSTSYNC set to 15
Level     INFO	09/19/2018 11:40:09	Config Load: DEADTIME set to 15
Level     INFO	09/19/2018 11:40:09	Config Load: RBWARNTIME set to 43200
Level     INFO	09/19/2018 11:40:09	Config Load: NOCOMMWARNTIME set to 300
Level     INFO	09/19/2018 11:40:09	Config Load: FINALDELAY set to 5
Level    ALERT	09/19/2018 11:40:09	WinNUTUpsMon Service is starting to monitor UPS

テレビサーバのT3500、T3500TV、T3600にインストール設定完了

QNAPのNUTと通信出来るかを確認するため、QNAP CLIENTから情報を取得してみる。

upsc qnapups@192.168.xxx.xxx
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.runtime: 1680
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 26.8
battery.voltage.nominal: 24.0
device.mfr: American Power Conversion 
device.model: Smart-UPS 750
device.serial: AS1317214978  
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 1
driver.parameter.port: /dev/ttyS1
driver.version: 2.6.5
driver.version.data: APC HID 0.95
driver.version.internal: 0.37
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: UPS 08.3 / ID=18
ups.mfr: American Power Conversion 
ups.mfr.date: 2013/04/27
ups.model: Smart-UPS 750
ups.productid: 0003
ups.serial: AS1317214978  
ups.status: OL
ups.timer.reboot: -1
ups.timer.shutdown: -1
ups.vendorid: 051d

このように情報が取得出来る。
ところで、Windows版のupscは何処にあるんだ?

動作確認のため、ACケーブルを抜いてみる。きちんと仕事をしてくれているようだ。

Level   NOTICE	09/19/2018 12:32:58	UPS qnapups@192.168.xxx.xxx on battery
Level   NOTICE	09/19/2018 12:33:09	UPS qnapups@192.168.xxx.xxx on line power

なぜか、popupが立ち上がってこないなぁ・・・
しかたないので、line通知に変更

windows版curl.exeを配置してから、sndline.batを作成

:line settings
	set url="https://notify-api.line.me/api/notify"
	set curl="E:\bin\curl.exe"
	set token="Line Token ID"
	set lineMSG="message=[ %COMPUTERNAME% ] UPS IS ON BATTERY!!!"
echo %lineMSG%
:Line送信処理
	%curl% %url% -H "Authorization: Bearer %token%" -d %lineMSG%

batを書いても通知が来ないなぁ・・・
Install先が悪いのかもしれないなぁ・・・
installディレクトリを変更してみるか。

参考)

ffmpeg x264 x265

コーデックの指定

:CPU H264 : -vcodec libx264
:CPU H265 : -vcodec libx265
:Nvidia H264 : -vcodec h264_nvenc
:Nvidia H265 : -vcodec hevc_nvenc

downloadしながら再生に対応

-movflags +faststart

参考
http://tech.ckme.co.jp/ffmpeg_h264.shtml

ソフトウェアエンコードとGPUを利用したハードウェアエンコードの差が激しい
速度的には、圧倒的にハードウェアエンコードだが、ファイルサイズ的には、圧倒的にソフトウェアエンコードが有利という結果に。
どちらをメインで使うか悩んでしまう結果となった。
要約すると下記表の通り

h264 h265
速度 ファイルサイズ 速度 ファイルサイズ
cpu 8.6x 81.9MB 2.5x 46.1MB
gpu 11.5x 380.7MB 11.5 381MB

Machine
CPU Xeon E5-2687W SMP PowerLimit 80%
MEM 64GB
GPU GTX-1080
OS Windows 10.0.17134.228
FFMPEG 4.0.2

source file

Stream #0:0[0x1003]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709, top first), 720x480 [SAR 32:27 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1043]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 256 kb/s

h264 cpu encoding 8.6x(9.3x) 81.9MB

ffmpeg -deinterlace -dual_mono_mode main -i test.ts -vcodec libx264 -movflags +faststart test.cpu264.mp4

h264 gpu encoding 11.5x 380.7MB

ffmpeg -deinterlace -dual_mono_mode main -i test.ts -vcodec libx265 -movflags +faststart test.cpu265.mp4

h265 cpu encoding 2.5x(3.2x) 46.1MB

ffmpeg -deinterlace -dual_mono_mode main -i test.ts -vcodec h264_nvenc -movflags +faststart test.gpu264.mp4

h265 gpu encoding 11.5x 381MB

ffmpeg -deinterlace -dual_mono_mode main -i test.ts -vcodec hevc_nvenc -movflags +faststart test.gpu265.mp4

Ubuntu 14.04 LTS rsyslog

syslogを1箇所で管理したいため、rsyslogに受信設定を行う。

# diff rsyslog.conf rsyslog.conf.org 
18,20c18,20
< $ModLoad imudp
< $UDPServerRun 514
< $AllowedSender UDP ,127.0.0.1,192.168.10.0/24 --- > #$ModLoad imudp
> #$UDPServerRun 514
> 
22,24c22,24
< $ModLoad imtcp
< $InputTCPServerRun 514
< $AllowedSender TCP, 127.0.0.1.192.168.10.0/24 --- > #$ModLoad imtcp
> #$InputTCPServerRun 514
> 

rsyslog設定を読み直す。

# killall rsyslogd

rtx1200のログを転送する設定

syslog host [rsyslog_host ip address]
syslog facility local6
syslog notice on

転送されたlogは、全て/var/log/syslogに出てくるので、切り分けをする。

mkdir -p /var/log/recived
chown syslog:adm /var/log/recived
# vi 10-reviced.conf
:hostname, isequal, "router.home.local"   /var/log/recived/rtx1200.log
& ~ ← /var/log/syslogに記録したくない為
# killall rsyslogd

切り分けできているか、確認

tail -f /var/log/recived/rtx1200.log
Apr 14 15:50:34 router.home.local [IKE] receive heartbeat message from xxx.xxx.xxx.xxx
Apr 14 15:50:34 router.home.local [IKE] still connected : no message
Apr 14 15:50:34 router.home.local [IKE] receive heartbeat message from xxx.xxx.xxx.xxx
Apr 14 15:50:34 router.home.local [IKE] still connected : no message
Apr 14 15:50:34 router.home.local [IKE] receive heartbeat message from xxx.xxx.xxx.xxx
Apr 14 15:50:34 router.home.local [IKE] still connected : no message

つらつら受信している。
本体ログには、記録されていない。

logrotateの設定
/var/log/recived/*.logが新たに増えたので、logrotateに加える。

cat /etc/logrotate.d/recived
/var/log/recived/*.log {
        weekly
        missingok
        rotate 52
        compress
        notifempty
        create 640 syslog adm
        sharedscripts
}

logrotateはcronで動いているので、cronを再起動

service cron restart

動作確認をする。

logrotate -d /etc/logrotate.d/recived
# logrotate -d /etc/logrotate.d/recived
reading config file /etc/logrotate.d/recived

Handling 1 logs

rotating pattern: /var/log/recived/*.log  weekly (52 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/recived/rtx1200.log
  log does not need rotating

まだlogが溜まってないから、rotationする必要が無いと。
暫くしたら、rotateしたlogがあるか、確認してみる。