公式のwordpressコンテナとwp-cliコンテナはディストリビューションが異なるため、主にユーザーIDの違いによって連携させるのに苦労があるようだったので、wordpressコンテナに追加することにした。
レイアウト
この辺をgitでやり取りする
※package.jsonは/dockerと同じ階層に置いている。
/docker
-/wordpress <-- 運用時に必要なものはここへ
-/wp-content
- ...
-/dev <-- 開発時に使うものをまとめる場所。
-/wordpress
-Dockerfile <--- wp-cliのインストール機能を追加
-/mysql
-/docker-entrypoint-initdb.d
-setup.sql <--- コンテナの初期化SQL
-/assets <---.pugとかwebpack前のアセットなどをここへ
- ...
-docker-compose.yml
package.json
docker-compose
version: '3.6'
services:
db-for-wp:
image: mysql:5.7
container_name: db-for-wp
ports:
- "3306:3306"
volumes:
- db-for-wp-data-volume:/var/lib/mysql
- ./dev/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: password
wp:
build: ./dev/wordpress
depends_on:
- db-for-wp
container_name: wp
ports:
- "8080:80"
volumes:
- ./wordpress/wp-content:/var/www/html/wp-content
environment:
WORDPRESS_DB_HOST: db-for-wp:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: password
volumes:
db-for-wp-data-volume:
肝心のDockerファイル
FROM wordpress:5
#wp-cliのインストール
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-CLIコマンド
wp-cliで初期化する。
DockerfileのRUNで実行するのがスマートだけど、
最初にやれば、Git管理下のファイルと後述のsetup.sqlファイルに書き出したもので再現されるので、とりあえず手打ち。
コンテナにはrootで入っていることが多いので、--allow-root
を忘れずに。
# WordPressセットアップ
wp core install --url='http://localhost:8080' --title='新規サイト' --admin_user='admin_user_name' --admin_password='admin_pass' --admin_email='wp@example.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 plugin delete hello.php --allow-root
# プラグインのインストール
wp plugin install wp-multibyte-patch --activate --allow-root
#wp plugin install jetpack --activate --allow-root
#wp plugin install backwpup --activate --allow-root
#wp plugin install siteguard --activate --allow-root
# 新規テーマのひな型を追加してアクティブ化(new-themeは任意のテーマ識別子)
wp scaffold _s new-theme --theme_name="新規テーマ" --author="制作者名" --allow-root
wp theme activate new-theme --allow-root
# テーマの削除
wp theme delete twentyseventeen --allow-root
wp theme delete twentyeighteen --allow-root
wp theme delete twentynineteen --allow-root
wp theme delete twentytwenty --allow-root
wp theme delete twentytwentyone --allow-root
以下は任意
※設定値の変更は テーマのfunctions.phpから
add_action('after_setup_theme', 'my_theme_after_setup');
でやるほうが、見てわかりやすく合理的。
###メディア: 生成しない画像サイズを0にする
# thumbnail: : 標準 150*150 & thumbnail_crop=1
# wp option set thumbnail_size_w 0 --allow-root
# medium: 標準 640*640
wp option set medium_size_w 0 --allow-root
# medium_large: 標準768*768
wp option set medium_large_size_w 0 --allow-root
# large: 標準1024*1024
# wp option set large_size_w 0 --allow-root
### 生成するメディアのサイズ指定
# wp option set thumbnail_crop 1 --allow-root
wp option set thumbnail_size_w 300 --allow-root
wp option set thumbnail_size_h 300 --allow-root
wp option set large_size_w 1160 --allow-root
wp option set large_size_h 1160 --allow-root
DBコンテナ作成時の初期化SQLについて
確認用に渡す前などに適宜dumpしておくと、はじめてdocker-compose up
したときに内容が反映される。
Gitで管理できるし納品用の初期化SQLとしても使える。
mysqldump -u root -p wordpress > /docker-entrypoint-initdb.d/setup.sql
すでにコンテナが作成されている場合は、
ボリュームコンテナの削除docker volume remove ボリュームコンテナ名
(上の例だと docker volume remove db-for-wp-data-volume
)をすることで、
次回 docker-compose up
時にsetup.sqlの内容が反映される。