皆さんはドキュメント管理はどのようにされていますか?ソースコードは 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 dockerComposeファイルの生成
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 npmYeomanのインストール
npm を使ってインストールします。
$ sudo npm install -g yogenerator-alfresco-docker-installerのインストール
generator をインストールする準備が整いました。次のようにしてインストールします。
$ sudo npm install --global generator-alfresco-docker-installerComposeファイルを生成する
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 psPostgreSQL と 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 shdata ディレクトリがある /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/postgresdocker-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 shdata ディレクトリがある /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-datadocker-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 archiveOffice ファイルの日本語対応
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.1libreoffice6.1 であることが分かったので、その下に潜っていて、フォントフォルダを確認します。通常は /opt/libreoffice6.1/share/fonts/truetype/ なので、そこにフォントがいることを確認して、コンテナを抜けます。
$ ls -la /opt/libreoffice6.1/share/fonts/truetype
$ exitフォントフォルダの永続化
まずはコンテナを終了します。
$ sudo docker-compose downdocker-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 のパスワードを変更し、通常使用するユーザーを作る事をお勧めします。












