Docker環境でGLPIを0.85.5から9.2.1へアップグレード

Docker環境でGLPI0.85.5から9.2.1アップデートしたときの手順メモです。
9.4系が最新ですがDBのマイグレーションでテーブル関連のエラーが出るため保留にしました。
[公式フォーラム](https://forum.glpi-project.org/)で何件か投稿がありましたので、詳細確認後にアップグレードしたいと思います。

####その他対応内容
- phpのタイムゾーン設定(php.ini) 
参考：[Dokcerの公式wordpressコンテナのphp.iniの場所](https://unskilled.site/dokcer%E3%81%AE%E5%85%AC%E5%BC%8Fwordpress%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AEphp-ini%E3%81%AE%E5%A0%B4%E6%89%80/)

- データベースの初期データ読込み 
参考：[docker上のmysqlを使うにあたりよくあるパターン](https://blog.kazu69.net/2016/01/13/put-together-pattern-of-docker-mysql/) 


##環境
Docker version 18.09.1
docker-compose version 1.24.0
hostOS:CentOS7-minimal
GLPI:9.2.1

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


##ディレクトリ構成
/glpi921
├docker-compose.yml
├glpi.env #データベースの設定
├db
　├Dockerfile
　├script
　│　└db_backup.sh #DBのバックアップスクリプト
　└yyyymmdd.sql #データベースのバックアップファイル（リストア用）
└app
　├Dockerfile
　├datainjection-2.5.2.tar.gz
　└php.ini



##docker-compose.yml

```docker:docker-compose.yml

version: '2'

services:
  db:
    build: ./db
    env_file:
    - ./glpi.env
    environment:
    - "TZ=Japan"
    volumes:
    - glpi-db:/var/lib/mysql
    - ./db:/docker-entrypoint-initdb.d
    - glpi-db-backup:/backup
    ports:
    - 32806:3306/tcp
    restart: always

  app:
    build: ./app
    volumes:
    - /etc/localtime:/etc/localtime:ro
    environment:
    - "TZ=Japan"
    volumes:
    - glpi-app:/var/www/html/
    - ./app/php.ini:/usr/local/etc/php/php.ini
    links:
    - db:mysql
    ports:
    - 8081:80/tcp
    restart: always

volumes:
  glpi-db: {}
  glpi-db-backup: {}
  glpi-app: {}
```

##Dockerfile #app 
※修正箇所のみ
Vimを追加

```dockerfile

RUN apt-get -y update
RUN	apt-get install --no-install-recommends -yqq \
	zlib1g \
	cron \
	bzip2 \
	wget \
	nano \ 
    vim 
```

プラグインの配置と不要ファイルの削除を追記

```dockerfile

COPY datainjection-2.5.2.tar.gz /var/www/html/plugins/
WORKDIR /var/www/html
RUN tar zxvf  plugins/datainjection-2.5.2.tar.gz -C plugins/
RUN rm plugins/remove.txt

EXPOSE 80
CMD ["apache2-foreground"]
```

##Dockerfile #db
※オリジナルからの変更点：db_backup.shの配置とbackupディレクトリの作成

```dockerfile

FROM mariadb
RUN apt-get update
RUN apt-get install -y  vim locales
RUN apt-get install -y language-pack-ja-base language-pack-ja
RUN locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LC_CTYPE ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8

COPY db_backup.sh /opt/
RUN chmod +x /opt/db_backup.sh
RUN mkdir backup
```



##phpのタイムゾーン設定 ※修正箇所のみ

```:php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"

[mbstring]
; language for internal character representation.
; This affects mb_send_mail() and mbstring.detect_order.
; http://php.net/mbstring.language
mbstring.language = Japanese
```


##DBの初期設定

```bash:glpi.env

MYSQL_ROOT_PASSWORD=rootpass
MYSQL_DATABASE=glpi
MYSQL_USER=glpi
MYSQL_PASSWORD=userpass
```


##データベースの初期データ読込み
yyyymmdd.sql
GLPI0.85.5のデータベースのmysql dumpを準備しました。
dbディレクトリの直下に配置しています。
下記の記載により初期データのリストアが可能です。
詳細は上記参考ページをご確認ください。

```bash:docker-compose.yml
    - ./db:/docker-entrypoint-initdb.d
```

##GUIでアップグレード
注意点：アップグレードを選択
![glpi-update.jpg](https://qiita-image-store.s3.amazonaws.com/0/188071/2ab39c18-e818-80dd-4658-223eefee25de.jpeg)



##プラグイン
利用しているプラグインは[File injection]（※0.85ではdata injection）のみです。
バージョンにあったプラグインを[公式ページ](https://plugins.glpi-project.org/#/)よりダウンロード。
ファイルをコピーするプロセスをDockerfileに記載しております。
このプラグインをアプリ起動後に有効化します。
![plugin01.jpg](https://qiita-image-store.s3.amazonaws.com/0/188071/fe137257-3748-4469-38a8-f9b07f579e03.jpeg)
![plugin02.jpg](https://qiita-image-store.s3.amazonaws.com/0/188071/ce2d7fd7-eb1d-993e-5585-6b1305ef6f2a.jpeg)
![plugin03.jpg](https://qiita-image-store.s3.amazonaws.com/0/188071/e196da76-3a0c-e9f2-27b0-69edc669bfcf.jpeg)



##データベースのバックアップ設定（1日1回）
※ホストサーバでの作業となります。
スクリプトファイルは前回の記事のままです。[前回記事](https://qiita.com/kk3567/items/152781481e0e50b26f06)

```bash

$ crontab -e
```
18:30にデータベースのバックアップを実施

```bash
30 18 * * * docker exec glpi921_db_1 /opt/db_backup.sh
```



##ホスト起動時にコンテナ起動
※ホストサーバでの作業となります。
crontabにてリブート時に自動的にコンテナを起動するように設定しました。

```bash

$ crontab -e
```


```bash

@reboot cd /home/docker/glpi921/; docker-compose up -d
```





##今後運用で試したい機能
- ユーザーサポート機能
 - インシデント管理
 - メールでのチケット登録
 - Googleフォーム経由でのチケット登録

- 9.4へのアップグレード
 - データセンターのラックの管理