Help us understand the problem. What is going on with this article?

GLPI 0.85.5をDocker環境へ移行

資産管理にGLPIを使用しています。
昨年Docker環境へ移行した際の記録です。
事前にGLPIの過去のsql dumpを準備しました。
Dockerのインストール作業はわかりやすい記事が沢山ありますので省略しています。

環境

GLPI 0.85.5
Docker version 18.03.1-ce
docker-compose version 1.18.0
hostOS:CentOS7-minimal

一つのホストにdocker composeで2つのコンテナを起動

ベースイメージ
https://github.com/driket/docker-glpi

ディレクトリ構成

/glpi855
├docker-compose.yml
├glpi.env #データベースの設定
├db
 ├Dockerfile
 ├db_backup.sh #DBのバックアップスクリプト
 └yyyymmdd.sql #データベースのバックアップファイル(リストア用)
└app
 ├Dockerfile
 └start.sh

docker-compose.yml

※オリジナルからの変更点1:タイムゾーンを追加
※オリジナルからの変更点2:バックアップしたsqlファイルのコピー

version: '2'
  services:
    glpi:
      build: ./app
      ports:
      - "8080:80"
      links:
      - mysql:db
     environment:
     - "TZ=Japan"
     env_file:
     - ./glpi.env
     volumes:
     - glpi_data:/var/www/html/glpi

   mysql:
     build: ./db
     env_file:
     - ./glpi.env
    volumes:
    - mysql_data:/var/lib/mysql
    - mysql_backup:/backup
    environment:
    - "TZ=Japan"

  volumes:
    glpi_data: {}
    mysql_data: {}
    mysql_backup: {}

Dockerfile #db 

※オリジナルからの変更点1:vimインストールと日本語化を追記
※オリジナルからの変更点2:db_backup.shのコピーと権限付与

FROM mariadb
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y vim locales
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/
COPY *.sql  /opt/
RUN chmod +x /opt/db_backup.sh
RUN usermod -u 1000 www-data
RUN mkdir backup

Dockerfile #app

※オリジナルからの変更点:プラグインファイル(datainjection)のコピーを追記

FROM ubuntu:trusty
MAINTAINER cedric@zestprod.com
RUN apt-get update
RUN apt-get install -y apache2

RUN sudo apt-get install -y software-properties-common \
 && add-apt-repository ppa:ondrej/php \
 && apt-get update

RUN apt-get install -y --force-yes \
 wget \
 php5.6 \
 php5.6-mysql \
 php5.6-ldap \
 php5.6-xmlrpc \
 curl \
 php5.6-curl \
 php5.6-gd \
 php5.6-mbstring \
 php5.6-simplexml \
 php5.6-xml \
 php5.6-apcu \
 php5.6-imap

RUN a2enmod rewrite && service apache2 stop
WORKDIR /var/www/html
COPY start.sh /opt/
COPY glpi-datainjection-2.4.2.tar.gz /opt/
RUN chmod +x /opt/start.sh
RUN usermod -u 1000 www-data
CMD /opt/start.sh
EXPOSE 80

start.sh

※オリジナルからはバージョン部分だけ変更しています。
※一部抜粋

APACHE_DIR="/var/www/html"
GLPI_DIR="${APACHE_DIR}/glpi"
GLPI_SOURCE_URL=${GLPI_SOURCE_URL:-"https://forge.glpi-project.org/attachments/download/2093/glpi-0.85.5.tar.gz"}

glpi.env

※バージョン部分はstart.shに合わせました

MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=glpi
MYSQL_USER=glpi
MYSQL_PASSWORD=glpipassword
GLPI_SOURCE_URL=https://forge.glpi-project.org/attachments/download/2093/glpi-0.85.5.tar.gz

サービス起動

1.docker-compose.ymlのあるディレクトリに移動する。
2.コンテナのビルド

$ docker-compose build

3.コンテナ起動

$ docker-compose up -d

4.GLPIインストール
IPアドレス:8080へアクセス
GUIでDB作成まで完了させる。
DB名: mysql
ユーザー名: glpi
パスワード: glpi.envに記載

DBのリストア

予め準備しておいたバックアップファイルをリストアする。
execコマンドで外から実行を試みましたがうまくいきませんでした。

1.コンテナへアクセス

$ docker exec -it  [コンテナ名]  /bin/bash

2.リストア実行

$ mysql -u root -p glpi < /opt/yyyymmdd.sql   #バックアップファイルのパス

バックアップの設定 ※hostOSでの作業

ホスト側にてcrontabを設定
build時に格納した/opt/db_backup.shを定時で起動する。
バックアップもうまい方法が見つからず外からスクリプトを呼ぶことにしました。

$ crontab -e

※今回は[names]=glpi855_mysql_1

SHELL=/bin/bash
30 18 * * * docker exec [names] /opt/db_backup.sh 

db_backup.sh

#!/bin/sh
# バックアップの保存場所
dirpath='/backup/'

#作業用ファイル作成
tmpfile="`mktemp`"
errormessage="`mktemp`"

#ファイル名を記入
echo "[`date +%Y/%m/%d`" "`date +%H\:%M\:%S`]" >> ${tmpfile}

#バックアップファイル名
filename=`date +%Y%m%d%H%M`

#バックアップ実行
mysqldump -uglpi --opt --password=glpipaswd glpi> $dirpath/$filename.sql 2>${errormessage}

#一時ファイルとバックアップファイルの削除(30日間保存)
cleandir='tmp/'
find $cleandir -type f -name "*tmp.*" -mtime +30 | xargs rm -f
find $dirpath -type f -name "*.sql" -mtime +30 | xargs rm -f

プラグインの有効化

唯一使っているプラグインは[data injections]
このプラグインを有効化します。
アプリ関連ディレクトリの作成はGLPIインストール後となると思われます。
そのためDockerfileにはファイルを/optへコピーだけしています。
docker exec -it [コンテナ名] /bin/bash

# mv /opt/glpi-datainjection-2.4.2.tar.gz /var/www/html/glpi/plugins/
# tar zxvf /var/www/html/glpi/plugins/glpi-datainjection-2.4.2.tar.gz 

セットアップメニューのプラグインより有効化を行います。

課題

  1. 初期設定時にデータベースのバックアップを読み込む
    上記DBのリストア作業をなくしたいです。

  2. timezone
    GLPI上の履歴を確認すると7時間遅れのタイムスタンプとなっていました。
    原因はappコンテナのPHPのタイムゾーン設定でした。
    手動で対応したので、Dockerfileへ設定を書きたいです。

  3. バージョンアップ
    085.5を092系へバージョンアップしたいです。
    092系コンテナを準備して085系のDBをリストアするとエラーで前進できません。
    公式ドキュメント記載のツールもうまく起動しません。

  4. DBバックアップを内部でうまく行う
    外からバックアップを取る運用で逃げているので環境を移行した際にバックアップ部分を
    別途対応する必要があります。
    うまい方法を考えたいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away