Docker環境でGLPIの自動実行機能を利用する

社内でgoogleフォームを利用し、ヘルプデスクの対応履歴を管理していましたが、チームメンバーが増えそろそろ限界を感じています。GLPIのユーザーサポート機能を簡易チケッティングシステムに利用できないか検討中です。
そのためにチケット作成時にメール通知する機能は最低必要ということでGLPIの「自動実行」という機能を活用した備忘録です。

GLPIの自動実行機能はチケット登録時にメールを送信したり、古いログの削除などを自動化します。
crontabでセットする必要があるようです。
そのためDockerfileにcron設定部分を追記します。
[前回記事](https://qiita.com/kk3567/items/c4f46cb43b02ced02325)をベースに編集していきます。

Dockerの1コンテナ・1プロセスの考え方に反しているようですが以下の記事が見つかりましたので気にしないことにします。
[勘違い: Dockerコンテナ1つごとに1プロセスだけ持たせればよい](https://techracho.bpsinc.jp/hachi8833/2014_06_16/17982)

![auto01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/db04f0d6-6717-8617-9f09-57b00bb35853.jpeg)

##環境
ベースの環境は[前回記事](https://qiita.com/kk3567/items/c4f46cb43b02ced02325)となります。
Docker version 18.09.4
docker-compose version 1.24.0
hostOS:CentOS7-minimal
GLPI9.3.3

コンテナベースイメージ
https://github.com/fjudith/docker-glpi
※オリジナルはmariaDBが5.5ですが10.3を使っています。



## 内容
- DockerのコンテナでCronをセット
参考：[docker-composeのコンテナ内でcronを動かす](http://my0shym.hatenablog.com/entry/2018/09/05/020019)

- 自動実行でチケット登録時にメールを送信する
参考：[公式フォーラム　 Automatic action - queuednotification](https://forum.glpi-project.org/viewtopic.php?id=159297)

- メールをチケットに自動登録する




##１．DockerのコンテナでCronをインストール・セットする ※追記内容のみ

１．Dockerfileにcronのインストールを追記

```dockerfile:Dockerfile#app
RUN apt-get install --no-install-recommends -yqq \
  zlib1g \
  cron \
  bzip2 \
  wget \
  vim \
  cron
```
２．cronにcrontab.bakの内容をセット

```dockerfile:Dockerfile#app
RUN crontab /opt/crontab.bak
```
３．コンテナ起動時にcronを起動

```dockerfile:Dockerfile#app

CMD cron && apache2-foreground

```

#####セットする内容

- チケット作成時のメール送信(queuednotification)  
- メール受信（mailgate)
- テンポラリファイルのクリーニング(temp)
- 古いログの消去(logs)
- 期限切れセッションの消去(session)


```bash:crontab.bak
# every 1 min
*/1 *  *  *  *   /usr/local/bin/php /var/www/html/front/cron.php --force mailgate &>/dev/null
*/1 *  *  *  *   /usr/local/bin/php /var/www/html/front/cron.php --force queuednotification &>/dev/null

# every 3 hours
5 */3  *  *  *   /usr/local/bin/php /var/www/html/front/cron.php --force temp &>/dev/null

# daily
8 0  *  *  *   /usr/local/bin/php /var/www/html/front/cron.php --force logs &>/dev/null
15 0  *  *  *   /usr/local/bin/php /var/www/html/front/cron.php --force session &>/dev/null


## for testing
#*/1 * * * *  /usr/local/bin/php /var/www/html/front/cron.php --force mailgate; echo " $(date) cron started" >>/var/log/cron/cron.log 2>&1
```







##２．自動実行でチケット登録時にメールを送信
1. 自動実行の設定
重要なのは動作モードをCLIとすることです。
　![auto-02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/af442090-80e7-caea-9b07-c13642299024.jpeg)

2. 通知設定・テスト
通知設定のメールフォロー設定にてメール関連の設定を行います。
管理者宛にテストメールを送るを実行します。
![auto-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/24f03d8c-7d07-0e01-2379-95f248f45a27.jpeg)
うまくいくと以下のようなメールが届きます。
![auto-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/036ef260-218c-991e-9a00-324feb66f0b6.jpeg)



3. チケット作成
下記チケット作成メニューで適当に作成
![auto-05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/903d18dd-2c68-4f13-45a8-a6391109ffbb.jpeg)

4. 受信確認
![auto-06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/e25da443-1115-5fff-7d6b-38b7f04522b9.jpeg)

##３．管理メールアドレス宛にメールを送信するとチケットを自動作成
自動実行の[mailgate]を利用してメールをチケット登録します。
<font color="Red">メールの送信者はユーザー登録されている必要があります。
メールアドレスが登録されていないとメールを受信してもチケットには登録されません。</font>

Googleフォームでフォームを作成し、必要項目を網羅した状態でチケット作成するようにしています。
現在は項目名：詳細に記載内容がすべて格納されます。GASでハンドリングすることで各項目へを動的割り当てできないかと考えています。（後述課題）


##課題

- 通知メールに返信することでチケットを更新したい
- チケット作成時に各項目にデータを自動入力したい（例）緊急度を高でチケット作成など
- チケット作成・更新時の通知宛先を内容によって変えたい

上記のような課題がありますが最低限の機能は実装できましたので、運用してみてその感想を今後書いていきたいと思います。