指定のディレクトリにプロジェクトをgit cloneしてdocker-compose up -d で環境が立ち上がるDocker開発環境のセットです。
Dockerコンテナのオーケストレーションツール Docker compose を利用した環境構築のDockerファイル郡です。
自作ツールとしてGitHubにソースを公開しています
https://github.com/kaperrine-dog/node-wp.docker-env
PHPのサイト構築を行う際にローカル環境構築の手間を省くことが目的で1年程度前に作成したものを
WordPressにも対応できるように手を加えたものです。
さらに、このツールではWordPressをHeadless 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.shphp/ : WordPressやPHPのみで動く環境の場合に使用するボリューム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をインポート.
データベースの環境変数として以下に設定してあるので
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress後程、これに合うようにwp-config.phpが自動で作成されるShell Scriptを回します。
docker-compose.ymlのあるディレクトリ(Dockerプロジェクトルート)に戻って
$ docker-compose up -dを行う
初回でdocker imageがない場合やDockerfileに変更があった場合はdocker-compose up --buildが同時に走ってdocker imageとキャッシュが作成される。
build cacheが存在する場合は差分のみbuild実施されます。
下記でコンテナ内へアクセス。
$ docker exec -it $container_name bashコンテナ名はdocker-compose.ymlのあるディレクトリの.envに書くようにしています。
WordPressの場合は、初回のみ、
コンテナにログインした後
$ bash wp-setup.shを回してください.
wp-cliで自動でWordPress環境を構築してくれます。
Node.jsプロジェクトの場合docker-compose.ymlのnodeコンテナの部分のコメントアウトを外す。
Node.jsのみ必要な場合は適宜不要なコンテナをコメントアウト
node/app以下にプロジェクトを配置
node/app/package.json となるような配置を想定しています。
WordPressをヘッドレスCMSとしてNode.jsのプロジェクトを立てる場合は
wp/以下は特に何もコピーしなくていいですが、
コンテナ内でwp-setup.shを回す事を忘れないようにしてください。
$ docker-compose up -d
$ docker exec -it wpコンテナ名 bashでコンテナ内にログインして
$ bash wp-wetup.shでプラグインなどをインストール。
このコンテナには予めyarnとnpmがインストールされている。
どちらを使っても良い。
node/appに配置されたプロジェクト上でローカルサーバーを回す場合は
$ docker exec -it node.jsコンテナ名 bashでコンテナにログインして任意のコマンドを実行。
ここで、Node.jsコンテナ内で動かす開発サーバーは
hostとして0.0.0.0 を指定する。
例えばGatsbyの場合は以下のように開発サーバーを立ち上げる。
gatsby develop --port=ポート番号 --host=0.0.0.0これでコンテナ外からブラウザでコンテナ内の開発サーバーにアクセスできる。