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


DockerにてGLPIを利用して資産管理を行っています。
実際にGLPIで運用している日本語情報が非常に少ないです。
オフラインの機器を多数管理するような場合に非常に使いやすいと思います。

[前回記事](https://qiita.com/kk3567/items/94a40b6eb7de0a58e470)の環境からアップグレードします。
※DBのバックアップは前回から変更ありません。
※OCS Inventory NGとの連携は行っていません。



####内容

- 9.2.1から9.3.3へのアップグレード時のデータベースエラー対応
- CASエラーについて
- データセンターのラック管理機能を利用する

####環境
Docker version 18.09.4
docker-compose version 1.24.0
hostOS:CentOS7-minimal

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

####ディレクトリ構成
/glpi933
├── app
│   ├── Dockerfile
│   ├── datainjection-2.6.4.tar.gz
│   └── php.ini
├── db
│   ├── 2019mmddHHMMSS.sql
│   ├── Dockerfile
│   └── script
│   　  └── db_backup.sh
├── docker-compose.yml
└── glpi.env
<font color="Red">※php.ini, db_backup.sh, glpi.envは前回と同じです。</font>

```docker:docker-compose.yml
version: '2'
services:
  db:
    build: ./db
    env_file:
    - ./glpi.env
    environment:
    - "TZ=Japan"
    volumes:
    - glpi-db93:/var/lib/mysql
    - ./db:/docker-entrypoint-initdb.d
    - glpi-db-backup93:/backup
    ports:
    - 32806:3306/tcp
    restart: always

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

volumes:
  glpi-db93: {}
  glpi-db-backup93: {}
  glpi-app93: {}
```

####Dockerfile #app　※前回から変更箇所のみ
バージョン指定

```dockerfile
ENV GLPI_VERSION=9.3.3
```
nanoをvimへ変更

```dockerfile
RUN	apt-get install --no-install-recommends -yqq \
	zlib1g \
	cron \
	bzip2 \
	wget \
	vim 
```
プラグインのバージョンアップ

```dockerfile
COPY datainjection-2.6.4.tar.gz /var/www/html/plugins/

WORKDIR /var/www/html
RUN tar zxvf  plugins/datainjection-2.6.4.tar.gz -C plugins/ && mv plugins/datainjection-2.6.4 plugins/datainjection
RUN rm plugins/remove.txt
EXPOSE 80
CMD apache2-foreground

```
####Dockerfile #db

```dockerfile
FROM mariadb:10.3
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 /script/db_backup.sh /opt/
RUN chmod +x /opt/db_backup.sh
RUN mkdir backup
```




###9.2.1から9.3.3へのアップグレード時のデータベースエラー対応
参考：[GLPI 9.3 convert tables to innodb](https://rdr-it.com/en/glpi-9-3-convert-tables-to-innodb/)
流れとしては9.2.1から9.3.3へアップグレードしデータベースのマイグレーションを実施します。
9.4系へいきなりアップグレードするとinnodb_migration.phpが存在していないためマイグレーションできません。

１．GLPI9.3.3イメージをビルド
ログイン時には以下のエラーが表示されます。
![glpi-error02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/42919be2-69b1-bc9e-8d60-bc639f1ba522.jpeg)


２．GUIでGLPIインストール　
インストールを完了せずにマイグレーションを実行すると下記エラーが発生します。
![glpi-error01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/287c69e9-a53c-4b12-fe1d-d909d7606d92.jpeg)

※CASエラーについて
とりあえず無視しても良いようです。
参考：[GLPI フォーラム](https://forum.glpi-project.org/viewtopic.php?id=164768)　
![glpi-error-01.jpg](https://qiita-image-store.s3.amazonaws.com/0/188071/098721cd-52af-9374-6811-1cc6f5dd4e2d.jpeg)


３．データベースをマイグレーション
appコンテナへ接続してからスクリプトを実行します。

```bash
$ docker exec -it glpi933_app_1 bash
```
コンテナログイン後

```bash

# php scripts/innodb_migration.php
```

[実行結果]
![glpi-success01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/10462ac7-9cf0-4eb2-81b1-45734cd6aa1a.jpeg)

４．起動確認
ブラウザで再度アクセスすると以下のようにエラーが消えています。
![glpi-success02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/695caa98-8e25-af5f-cad8-7f1dff3671ff.jpeg)

５．install.phpを削除
ついでにinstall.phpを削除します。

```bash
$ docker exec -it glpi933_app_1 bash
```
コンテナログイン後

```bash

# rm /install/install.php
```

６．データベースをバックアップ
配置済みのスクリプトを実行

```bash
$ cd glpi933
$ docker exec glpi933_db_1 ./opt/db_backup.sh
```

７．バックアップの保存場所

```bash
/var/lib/docker/volumes/glpi933_glpi-db-backup/_data/
```



###データセンターのラック管理機能
ラックイメージに情報資産で登録しているサーバを登録できます。
9.3より新たに追加された機能の一つです。

判明している課題：ポジション（ラックの何段目）の前・後・右・左が指定できるのですが登録できる機器は
１段に一つのみとなっています。１段に２つの機器を置いている場合は登録できません。
しばらく運用してみてまた感想書きたいと思います。


![rack00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/129d3c5c-a2ab-9d60-acdc-d7149cd30387.jpeg)
前・後・右・左を指定しても以下のように表示は１段を専有
![rack01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/3cc0c8a8-9c69-86de-c555-5e3a35a09c84.jpeg)
登録画面では前・後・右・左を指定可能
![rack02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188071/fb4a8a01-339d-574a-c2c0-680ea242c446.jpeg)


####次回試したいこと
1. Dockerでcron登録
2. 自動実行機能の利用
3. GLPI 9.4へのアップグレード