この記事の概要
doker-compose で Exment をインストールします。docker の環境があらかじめ用意されていれば10分もかからずに Exment を使い始めることができます。
Exment について
Exment は Webデータベース と呼ばれるカテゴリーのソフトウェアです。Webデータベースは管理する項目や入力内容等をいろいろカスタマイズできるので経理や勤怠管理、顧客管理などの専用システムがカバーしていない隙間として残ってしまっている業務をどうにかこうにかシステム化したいときにとても便利です。
方向性やできることは多少違うのですが、大きなくくりでは kintone と同じようなものと理解してもらえれば良いのではないかと思います。kintone は今まで世間にあまり知られていなかったこのカテゴリーを確立し、世間に広めたということで評価されるべきだし、良いサービスだとは思いますが、kintone を適用させたい用途と一人あたりの月額利用料がなかなかバランスが取れなくて採用に二の足を踏んでしまいます。kintone に顧客管理などの主要業務をやらせるのであれば月額利用料の価値はあるような気がするのですが、隙間の業務だけやらせるにはちょっともったいないような気がしています。
そこで無料で使える OSS を探すのですが、なぜかこのカテゴリーには世界的なデファクトスタンダードとなっているようなものがなかなかなくて、選択肢はこの Exment か Pleasanter (どちらも日本製)くらいになってしまいます。どちらを選ぶかは好みの問題ですが、私は Exment が気に入っています。
Exment も Pleasanter も有料のサービスが提供されているので、最初は自分でサーバーを立てて無料で使ってみて、適用範囲や利用者が増えてきたら有料サービスに移行するということでも良いのではないかと思います。有料サービスは Exment は kintone のざっくり半額程度になるのではないかと思います。
docker版の Exment について
Exment を Docker で動作させる環境を最初に作成して公開したのは Qiita にも記事を書かれている @yamada28go さんのようです。
その後、@yamada28go さんのものをベースにして Exment公式から dockerイメージが提供されているのでそれをインストールすれば良いということになります。
ただし、Exment公式は dockerイメージの提供にはあまり熱心ではないのか、現在提供されているものはそのままではインストール中にエラーになってしまい、簡単にはインストールできません。
この記事はそのエラーを解消してインストールする方法について記載しています。
インストール
docker の環境の構築についてはそこら中に記事が転がっているのでそちらを参照していただくとして、ここでは詳細は記載しません。あらかじめ docker の環境が用意されていることを前提として Exment のインストールについてだけ記載していきます。
インストールした環境
OS や docker のバージョン等に制限はなのではないかと思いますが、参考に今回インストールした環境の情報を記載します。
- サーバー ESXi 上の VM にインストールします
ESXi バージョン: 7.0.0
ESXi ビルド番号: 16324942
- OS
# cat /etc/redhat-release
AlmaLinux release 8.5 (Arctic Sphynx)
- docker
# docker -v
Docker version 20.10.14, build a224086
- docker-compose
# docker-compose -v
docker-compose version 1.29.2, build 5becea4c
ダウンロード
- Exment公式から dockerイメージをダウンロードします
# curl -OL https://github.com/exment-git/docker-exment/archive
/refs/heads/master.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 140 100 140 0 0 411 0 --:--:-- --:--:-- --:--:-- 412
100 113k 0 113k 0 0 150k 0 --:--:-- --:--:-- --:--:-- 295k
# ll
-rw-r--r--. 1 root root 116135 4月 30 00:02 master.zip
- zip を解凍します
# unzip master.zip
-bash: unzip: コマンドが見つかりません
- AlmaLinux を最小限でインストールすると unzip 入ってませんでした。やり直します。
# dnf install -y unzip
・
・
インストール済み:
unzip-6.0-45.el8_4.x86_64
完了しました!
# unzip master.zip
Archive: master.zip
941b725966e3ffa775bfaba264966b99e7c41e93
creating: docker-exment-master/
extracting: docker-exment-master/.gitignore
・
・
# ll
drwxr-xr-x. 5 root root 239 4月 13 2021 docker-exment-master
-rw-r--r--. 1 root root 116135 4月 30 00:02 master.zip
docker-compose で起動
- 構築したい環境によってフォルダが分かれていますが、今回は PHP7.4 で データベースは mariadb を使用します
- 対象のフォルダに移動します
# cd docker-exment-master/build/php74_mariadb
- フォルダ内には複数の ymlファイルがあって、それを組みあわせることで様々なパターンの環境を構築できます
- 今回は mariadb もdocker で起動し、それを Exment から使用します
# docker-compose -f docker-compose.mariadb.yml -f docker-compose.yml up -d
・
・
Problem 1
- Root composer.json requires exceedone/exment ^4.4 -> satisfiable by exceed
one/exment[v4.4.0].
- exceedone/exment v4.4.0 requires laravel/framework ^8.0 -> found laravel/f
ramework[v8.0.0, ..., 8.x-dev] but it conflicts with your root composer.json req
uire (^6.20.26).
- なんかエラーになりました
- エラーメッセージによると laravel のバージョンが合っていないようです
- 設定ファイルで laravel の記述を探してみると Dockerfile にそれらしい記述があるので修正してみます
# vi php/Dockerfile
FROM php:7.4-fpm
ARG LARAVEL_VERSION="6.*" ← 6.* を 8.* に修正する
ARG EXMENT_VERSION="~4.0"
- Dockerfile を修正したら再実行
# docker-compose -f docker-compose.mariadb.yml -f docker-compose.yml up -d
・
・
Problem 1
- Root composer.json requires exceedone/exment ^4.4 -> satisfiable by exceed
one/exment[v4.4.0].
- exceedone/exment v4.4.0 requires laravel/framework ^8.0 -> found laravel/f
ramework[v8.0.0, ..., 8.x-dev] but it conflicts with your root composer.json req
uire (^6.20.26).
- エラー直りませんでした
- もう一度設定ファイルに laravel の記述がないか探してみると .env というファイルに記述が見つかりました
# vi .env
#### WebServer
EXMENT_DOCKER_FRONT_DOMAIN=localhost
EXMENT_DOCKER_HTTP_PORTS=80
EXMENT_DOCKER_LARAVEL_VERSION=6.* ← 6.* を 8.* に修正する
EXMENT_DOCKER_EXMENT_VERSION=~4.0
- .env を修正したら再実行
# docker-compose -f docker-compose.mariadb.yml -f docker-compose.yml up -d
Creating php74_mariadb_mariadb_1 ... done
Creating php74_mariadb_php_1 ... done
Creating php74_mariadb_web_1 ... done
- うまくいったらしい
Exment 初期設定
- ブラウザでアクセスします
- 「Next」をクリックして次に進みます
- データベースの設定をして次に進みます
項目 | 設定値 |
---|---|
データベース種類 | MariaDB |
ホスト名 | mariadb |
ポート | 3306 |
データベース | exment_database |
ユーザー名 | exment_user |
パスワード | secret |
- 「.env」 というファイルが書き込み禁止らしい
- 先ほど laravel の設定を変更したファイルか?
# ll -a
・
-rw-r--r--. 1 root root 920 4月 30 00:43 .env
・
- 書込禁止になっているので変更します
# chmod 666 .env
# ll -a
合計 28
・
-rw-rw-rw-. 1 root root 920 4月 30 00:43 .env
・
- もう一度実行してみたけど変わりませんでした
- よくよく考えてみると、VM側から見て書き込み権限が不足しているのを修正しないとダメなのかもしれません
- docker の VM に入ってみることにします
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
490459ce6a57 nginx:latest "/docker-entrypoint.…" 32 minutes ago Up 32 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp php74_mariadb_web_1
dd3d70cf7b31 mariadb:10.4 "docker-entrypoint.s…" 32 minutes ago Up 32 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp php74_mariadb_mariadb_1
a29c04dabda3 php74_mariadb_php "docker-php-entrypoi…" 32 minutes ago Up 32 minutes 9000/tcp php74_mariadb_php_1
975b4bcf5422 3035d5c4af2f "/bin/sh -c 'COMPOSE…" 40 minutes ago Exited (2) 40 minutes ago cool_zhukovsky
e7d2fe82a887 9fad9711e200 "/bin/sh -c 'COMPOSE…" 55 minutes ago Exited (2) 55 minutes ago nostalgic_panini
- ゴミみたいなのが残っているのは後で消すとして、php74_mariadb_php_1 に入ってみます
# docker exec -it php74_mariadb_php_1 bash
root@a29c04dabda3:/var/www/exment# ls -al
・
-rw-r--r--. 1 root root 703 Apr 13 2021 .env
・
- .env がありました。これを書き込みできるようにします
root@a29c04dabda3:/var/www/exment# chmod 666 .env
root@a29c04dabda3:/var/www/exment# ls -al
・
-rw-rw-rw-. 1 root root 703 Apr 13 2021 .env
・
- 権限変更できたら再実行します
- うまくいったようなので、「次へ」 をクリックして進みます
- 「インストール実行」をクリックして進みます
- サイト名、管理アカウント名等を入力して進みます
- Exment が起動したので完了です
結論
- Exment公式からダウンロードするだけで簡単にインストールできるとまではいきませんが、修正は下記の3点だけなのでそれほどの手間でもありません
ファイル | 変更内容 |
---|---|
php/Dockerfile | ARG LARAVEL_VERSION="6." → 8. |
.env | EXMENT_DOCKER_LARAVEL_VERSION=6.* → 8.* |
VM内の.env | chmod 666 .env |
課題
- ユーザー管理のために LDAP と連携させたいのですが、そのためには php-ldap を入れなければならないようで、この docker の環境に php-ldap を入れる方法がよくわかりません。(LDAPサーバーは外部に構築予定なので必要なのは laravel から LDAPサーバーにアクセスする設定)LDAP の導入に成功された方がおられましたら是非情報を公開していただけたらと思います。