DockerでPowerCMS Xが動作する環境を構築

公開

プロダクトを育てる役目を担う仕事をしていて、気軽にPowerCMS Xを操作できる環境が欲しい時があります。例えば画像の管理にデータベースのBLOBを使うのではなくファイル出力する設定のようなインパクトの大きい事を試したい時です。そこでDockerを利用してPowerCMS X環境を構築してみました。

構築と書きましたが実はLAMP環境は既にsprintcube/docker-compose-lampで「LAMP stack built with Docker Compose」が公開されており、ほんの少し手を加えるだけでPowerCMS Xを動作させる環境が用意できました。MySQLのデータ等はホストのdataディレクトリに、コンテンツはホストのwwwディレクトリに保存されるので、コンテナを停止してもデータは維持されますし、gitで環境を管理したり他のマシンにも簡単に移したりすることができます。社内でハンズオン形式の勉強会を開催する際も手軽に環境が用意できますね。

事前準備

ホストとコンテナのディレクトリ対応表

持田さん(@motchie)にアドバイスをいただき追記しました。sprintcube/docker-compose-lampのマッピング設定は以下のようになっています。(ホストの各ディレクトリはプロジェクトのディレクトリ内に存在します。)

ホスト コンテナ
www /var/www/html
logs/apache2 /var/log/apache2
config/php/php.ini /usr/local/etc/php/php.ini
data/mysql /var/lib/mysql
logs/mysql /var/log/mysql

アプリとコンテンツを別けるための設定

アプリ(PowerCMS X)を保存するディレクトリとコンテンツディレクトリ(ホストのwww)を分けたいので設定ファイルを編集しました。

bin/webserver/Dockerfile

末尾に以下を追記します。

# PowerCMS X
RUN mkdir /var/www/app

docker-compose.yml

volumes欄にPowerCMS Xのディレクトリを追記します。ホストのappディレクトリがコンテナの/var/www/appにマウントされるようになります。

services:
  webserver:
    build: 
      context: ./bin/webserver
    container_name: '7.2.x-webserver'
    restart: 'always'
    ports:
      - "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"
      - "${HOST_MACHINE_SECURE_HOST_PORT}:443"
    links: 
      - mysql
    volumes: 
      - ${DOCUMENT_ROOT-./www}:/var/www/html:delegated
      - ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
      - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
      - ${LOG_DIR-./logs/apache2}:/var/log/apache2:delegated
      - ${PCMSX_ROOT-./app}:/var/www/app:cached

.env

PowerCMS Xを設置するホストのディレクトリ名を指定します。app以外にしたい場合はここを変更します。

PCMSX_ROOT=./app

config/vhosts/default.conf

Aliasを用いて/appへアクセスがあった場合に参照すべきディレクトリを指定します。PowerCMS Xのディレクトリを/var/www/appにマウントするので下記のように記述します。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/html"
    ServerName localhost
    Alias /app /var/www/app
    <Directory "/var/www/html">
        AllowOverride all
    </Directory>
</VirtualHost>

app/db-config.phpの設定

PowerCMS Xのdb-config.phpにデータベースの設定を記述しますが、ホスト名はMySQLのコンテナ名を指定することにより、コンテナ間通信で上手く動作するようになります。

define( 'PADO_DB_HOST', 'mysql' );

コンテナの起動

コンテナの起動コマンドはdocker-compose up -dです。一度イメージがビルドされると次回からは数秒で起動するようになるのでとても快適です。