null Dockerを使用したLiferay環境の構築について

今回はDockerを使用してLiferayの環境を構築する方法を紹介します。 Dockerをお持ちでない方は公式サイトからダウンロード、インストールしてください。

基本的な方法(カスタマイズなし)

環境構築と初回起動

  1. Docker Hubから使用したいバージョンのDockerイメージを取得します。Liferay Portal (CE)のDockerイメージはこちら、Liferay DXPのDockerイメージはこちらのLiferay Docker Hubページをご参照ください
    docker pull liferay/dxp:7.4.13-u44
  2. 取得したイメージを用いてコンテナを作成し、起動します。
    docker run -d -p 8080:8080 liferay/dxp:7.4.13-u44
    必要に応じ、--name [名前]オプションによりコンテナ名を指定してください(未指定の場合、ランダムな文字列となります)
  3. 起動後、docker logs -f [コンテナ名]を実行しコンテナログを監視します
  4. Liferayの起動完了を示すログ(org.apache.catalina.startup.Catalina.start Server startup in [x] milliseconds)が表示された後、ブラウザでhttp://localhost:8080を開きアクセスできることを確認します
    • Dockerイメージで環境構築を行なった場合、デフォルトの管理者情報はメールアドレス: test@liferay.com、パスワード: testとなっています。
    • Liferay DXPのDockerイメージにより環境を構築した場合、トライアルライセンスが適用されています。このライセンスはDockerイメージをLiferay社が作成した日時から30日間有効です。

コンテナの停止

  • 通常は以下のコマンドを実行することで停止します。
    docker exec [コンテナ名] /opt/liferay/tomcat/bin/shutdown.sh
  • 異常時など上記のコマンドが使用できない場合は、以下のコマンドで強制停止できます。
    docker stop [コンテナ名]
    または
    docker kill [コンテナ名]

カスタマイズ方法

コンテナのメモリサイズを設定する

コンテナ作成時のコマンドに-m 8gのように-mオプションを使用することでメモリサイズを指定することができます(単位はb,k,m,gのいずれか)

コンテナにファイルを提供する

フォルダのバインドマウント

Liferayコンテナではカスタマイズをスムーズに行うため、/mnt/liferay/以下と/usr/local/liferay/scripts/以下をスキャンして特定の操作を行う仕様となっています。 そのため、以下の手順によりこれらのフォルダをバインドマウントしておくことで容易にカスタマイズを行うことができます。

  1. ホスト側のフォルダ([host-path])以下に、以下の構成でフォルダを作成します
    [host-path]
        ├───liferay
        │       ├───deploy
        │       ├───files
        │       ├───patching
        │       └───scripts
        └───scripts
                ├───pre-startup
                ├───pre-configure
                └───post-shutdown
    
  2. [host-path]/liferay/mnt/liferayに、[host-path]/scriptsフォルダを/usr/local/liferay/scriptsに、それぞれバインドマウントします。[host-path]は絶対パスで入力する必要があるのでご注意ください。
    docker run -d -p 8080:8080 \
        --mount type=bind,source=[host-path]/liferay,target=/mnt/liferay \
        --mount type=bind,source=[host-path]/scripts,target=/usr/local/liferay/scripts \
        liferay/dxp:7.4.13-u44
    

ライフサイクルフェーズごとの処理内容

Liferayコンテナには以下のライフサイクルフェーズがあり、各フェーズに応じたカスタマイズ用処理が実行されます。

  1. 事前設定
    • /usr/local/liferay/scripts/pre-configure内のスクリプトをアルファベット順に実行します
  2. 設定
    • Liferay Home(/opt/liferay)以下のフォルダに、/mnt/liferay/files以下のファイルをコピーします。
    • Liferay Home(/opt/liferay)に、/mnt/liferay/scriptsのファイルをコピーし、各スクリプトをアルファベット順に実行します
    • /mnt/liferay/deploy/opt/liferay/deployにシンボリックリンクし、同時にこれらのフォルダにコピーされたファイルを自動デプロイするよう設定します。自動デプロイされたファイルは/opt/liferay/osgi以下の適切なフォルダに移動されます。
    • /mnt/liferay/patchingにパッチツールファイルやパッチファイルが入っている場合、それらをインストールします
  3. 起動前
    • /usr/local/liferay/scripts/pre-startup内のスクリプトをアルファベット順に実行します
  4. Tomcat起動
    • Catalinaスクリプトを使用し、Tomcatを起動します
  5. シャットダウン後(/opt/liferay/tomcat/bin/shutdown.shを実行し、Tomcatが停止した後)
    • /usr/local/liferay/scripts/post-shutdown内のスクリプトをアルファベット順に実行します

TomcatのJVMオプションをカスタマイズする

Tomcatのsetenv.shを上書きすることでJVMオプションを追加/更新できます。 デフォルトの設定を削除しないようにするため、以下のような手順でLiferayコンテナからsetenv.shファイルをコピーし、それを修正するようにしてください(上述のバインドマウントの設定がされている前提です)

  1. ホストフォルダに以下のサブフォルダを作成します
    mkdir -p [host-path]/liferay/files/tomcat/bin
  2. setenv.shファイルをコンテナからコピーします
    docker cp [コンテナ名]:/opt/liferay/tomcat/bin/setenv.sh [host-path]/liferay/files/tomcat/bin/
  3. [host-path]/liferay/files/tomcat/bin/setenv.shを開き、JVMオプションを修正します
  4. コンテナを停止します
    docker exec [コンテナ名] /opt/liferay/tomcat/bin/shutdown.sh
  5. コンテを再開します(docker psなどで前手順の操作によりコンテナが停止していることを確認してから実行してください)
    docker start [コンテナ名]

また、コンテナ作成時にLIFERAY_JVM_OPTS環境変数を指定することで、その内容をTomcatのCATALINA_OPTS変数に追加するという方法もあります。 この環境変数ではスペース文字はバックスラッシュによりエスケープし、引用符は使用できません。例えば最小ヒープサイズ(-Xms)と最大ヒープサイズ(-Xmx)を共に2048MBにする場合は、下記のようになります。

docker run -d -p 8080:8080 -e LIFERAY_JVM_OPTS=-Xmx2048m\ -Xms2048m liferay/dxp:7.4.13-u44

なお、setenv.shLIFERAY_JVM_OPTS環境変数の両方で同じオプションを指定した場合、環境変数で設定した内容が優先されます。

ポータルプロパティをカスタマイズする

通常のプロパティについて

コンテナのポータルプロパティは、portal-ext.propertiesファイルを/opt/liferayに配置することで上書きすることができます。 バインドマウントを利用した手順は以下の通りです。

  1. [host-path]/liferay/filesに、portal-ext.propertiesファイルを作成します。ファイルには上書きしたいプロパティを以下の例のように記載します
    jdbc.default.jndi.name=jdbc/MyPool
  2. コンテナを停止します
    docker exec [コンテナ名] /opt/liferay/tomcat/bin/shutdown.sh
  3. コンテナを再開します(docker psなどで前手順の操作によりコンテナが停止していることを確認してから実行してください)
    docker start [コンテナ名]

特別なプロパティについて

以下のプロパティはLiferayイメージにて環境変数としてデフォルト値が定義されています。

LIFERAY_MODULE_PERIOD_FRAMEWORK_PERIOD_PROPERTIES_PERIOD_OSGI_PERIOD_CONSOLE=0.0.0.0:11311  #module.framework.properties.osgi.console
LIFERAY_SETUP_PERIOD_WIZARD_PERIOD_ADD_PERIOD_SAMPLE_PERIOD_DATA=false  #setup.wizard.add.sample.data
LIFERAY_SETUP_PERIOD_WIZARD_PERIOD_ENABLED=false  #setup.wizard.enabled
LIFERAY_TERMS_PERIOD_OF_PERIOD_USE_PERIOD_REQUIRED=false  #terms.of.use.required
LIFERAY_USERS_PERIOD_REMINDER_PERIOD_QUERIES_PERIOD_ENABLED=false  #users.reminder.queries.enabled

環境変数での定義はportal-ext.propertiesの設定よりも優先されるため、これらのプロパティを変更したい場合は以下のいずれかの方法を行う必要があります。

  • 以下のようにコンテナ実行時に環境変数を指定し、デフォルト値を上書きします(Liferayイメージで定義されていないプロパティについても、本手順を行うことでportal-ext-propertiesを用いずに設定することが可能です。各プロパティに対応する環境変数はPortal Propertiesをご参照ください)
    docker run -d -e LIFERAY_TERMS_PERIOED_OF_PERIOD_USE_PERIOD_REQUIRED=true \
            -p 8080:8080 liferay/dxp:7.4.13-u44
  • 以下のようにコンテナ実行時に環境変数を割り当てなしで宣言することで環境変数を無効化できます。これにより他のプロパティと同様にportal-ext.propertiesの設定が有効となります
    docker run -d -e LIFERAY_TERMS_PERIOED_OF_PERIOD_USE_PERIOD_REQUIRED \
            -p 8080:8080 liferay/dxp:7.4.13-u44

システムプロパティをカスタマイズする

コンテナのシステムプロパティは、system-ext.propertiesファイルを/opt/liferay/tomcat/webapps/ROOT/WEB-INF/classes/に配置することで上書きすることができます。 バインドマウントを利用した手順は以下の通りです。

  1. [host-path]/liferay/files/tomcat/webapps/ROOT/WEB-INF/classesに、system-ext.propertiesファイルを追加します。ファイルには上書きしたいプロパティを以下の例のように記載します
    net.sf.ehcache.skipUpdateCheck=false
  2. コンテナを停止します
    docker exec [コンテナ名] /opt/liferay/tomcat/bin/shutdown.sh
  3. コンテナを再開します(docker psなどで前手順の操作によりコンテナが停止していることを確認してから実行してください)
    docker start [コンテナ名]

システム設定をカスタマイズする

システム設定は管理者権限を持つユーザでログインし、コントロールパネルから設定することもできますが、ここでは構成ファイル(.configファイル)を使用したカスタマイズ方法について解説します。 現在の設定の.configファイルは、コントロールパネル→システム設定の右上メニューから全設定をエクスポートを実行するか、個別の設定画面の右上メニューからエクスポートを実行することで取得できます(個別の設定画面からのエクスポートの場合、その設定が保存されている必要があります)。

バインドマウントを使用する方法

.configファイルを、[host-path]/liferay/files/osgi/configsにコピーし、コンテナを起動することで構成ファイルを適用できます。フォルダにファイルを置くだけのため簡便に実行できますが、コンテナが既に起動している場合再起動が必要となります。

直接コピーする方法

以下のようにdocker cpコマンドを使用し、直接/opt/liferay/osgi/configsにコピーすることもできます。この方法ではコンテナの再起動が不要なため、実行中のコンテナの設定を置き換えたい際に便利です。

docker cp [.configファイル] [コンテナ名]:/opt/liferay/osgi/configs

モジュールやテーマをデプロイする

対象のjarまたはwarファイルを、[host-path]/liferay/deployにコピーすることでデプロイされます。 デプロイの内容によっては有効にするためにコンテナの再起動が必要です(サービスモジュールのメソッドシグネチャを修正した場合など)

DXPのライセンスを更新する

DXPのDockerイメージには作成から30日間有効なトライアルライセンスが入っていますが、新しいライセンス(アクティベーションキー)を持っている場合は以下の手順により置き換えることができます。

  1. コンテナでBashシェルを開きます
    docker exec -it [コンテナ名] bash
  2. 既存のライセンスファイルを削除します
    rm /opt/liferay/data/license/*
  3. OSGiモジュールフォルダから、全てのトライアルライセンスとアクティベーションキーファイルを削除します
    rm /opt/liferay/osgi/modules/*license*.xml /opt/liferay/osgi/modules/*activation*.xml
  4. Bashシェルを終了します
    exit
  5. 新しいライセンス(アクティベーションキー)を[host-path]/liferay/deployにコピーします

今回の内容は以上となります。Dockerを使用することで簡単に環境構築を行えますので、ぜひお試しください。

関連記事
customize

RANKING
2021.1.08
2020.12.28
2020.12.01
2020.10.30
2020.12.18