スケジュール共有のためにwdCalendar をdocker上に構築
閉鎖環境にMattermostを導入してメンバ間の情報共有を始めようとしているが、スケジュール情報共有機能が十分ではないため、いろいろ探したところ、wdCalendarが使えそうなのでdocker上に環境を構築したときのメモをまとめる。
Googleカレンダーが利用できればそれで問題は解決するのだが、Excel方眼紙による情報共有はできれば避けたい。 Excel運用が始まってしまったので、お一人様カレンダーになってしまった。
(2017/09/24) mattermostへのポスト機能を追加
(2017/10/01) 課題の対応。
- 週末の色対応(自分的に絶対外せない課題)
- 詳細編集機能の復活(ベースにしたソースから削除されていた)
- 祭日(〜2019/12/31)の初期登録
(2017/10/21) mattermostの情報のバックアップを追記(mattermost環境の構築手順を作成したときに移動)
環境
- CentOS 7.4.1708
- docker 1.12.6
- docker-compose 1.9.0
wdCalendar を Docker で起動するを参考にして、wdCalendar をdocker上構築し、サービスを考えた。
ベースとした wdCalendar はmysqlとphpを必要としているが、たかだか十数人程度の情報共有を考えているので、 mysqlのような本格的な RDB は必要ないので、データベースは、php:5.6.31-apacheに含まれるsqlite3を使用する。
ただし、php:5.6.31-apacheには、sqlite3コマンドが無いため、DB作成は php 経由となる。
コンテナイメージ化
Dockerfileを作成し、dockerのイメージ化にチャレンジ
FROM php:5.6.31-apache
WORKDIR /var/www/html
ADD wdCalendar .
RUN rm -fr .git* && \
mkdir -p /var/lib/db && \
echo "[Date]\ndate.timezone ='Asia/Tokyo'" >> /usr/local/etc/php/php.ini
ENTRYPOINT ["/var/www/html/docker-entrypoint"]
EXPOSE 80
CMD ["apache2-foreground"]
イメージ作成手順
$ git clone -b locale-jp https://github.com/ir-shin1/wdCalendar.git wdCalendar
$ docker build -t wdcalendar:0.1 .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wdcalendar 0.1 3bb16f9d0cce 6 seconds ago 378.9 MB
作成したコンテナの実行
SQLiteのDBは、wdCalendarソースを展開した場所のdb配下に作成する。SQLiteのいいところは、DBが単独ファイルで完結するのでバックアップ・リストアは以下の3ステップで済む。
- コンテナストップ
- DBのファイルコピー
- コンテナスタート
コンテナイメージを実行するために docker-compose.yml ファイルを作成する。ネットワーク redmine_network は、mattermost と同じネットワークにするため設定しているため、mattermost と接続しなければ不要。
version: '2'
services:
calendar_sv:
image: wdcalendar:0.1
container_name: calendar_sv
restart: always
ports:
- "8088:80"
volumes:
- ./db:/var/lib/db
# environment:
# MASTERMOST_BOT: <mattermost のIncoming Webhooks URL>
# MASTERMOST_BOTNAME: <BOTの名前>
networks:
- redmine_network
networks:
redmine_network:
external: true
dockerコンテナの起動
以前は、DBの作成などを手動で行っていたが、今回は、docker-entrypoint スクリプト内で行うようにした。
$ mkdir -pm 777 db
$ chcon -Rt svirt_sandbox_file_t db
$ docker-compose up -d
Webからアクセス
http://localhost:8088 でアクセスするとスケジュール表を表示すると以下の画面になる。
docker-compose.yml ファイル環境変数MASTERMOST_BOTの の箇所に MattermostのIncoming Webhooks で登録したURLに置き換えると、カレンダーへのスケジュール追加・更新・削除時に、Mattermostに以下のように通知される。
Mattermost
カレンダーの更新情報をMattermostで共有しているため、Mattermostデータのバックアップ・リストア方法を記載しておく。
Mattermostの環境構築手順の場で記載する内容だが、まだ作成できていないのでここにメモとして残しておく。
Mattermostの環境
- OS:CentOS7.4 (SELinux有効)
- docker-compose サービス名:mattermost_sv
- dockerコンテナ名:mattermost_sv
- dockerイメージ名:mattermost/mattermost-preview:4.2
- dockerネットワーク名:redmine_network
バックアップは公式のサイトを参照して、以下の三つをバックアップする。
- mattermost database (docker イメージのデフォルト mysql)
- server settings
- users files
データベースのユーザ、パスワードは、mattermost イメージのデフォルト(MYSQL_USER/MYSQL_PASSWORD)を使用した場合。変更している場合は、バックアップ・リストアスクリプトを修正すること。
バックアップ
バックアップ用のスクリプト。
# !/usr/bin/env bash
BACKUP=$PWD/backup
mkdir -p ${BACKUP}
chcon -t svirt_sandbox_file_t ${BACKUP}
# Mattermost データバックアップ
docker run --rm --entrypoint=bash \
--volume ${BACKUP}:/backup \
--volumes-from mattermost_sv:ro \
mattermost/mattermost-preview:4.2 \
-c 'cd /mm/mattermost ; tar zcf /backup/mattermost_backup.tar.gz config mattermost-data'
# MYSQLデータバックアップ
docker run --rm --entrypoint=bash \
--volume ${BACKUP}:/backup \
--network redmine_network \
mattermost/mattermost-preview:4.2 \
-c 'mysqldump -u mmuser --password=mostest -h mattermost_sv -A > /backup/mysql_backup.dmp'
リストア
リストアは、バックアップした環境とは以下の別環境を作成し、そこにリストアする場合のスクリプトとなっている。
リストア先の環境
- docker-compose サービス名:mattermost2_sv
- dockerコンテナ名:mattermost2_sv
- dockerイメージ名:mattermost/mattermost-preview:4.3
mattermostのログイン認証は、gitlab-ceとのSSOを利用しているため、単純にリストアしただけでは正常に動作しなかった。以下の二つの作業が必要になる。
- gitlab-ceへのアプリケーション登録、および、Secret、Application Idの作成
- mattermostの設定ファイル(/mm/mattermost/config/config_docker.json)へのSecret、Application Idの登録
# !/usr/bin/env bash
BACKUP=$PWD/backup
if [ -f ${BACKUP}/mattermost_backup.tar.gz -a -f ${BACKUP}/mysql_backup.dmp ] ; then
chcon -R -t svirt_sandbox_file_t ${BACKUP}
# Mattermost データリストア
docker run --rm --entrypoint=bash \
--volume ${BACKUP}:/backup:ro \
--volumes-from mattermost2_sv \
mattermost/mattermost-preview:4.3 \
-c 'cd /mm/mattermost ; tar xvf /backup/mattermost_backup.tar.gz'
# MYSQLデータリストア
docker run --rm --entrypoint=bash \
--volume ${BACKUP}:/backup:ro \
--network redmine_network \
mattermost/mattermost-preview:4.3 \
-c 'mysql -u mmuser --password=mostest -h mattermost2_sv < /backup/mysql_backup.dmp'
fi
課題
- 縦方向のサイズ変更に対応していないらしく、縦方向のウインドウサイズを変更してもスケジュールが追従してくれない。
- 10分〜15分間隔でいいので、自動的に画面を更新したい。