LoginSignup
5
6

More than 5 years have passed since last update.

Web(wdCalendar)による情報共有

Last updated at Posted at 2017-09-24

スケジュール共有のために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のイメージ化にチャレンジ

Dockerfile
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 と接続しなければ不要。

docker-compose.yml
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 でアクセスするとスケジュール表を表示すると以下の画面になる。

スクリーンショット 2017-10-01 12.07.37.png

docker-compose.yml ファイル環境変数MASTERMOST_BOTの の箇所に MattermostのIncoming Webhooks で登録したURLに置き換えると、カレンダーへのスケジュール追加・更新・削除時に、Mattermostに以下のように通知される。

スクリーンショット 2017-10-01 12.08.31.png

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)を使用した場合。変更している場合は、バックアップ・リストアスクリプトを修正すること。

バックアップ

バックアップ用のスクリプト。

backup.sh
#!/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の登録
restore.sh
#!/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分間隔でいいので、自動的に画面を更新したい。

参考

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6