Node.js x WordPress用Docker環境構築セット

https://github.com/kaperrine-dog/node-wp.docker-env

指定のディレクトリにプロジェクトをgit cloneしてdocker-compose up -d で環境が立ち上がるDocker開発環境のセットです。

スマートフォン画面キャプチャ
node-wordpress.docker-env

概要

Dockerコンテナのオーケストレーションツール Docker compose を利用した環境構築のDockerファイル郡です。

自作ツールとしてGitHubにソースを公開しています

https://github.com/kaperrine-dog/node-wp.docker-env

目的

PHPのサイト構築を行う際にローカル環境構築の手間を省くことが目的で1年程度前に作成したものを WordPressにも対応できるように手を加えたものです。

さらに、このツールではWordPressHeadless CMSとして利用し、フロントエンドをNode.js環境で構築するような構成にも対応できるように手を加えています。

また、Dockerを使用しているので、ローカル環境に影響を与えないこともメリットです。

構成

ディレクトリ構成は以下の通り

.
├── docker-compose.yml
├── mysql
│   ├── Dockerfile
│   ├── db_data
│   └── mysqld_charset.cnf
├── node
│   ├── Dockerfile
│   └── app
│       ├── LICENSE
│       ├── README.md
│       ├── ...node_projects
├── php
│   ├── Dockerfile
│   ├── config
│   │   └── php.ini
│   ├── src
│   │   ├── gulpfile.babel.js
│   │   ├── package-lock.json
│   │   ├── package.json
│   │   └── webpack.config.js
│   └── wp-setup.sh
├── phpmyadmin
│   └── phpmyadmin-misc.ini
├── readme.md
└── wp
    ├── Dockerfile
    ├── config
    │   └── php.ini
    ├── docker-entrypoint.sh
    ├── gulpfile.babel.js
    ├── package.json
    ├── webpack.config.js
    ├── wp-content
    │   ├── themes
    │   └── uploads
    └── wp-setup.sh
  • php/ : WordPressPHPのみで動く環境の場合に使用するボリュームphp/src/git cloneを行う

  • wp/ : WordPressをHeadlessCMSとして使用する場合のボリューム。何も置かなくていい。

  • mysql/ : データベースの設定ファイルなどを入れるボリューム

  • mysql/db_data/ : データベースの永続化のためのデータ格納用ボリューム

  • .env : 作成する環境毎に変更 環境変数, docker-compose upなどのコマンド事項の際に読みに行きます。

  • node/ : Node.jsベースのフレームワーク(e.g. React.js, Vue.js)を使用する際に使います. node/app直下にプロジェクトを配置します。

  • Dockerコンテナ内のパスワードはnode/の場合node, rootユーザーはroot

  • php/wp/の方は常にコンテナ内にrootで入るようになっていたと思います(wp-cli利用時--allow-rootが必須).

使い方

Node.jsを使わないWordPressプロジェクトの場合,

プロジェクトディレクトリを予めnew-projectなどと作成しておく。

その後php/srcに移動し,

$ cd php/src

目的のプロジェクトをgit clone

$ git clone git@github.com:$github_username/$new_project.git

そうすると new-project/php/src/new-project.com/htdocs/... となる.

phpMyAdminに入るか、MySQLのコンテナに入って wordpressのDBでDBをインポート.

データベースの環境変数として以下に設定してあるので

docker-compose.yml
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

後程、これに合うようにwp-config.phpが自動で作成されるShell Scriptを回します。

build, daemon起動

docker-compose.ymlのあるディレクトリ(Dockerプロジェクトルート)に戻って

$ docker-compose up -d

を行う 初回でdocker imageがない場合やDockerfileに変更があった場合はdocker-compose up --buildが同時に走ってdocker imageとキャッシュが作成される。

build cacheが存在する場合は差分のみbuild実施されます。

コンテナ内のSSHにログイン

下記でコンテナ内へアクセス。

$ docker exec -it $container_name bash

コンテナ名はdocker-compose.ymlのあるディレクトリの.envに書くようにしています。

WordPressの場合は、初回のみ、 コンテナにログインした後

$ bash wp-setup.sh

を回してください. wp-cliで自動でWordPress環境を構築してくれます。

Node.jsプロジェクトの場合

docker-compose.ymlnodeコンテナの部分のコメントアウトを外す。

Node.jsのみ必要な場合は適宜不要なコンテナをコメントアウト

node/app以下にプロジェクトを配置 node/app/package.json となるような配置を想定しています。

WordPressコンテナ

WordPressをヘッドレスCMSとしてNode.jsのプロジェクトを立てる場合は wp/以下は特に何もコピーしなくていいですが、 コンテナ内でwp-setup.shを回す事を忘れないようにしてください。

$ docker-compose up -d
$ docker exec -it wpコンテナ名 bash

でコンテナ内にログインして

$ bash wp-wetup.sh

でプラグインなどをインストール。

Node.jsコンテナ

このコンテナには予めyarnnpmがインストールされている。 どちらを使っても良い。

node/appに配置されたプロジェクト上でローカルサーバーを回す場合は

$ docker exec -it node.jsコンテナ名 bash

でコンテナにログインして任意のコマンドを実行。

ここで、Node.jsコンテナ内で動かす開発サーバーは hostとして0.0.0.0 を指定する。

例えばGatsbyの場合は以下のように開発サーバーを立ち上げる。

gatsby develop --port=ポート番号 --host=0.0.0.0

これでコンテナ外からブラウザでコンテナ内の開発サーバーにアクセスできる。

PC画面キャプチャ
node-wordpress.docker-env