Dockerを使ったAlfrescoのセットアップ方法

皆さんはドキュメント管理はどのようにされていますか?ソースコードは 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 を使用します。

Alfresco/alfresco-docker-installer: Generator to build Docker Compose templates to deploy Alfresco Community

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以下のものを有効化
  • JavaScript Console 0.6
  • Order of the Bee Support Tools 1.0.0.0
  • Share Site Creators 0.0.7
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 を編集し、次のように postgresvolumessolr6volumes をコメントアウトします。


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 のコンテナ名を確認します。私のマシンでは出力結果から次のようになっていました。

IMAGENAMES
postgres:11.4docker-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

次に postgresUID を調べます。

$ id -u postgres

次のように出力され、 UID999 であることが分かります。

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

次に solrUID を調べます。

$ id -u solr

次のように出力され、 UID33007 であることが分かります。

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

私のマシンでは以下の様になっていました。

IMAGENAMES
alfresco/alfresco-libreoffice:2.1.0docker-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 のパスワードを変更し、通常使用するユーザーを作る事をお勧めします。

著書紹介

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashi (林 晃)のアバター Akira Hayashi (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次