1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Wordpress + Dockerの最適な運用を考えてみた。

Posted at

こんな人向けの記事です。

  • 本番環境と同じ環境を検証環境に再現したい、最小の工数で。
    • 本番環境以外でテーマを改修してみたい。
    • プラグインのアップデートとかを開発環境でテストしたい。
    • 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反映

  1. 本番環境からsqlをエクスポートしてくる。
  2. Docker環境のinitdb.dの中にエクスポートしてきたsqlを入れる
  3. (2)をテキストエディタで開いてURLをDockerのものに置換する
    • ex
      • xxx.com -> http://000.00.0.000:8000みたいな感じ。
      • 特にoptionにある以下の2箇所は必須で変更が必要
      • 他の場所は変えなくても動きはする、、、本番のパスを読んでいくだけなので。
        • でもどうせ2箇所買えるなら全部置換しちゃおう!
  4. 最後はやっぱり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'),
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?