皆さんはドキュメント管理はどのようにされていますか?ソースコードは Git で管理しています。 Markdown で書いているドキュメントであれば Git で管理していることが多いと思います。 Word や Excel 、 PDF などはどうでしょうか? Git で管理することも当然できます。しかし、全文検索をしたいときなどにはとても不便です。
そこで利用したいのがドキュメント管理システムなのですが、 OSS でかつ日本語の全文検索ができるものという条件で見ると選択肢が少なくなります。私の場合は Alfresco を導入しました。 Alfresco は OSS のドキュメント管理システムです。とても高機能で無償で利用可能な Community 版の他に、エンタープライズ機能を追加したり、サポートサービスがある商用版もあります。
Alfrescoのソフトウェアとサービス| ECM | BPM
この記事では Alfresco の Community 版を Docker でデプロイする方法を解説します。公式サイトからダウンロード可能な Docker Compose テンプレートファイルではデータの永続化ができないので、永続化を行える Docker Compose テンプレートファイルを作成する方法を解説します。
動作環境
この記事では次のような環境に Alfresco をセットアップします。マシンは Hyper-V で構成した仮想マシンです。
- 2 CPU (Virtual Processor)
- 13GB RAM
- 128 GB Storage
- Ubuntu Linux LTS 20.04.1
Dockerのインストール
Alfresco を動かすのに Docker を使用するので、Docker をインストールします。
$ sudo apt update
$ sudo apt install docker.io docker-compose docker
Composeファイルの生成
Docker Compose で使用する Compose ファイルを生成します。 Alfresco 用の Compose ファイルは配布されていますが、配布されているものはデータの永続化ができないので、ここでは生成して、必要な部分を変更する手順で行います。
Compose ファイルの生成は、generator-alfresco-docker-installer を使用します。
generator-alfresco-docker-installer を使うためには以下の2つが必要です。
- Node.js
- Yeoman
generator をインストールする前にこの2つをインストールします。
Node.jsのインストール
次のようにして、Node.js と npm をインストールします。
$ sudo apt install nodejs npm
Yeomanのインストール
npm を使ってインストールします。
$ sudo npm install -g yo
generator-alfresco-docker-installerのインストール
generator をインストールする準備が整いました。次のようにしてインストールします。
$ sudo npm install --global generator-alfresco-docker-installer
Composeファイルを生成する
generator-alfresco-docker-installer を使って、 Compose ファイルを生成します。先に保存先のディレクトリを作り、中に移動します。
$ mkdir docker-compose
$ cd docker-compose
次に、generator-alfresco-docker-installer を実行します。
$ yo alfresco-docker-installer
オプションなどを聞かれるので、指示に従って入力します。私の場合は次のようにしました。
質問内容 | 設定値 |
---|---|
Which ACS version do you want to use? | 6.2 |
How may GB RAM are available for Alfresco (8 is minimum required)? | 8 |
Do you want to use HTTPs for Web Proxy? | No |
What is the name of your server? | doc.rkdev.corp |
What HTTP port do you want to use (all the services are using the same port)? | 80 |
Do you want to use FTP (port 2121)? | No |
Do you want to use MariaDB instead of PostgreSQL? | No |
Are you using different languages (this is the most common scenario)? | Yes |
Do you want to create an internal SMTP server? | Yes |
Do you want to create an internal LDAP server? | Yes |
Select the addons to be installed | 以下のものを有効化
|
Are you using a Windows host to run Docker? | No |
Do you want to use a start scripts? | No |
コンテナの作成
ここで一度実行します。 Linux で実行する場合はコンテナの外に保存される、PostgreSQL と Solr のデータ書き込み先ディレクトリの権限設定が必要になります。
次のようにして、コンテナを作成して実行します。
$ sudo docker-compose up -d
しばらく時間がかかります。コンテナの作成が完了すると次のように出力されます。
Creating openldap ... done
Creating docker-compose_share_1 ... done
Creating docker-compose_smtp_1 ... done
Creating docker-compose_alfresco-pdf-renderer_1 ... done
Creating docker-compose_activemq_1 ... done
Creating docker-compose_tika_1 ... done
Creating docker-compose_solr6_1 ... done
Creating docker-compose_libreoffice_1 ... done
Creating docker-compose_transform-misc_1 ... done
Creating docker-compose_postgres_1 ... done
Creating docker-compose_imagemagick_1 ... done
Creating docker-compose_alfresco_1 ... done
Creating phpldapadmin ... done
Creating docker-compose_content-app_1 ... done
Creating docker-compose_proxy_1 ... done
ブラウザからアクセスしてみましょう。ここではホスト名を「doc.rkdev.corp
」にしたので「http://doc.rkdev.corp/
」にアクセスします。
フォルダのパーミッション設定
フォルダのマッピングを解除
PostgreSQL と Solr のデータ保存先ディレクトリのパーミッションを設定します。まず、コンテナを停止します。
$ sudo docker-compose down
生成した docker-compose.yml
を編集し、次のように postgres
の volumes
と solr6
の volumes
をコメントアウトします。
services:
postgres:
# volumes:
# - ./data/postgres-data:/var/lib/postgresql/data
# - ./logs/postgres:/var/log/postgresql
solr6:
# volumes:
# - ./data/solr-data:/opt/alfresco-search-services/data
この状態でコンテナの再ビルドと実行を行います。コメントアウトしたフォルダは docker-compose/data
以下にありますが、 volumes
の設定をコメントアウトしたので、マッピングされずにコンテナ内のフォルダが使われます。
$ sudo docker-compose up --build --force-recreate -d
コンテナ名の確認
コンテナ名を調べます。次のように入力します。
$ sudo docker ps
PostgreSQL と Solr のコンテナ名を確認します。私のマシンでは出力結果から次のようになっていました。
IMAGE | NAMES |
---|---|
postgres:11.4 | docker-compose_postgres_1 |
docker-compose_solr6 |
docker-compose_solr6_1 |
PostgreSQL のデータ保存先ディレクトリの UID の取得
PostgreSQL のコンテナに入って、データ保存先ディレクトリの UID を取得します。まずはコンテナに入ります。引数に指定するコンテナ名は直前の項目で調べた名前です。
$ sudo docker exec -it docker-compose_postgres_1 sh
data
ディレクトリがある /var/lib/postgresql
ディレクトリのリストを表示して、 data
ディレクトリのユーザーを取得します。パスは docker-compose.yml
ファイルでコメントアウトした行に書かれています。
$ ls -la /var/lib/postgresql
次のように出力され、ユーザー名が postgres
であることが分かります。
total 12
drwxr-xr-x 1 postgres postgres 4096 Jul 17 2019 .
drwxr-xr-x 1 root root 4096 Jul 17 2019 ..
drwx------ 19 postgres postgres 4096 Nov 22 08:21 data
次に postgres
の UID
を調べます。
$ id -u postgres
次のように出力され、 UID
が 999
であることが分かります。
999
次のように入力してコンテナを抜けて、コンテナも終了させます。
$ exit
$ sudo docker-compose down
ディレクトリの UID を変更する
マッピング先のディレクトリの UID
を調べた値に変更します。
$ sudo chown -R 999 ./data/postgres-data
$ sudo chown -R 999 ./logs/postgres
docker-compose.yml
ファイルの PostgresSQL の設定を元に戻します。次の行のコメントアウトを解除します。
postgres:
volumes:
- ./data/postgres-data:/var/lib/postgresql/data
- ./logs/postgres:/var/log/postgresql
一旦ここでコンテナを再作成して動かします。そうしないと Solr が動き出さないので Solr のディレクトリがコンテナ内に作成されません。
$ sudo docker-compose up --build --force-recreate -d
起動するまで待ちます。先ほどと同じようにブラウザで開きます。今度は認証画面になるはずです。 Basic 認証が表示された場合はキャンセルしてください。念のため、 share の方も表示してください。 URL は設定したホスト名+ /share です。例えば私の場合は「http://doc.rkdev.corp/share/
」となります。こちらもログイン画面が表示されれば OK です。
Solr のデータ保存先ディレクトリの UID の取得
Solr のコンテナに入って、データ保存先ディレクトリの UID
を取得します。まずはコンテナに入ります。引数に指定するコンテナ名は先ほど調べた名前です。
$ sudo docker exec -it docker-compose_solr6_1 sh
data
ディレクトリがある /opt/alfresco-search-services
ディレクトリのリストを表示して、 data
ディレクトリのユーザーを取得します。パスは docker-compose.yml
ファイルでコメントアウトした行に書かれています。また、先に PostgreSQL が動く状態にしておかないと Solr が動かず、中身が作られていないことがあるので、順番に注意してください。
$ ls -la /opt/alfresco-search-services
次のように出力され、ユーザー名が solr
であることが分かります。
total 56
drwxr-xr-x 1 solr solr 4096 Nov 22 11:44 .
drwxr-xr-x 1 root root 4096 Aug 21 10:24 ..
drwxr-xr-x 5 solr solr 4096 Nov 22 08:22 data
drwxr-xr-x 2 root root 4096 Aug 21 10:25 keystores
drwxrwxr-x 1 solr solr 4096 Nov 22 11:44 logs
-rw-rw-r-- 1 solr solr 1328 Aug 21 10:11 README.MD
drwxr-xr-x 1 solr solr 4096 Aug 21 10:11 solr
drwxrwxr-x 6 solr solr 4096 Nov 22 08:22 solrhome
-rw-rw-r-- 1 solr solr 6764 Aug 21 10:11 solr.in.cmd
-rw-rw-r-- 1 solr solr 7366 Nov 22 11:44 solr.in.sh
次に solr
の UID
を調べます。
$ id -u solr
次のように出力され、 UID
が 33007
であることが分かります。
33007
次のように入力してコンテナを抜けて、コンテナも終了させます。
$ exit
$ sudo docker-compose down
ディレクトリの UID を変更する
マッピング先のディレクトリの UID
を調べた値に変更します。
$ sudo chown -R 33007 ./data/solr-data
docker-compose.yml ファイルの Solr6 の設定を元に戻します。次の行をコメントアウトを解除します。
solr6:
volumes:
- ./data/solr-data:/opt/alfresco-search-services/data
コンテナを再作成して動かします。
$ sudo docker-compose up --build --force-recreate -d
起動するまで待ちます。しばらく待って、share がブラウザで開ける状態になったら、次のように入力して、マッピング先のフォルダに Solr のデータが作られているかを確認します。
$ ls -la data/solr-data
例えば、私のマシンでは次のように出力されます。
total 20
drwxr-xr-x 5 33007 root 4096 Nov 22 12:06 .
drwxr-xr-x 7 root root 4096 Nov 22 07:59 ..
drwxr-xr-x 5 33007 33007 4096 Nov 22 12:06 alfresco
drwxr-xr-x 2 33007 33007 4096 Nov 22 12:07 alfrescoModels
drwxr-xr-x 5 33007 33007 4096 Nov 22 12:06 archive
Office ファイルの日本語対応
Alfresco には Word や Excel などの Office のファイルをプレビューする機能がありますが、そのままでは日本語のフォントが入っていないためにプレビューが文字化けします。これに対応するには、次の2つの作業を行います。
- LibreOffice のフォントフォルダを永続化して内容が消えないようにする。
- LibreOffice のコンテナに日本語フォントをインストールする。
やり方は次のページを参考にしました。
Alfrescoのファイルプレビュー機能で日本語が文字化けする問題の対処法 – Qiita
ほとんど上記のページに書かれている手順でできたのですが、少し追加手順が必要でした。
コンテナ名を調べる
LibreOffice が動いているコンテナのコンテナ名を調べます。 PostgreSQL や Solrのコンテナを調べたのと同様に以下を実行します。
$ sudo docker ps
私のマシンでは以下の様になっていました。
IMAGE | NAMES |
---|---|
alfresco/alfresco-libreoffice:2.1.0 | docker-compose_libreoffice_1 |
フォントフォルダのパスを調べる
フォントフォルダのパスを調べるため、コンテナに入ります。
$ sudo docker exec -it docker-compose_libreoffice_1 /bin/bash
/opt
ディレクトリをリスト表示して、libreoffice
のフォルダを探します。
$ ls -la /opt
私のマシンでは次のように出力されました。
total 12
drwxr-xr-x 1 root root 4096 Oct 28 2019 .
drwxr-xr-x 1 root root 4096 Nov 22 12:24 ..
drwxr-xr-x 7 root root 4096 May 3 2019 libreoffice6.1
libreoffice6.1 であることが分かったので、その下に潜っていて、フォントフォルダを確認します。通常は /opt/libreoffice6.1/share/fonts/truetype/
なので、そこにフォントがいることを確認して、コンテナを抜けます。
$ ls -la /opt/libreoffice6.1/share/fonts/truetype
$ exit
フォントフォルダの永続化
まずはコンテナを終了します。
$ sudo docker-compose down
docker-compose.yml
を編集し、以下の2点を設定します。
- libreoffice のコンテナに libreoffice-fonts-data というボリュームを追加する
- libreoffice-fonts-data ボリュームを永続化させる
次のように「追記開始」と「追記終了」で囲まれた部分を追加します。
libreoffice:
image: alfresco/alfresco-libreoffice:${TRANSFORM_ENGINE_TAG}
mem_limit: 512m
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8092:8090
# 追記開始
volumes:
- libreoffice-fonts-data:/opt/libreoffice6.1/share/fonts/truetype/
# 追記終了
# 省略
# 追記開始
volumes:
libreoffice-fonts-data:
external: true
# 追記終了
ボリュームを作成する
次のようにして永続化するボリュームを作成します。
$ sudo docker volume create --name=libreoffice-fonts-data
コンテナの再作成と開始
コンテナを再作成して開始します。
$ sudo docker-compose up --build --force-recreate -d
フォントのインストール
コンテナが起動したら、コンテナに root
で入ってフォントをインストールします。
$ sudo docker exec -it --user root docker-compose_libreoffice_1 /bin/bash
フォントをインストールします。
$ yum install -y ipa-gothic-fonts ipa-pgothic-fonts
インストールされたフォントを Libreoffice
のフォントフォルダにコピーします。
$ cp /usr/share/fonts/ipa-gothic/ipag.ttf /opt/libreoffice6.1/share/fonts/truetype/
$ cp /usr/share/fonts/ipa-pgothic/ipagp.ttf /opt/libreoffice6.1/share/fonts/truetype/
コンテナを再起動する
コンテナを再起動して完了です。
$ exit
$ sudo docker-compose down
$ sudo docker-compose up -d
接続する
これで完成しました。デフォルトで設定されている admin
でログインしましょう。パスワードも admin
です。
最初に admin
のパスワードを変更し、通常使用するユーザーを作る事をお勧めします。