Written by TSUYOSHI

WP-CLI & Dockerで「爆速」WordPress環境構築

Docker PROGRAMMING WordPress

WordPressの初期設定って毎回同じなのに面倒くさくありませんか?
WordPressインストールをして、必要なプラグインを入れて、パーマリンク設定を変えて… と最初にやることが多くて、テーマ制作など本題に入る前にやることが意外と面倒で僕は消耗することが多かったです。

でも1度設定を作ってしまえば、次のWordPress構築からは簡単にできる便利な方法があるのでご紹介します。僕も実際に使っている方法です。

本記事の内容

  • コピー&ペーストで「Docker」「WP-CLI」を利用して、爆速で「WordPress」構築を行う方法をご紹介します

本記事を書いている僕はフロントエンドのエンジニアとして3年の経験があり、今までオリジナルのテーマで作成したWordPressサイトは20を超えています。

WordPressの初期設定が面倒くさいと思っている人は読んでみてください。
基本、本記事の内容をコピー&ペーストすればOKです。

Docker」と「WordPress」でインストールまで自動で完了させる方法

「WP-CLI」というツールを使うのですが、これはWordPressをコマンドによって制御することができるCUIのツールです。「WP-CLI」をインストールすれば、WordPressの設定をコマンドで制御できて便利です。

コマンド制御ができるということは、いちいち管理画面を開いてGUIにてクリックしたりする操作は必要はなく、自動化して制御できることを意味しています。
DockerでWordPressを立ち上げて、そのまま設定まで一気に自動でできれば効率が非常によいです。

「WP-CLI」でコマンド実行をさせれば、いつも使うプラグインを自動でインストール、初期のいらないプラグインを自動でアンインストールするなどを、一度設定してしまえば次からは半自動で簡単にできてしまいます。テーマのインストール、アンインストール、細かい設定などほとんどのことが自動化することができます。

用意するファイルと実行するコマンド

用意するファイルは3つです。

  • docker-compose.yml
  • Dockerfile
  • wp-install.sh

docker-compose.yml ファイルを作ります。参考までにDocker Composeについて知りたい場合は【初心者向け】DockerでWordPressを動かす方法を解説に書いてあります。
以下をコピー&ペーストして、docker-compose.yml ファイルを作ってください。
今回は「docker-compose.yml」WordPressイメージ指定は「Dockerfile」に書いており、build(DockerFile実行)に変更しています。
▼docker-compose.yml

version: "3.1"

services:
  wordpress:
    build: ./
    container_name: wp1-wordpress
    ports:
      - "8000:80"
    volumes:
      - ./html:/var/www/html
      - ./wp-install.sh:/tmp/wp-install.sh
    environment:
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_PASSWORD: mysql_password
    depends_on:
      - mysql
    restart: always

  mysql:
    image: mariadb
    container_name: wp1-mariadb
    ports:
      - "3306:3306" #MacのMySQLとポートがバッティングする場合は変える 例) - "33060:3306"
    volumes:
      - db_mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: mysql_password
    restart: always

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: wp1-phpmyadmin
    ports:
      - 8080:80
    volumes:
      - ./phpmyadmin/sessions:/sessions
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=mysql_password
    depends_on:
      - mysql

volumes:
  db_mysql:

同様にDockerfileを以下をコピー&ペーストして作ってください。
DockerFileRUNコマンドで「WP-CLI」をインストールさせています。
これはWordPressコンテナとWP-CLIのコンテナのwww-dataユーザのuidが違うことによってWP-CLIが正常に動作しない(ディストリビューションが違うらしい)問題があるからです。
Dockerfile

FROM wordpress:latest

# wp-cliのインストール ※注意:ここでwp-cliインストールしないとWordPressが正常にインストールできない
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
  && chmod +x wp-cli.phar \
  && mv wp-cli.phar /usr/local/bin/wp \
  && wp --info

次にシェルスクリプト「wp-install.sh」(名前は任意)を以下の内容をコピー&ペーストして作ります。
以下は例なので摘便、変更して下さい。
WP-CLI」のコマンドをスクリプト化して記載します。シェルスクリプトに記載することによって、ひとつひとつコマンドを打つ必要がなく、自動化してコマンド1つで実行できるようになります。
wp-install.sh

#!/bin/bash

# WordPressセットアップ admin_user,admin_passwordは管理画面のログインID,PW
wp core install \
--url='http://localhost:8000' \
--title='サイトのタイトル' \
--admin_user='wordpress' \
--admin_password='wordpress' \
--admin_email='info@test.com' \
--allow-root

# 日本語化
wp language core install ja --activate --allow-root

# タイムゾーンと日時表記
wp option update timezone_string 'Asia/Tokyo' --allow-root
wp option update date_format 'Y-m-d' --allow-root
wp option update time_format 'H:i' --allow-root

# キャッチフレーズの設定 (空にする)
wp option update blogdescription '' --allow-root

# プラグインの削除 (不要な初期プラグインを削除)
wp plugin delete hello.php --allow-root
wp plugin delete akismet --allow-root

# プラグインのインストール (必要に応じてコメントアウトを外す)
wp plugin install wp-multibyte-patch --activate --allow-root
# wp plugin install backwpup --activate --allow-root
# wp plugin install siteguard --activate --allow-root
# wp plugin install contact-form-7 --activate --allow-root
# wp plugin install wp-mail-smtp --activate --allow-root
# wp plugin install all-in-one-seo-pack --activate --allow-root
# wp plugin install broken-link-checker --activate --allow-root
# wp plugin install addquicktag --activate --allow-root

# テーマの削除
wp theme delete twentysixteen --allow-root
wp theme delete twentyseventeen --allow-root
wp theme delete twentynineteen --allow-root
# wp theme delete twentytwenty --allow-root

# パーマリンク更新
wp option update permalink_structure /%postname%/ --allow-root

「docker-compose.yml 」「Dockerfile」「wp-install.sh」の3ファイルを作成できたら、次のように、順番にコマンドを実行していきます。

Dockerの立ち上げ

  • docker-compose up -d」 でDocker起動
    DockerでWordPressを立ち上げます。localhost:8000 にアクセスしてみてインストール画面が現れるまで待ちます。(WordPressコンテナが立ち上げるまで待ちます)

    $ docker-compose up -d
    
    Creating network "wpcli_docker_wordpress_default" with the default driver
    Creating volume "wpcli_docker_wordpress_db_mysql" with default driver
    Creating wp1-mariadb ... done
    Creating wp1-phpmyadmin ... done
    Creating wp1-wordpress  ... done
  • docker exec -it 【WordPressのコンテナ名】 /bin/bash でコンテナに入る
    今回の場合、コンテナ名は「wp1-wordpress」です。

    $ docker exec -it wp1-wordpress /bin/bash 
  • chmod +x /tmp/wp-install.sh」 で実行権限を付与
    シェルスクリプトに実行権限を付与して実行できるようにします
    $ chmod +x /tmp/wp-install.sh
  • /tmp/wp-install.sh でWP-CLI実行
    実行してWP-CLIコマンドを走らせます

    $ /tmp/wp-install.sh
    
    sh: 1: -t: not found
    Success: WordPress installed successfully.
    Downloading translation from https://downloads.wordpress.org/translation/core/5.3.2/ja.zip...
    Unpacking the update...
    Installing the latest version...
    Removing the old version of the translation...
    Translation updated successfully.
    Language 'ja' installed.
    Success: Language activated.
    Success: Installed 1 of 1 languages.
    Success: Updated 'timezone_string' option.
    Success: Updated 'date_format' option.
    Success: Updated 'time_format' option.
    Success: Updated 'blogdescription' option.
    Deleted 'hello.php' plugin.
    Success: Deleted 1 of 1 plugins.
    Deleted 'akismet' plugin.
    Success: Deleted 1 of 1 plugins.
    Installing WP Multibyte Patch (2.8.4)
    https://downloads.wordpress.org/plugin/wp-multibyte-patch.2.8.4.zip からインストールパッケージをダウンロード中...
    パッケージを展開しています…
    プラグインをインストールしています…
    プラグインのインストールが完了しました。
    Activating 'wp-multibyte-patch'...
    Plugin 'wp-multibyte-patch' activated.
    Success: Installed 1 of 1 plugins.
    Deleted 'twentysixteen' theme.
    Success: Deleted 1 of 1 themes.
    Deleted 'twentyseventeen' theme.
    Success: Deleted 1 of 1 themes.
    Deleted 'twentynineteen' theme.
    Success: Deleted 1 of 1 themes.
    Success: Updated 'permalink_structure' option.

これで localhost:8000 にアクセスするとWordPressがセットアップされた状態で立ち上がっています。

Dockerを停止するとき

すぐに再度使うときは「docker-compose stop」コマンドで停止して、再開するときは「docker-compose restart」で再開すればよいかと思います。

# 一時停止
$ docker-compose stop
#再開
$docker-compose restart

しばらく使わないときは「docker-compose down」 でコンテナを一時的に削除し、再度利用する時に 「docker-compose up -d」 で立ち上げればデータは復元できるので問題ありません。

#停止
docker-compose down
# 再開
docker-compose up -d

WP-CLIとDockerでWordPressサイトを構築する方法まとめ

1.必要なファイルを準備する

  • 「docker-compose.yml」
  • 「Dockerfile」
  • 「wp-install.sh」

2.コマンドを順番に実行する

  • docker-compose up -d
  • docker exec -it 【WordPressのコンテナ名】 /bin/bash
  • chmod +x /tmp/wp-install.sh
  • /tmp/wp-install.sh

最初だけ少し面倒かもしれませんが、慣れると効率がかなり良くなると思うので使ってみてください。