0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GLPI 0.85.5をDocker環境へ移行

Last updated at Posted at 2019-04-02

資産管理に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バックアップを内部でうまく行う
    外からバックアップを取る運用で逃げているので環境を移行した際にバックアップ部分を
    別途対応する必要があります。
    うまい方法を考えたいです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?