こんな人向けの記事です。
- 本番環境と同じ環境を検証環境に再現したい、最小の工数で。
- 本番環境以外でテーマを改修してみたい。
- プラグインのアップデートとかを開発環境でテストしたい。
- WordpressをDockerで開発しようとしても設定ファイルとか面倒すぎる。
- 本番と同じ内容のDBを再現したいけど上手くいかない。
- できればコンテナ起動時に本番と同じ内容にしたい。
何ができるようになるの?
- 本番環境と全く同じものをDocker環境に再現します。
- チーム開発を爆速にするよ。
- 疎結合でね。
- 普通にやろうとすると本番環境のリソースを見に行ってたりしてちょっと残念。
注意点
- 完全に自分用のメモです。
- 多分、もっと良い方法があると思います。
- このやり方は、なるべく本番環境に影響を与えないことを考慮しています。
- そのために、wp-contentをgitリポジトリとして管理しています。(これ以上の階層はできれば触りたくない・・・・)
Get Started!!
テーマを安全に開発しよう!
- 基本的に
wp-content
をgitリポジトリとして管理します。 - なぜなら、これ以上のディレクトリは設定ファイルとかがあって管理が大変だから。
- 環境変数とか使えば良いけど、面倒臭いので今回はそういうのなしで行きます。
ディレクトリ構造
.git
docker
db
initdb.d
localhost.sql
wordpress
Dockerfile
languages
plugins
themes
uploads
.gitignore
docker-compose.yml
index.php
version: '3'
services:
db:
image: mariadb:10.5-focal
restart: always
environment:
MYSQL_ROOT_PASSWORD: {{お好きなものを}}
MYSQL_DATABASE: {{お好きなものを}}
MYSQL_USER: {{お好きなものを}}
MYSQL_PASSWORD: {{お好きなものを}}
volumes:
- ./docker/db/initdb.d:/docker-entrypoint-initdb.d
wordpress:
depends_on:
- db
build: ./docker/wordpress/
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: {{お好きなものを}}
WORDPRESS_DB_USER: {{お好きなものを}}
WORDPRESS_DB_PASSWORD: {{お好きなものを}}
volumes:
- .:/var/www/html/wp-content
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
depends_on:
- db
ports:
- 8888:80
FROM wordpress:latest
# 必要なツール郡をインストール
RUN apt-get update
RUN apt-get -y install wget unzip
# WP プラグイン (zip) ダウンロード
WORKDIR /tmp/wp-plugins
RUN wget https://downloads.wordpress.org/plugin/contact-form-7.4.6.zip
RUN wget https://downloads.wordpress.org/plugin/syntaxhighlighter.zip
RUN wget https://downloads.wordpress.org/plugin/wp-emmet.zip
# Zip ファイルを解凍してインストール
RUN unzip './*.zip' -d /usr/src/wordpress/wp-content/plugins
# 不要になった一時ファイルを削除
RUN apt-get clean
RUN rm -rf /tmp/*
# デフォルトテーマなんていらないよね!
RUN rm -rf /usr/src/wordpress/wp-content/themes/twenty**
# サーバが読めるように以下の所有者を変更
RUN chmod -R 777 /usr/src/wordpress
RUN chmod -R 777 /var/www/html
WORKDIR /var/www/html
- ディレクトリ構造のポイントは、Dockerに必要なものは
docker-compose.yml
を除いてすべて/docker
リポジトリの中に格納していることです。 - これでわかりやすくなりましたね。
本番環境->Docker環境へのDB反映
- 本番環境からsqlをエクスポートしてくる。
- Docker環境の
initdb.d
の中にエクスポートしてきたsqlを入れる - (2)をテキストエディタで開いてURLをDockerのものに置換する
- ex
-
xxx.com
->http://000.00.0.000:8000
みたいな感じ。 - 特にoptionにある以下の2箇所は必須で変更が必要
- 他の場所は変えなくても動きはする、、、本番のパスを読んでいくだけなので。
- でもどうせ2箇所買えるなら全部置換しちゃおう!
-
- ex
- 最後はやっぱり
docker-compose up -d
INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
- (1, 'siteurl', 'xxx.com', 'yes'),
+ (1, 'siteurl', 'http://000.00.0.000:8000', 'yes'),
- (2, 'home', 'xxx.com', 'yes'),
+ (2, 'home', 'http://000.00.0.000:8000', 'yes'),