Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Docker-composeで最強(自分史上)のWordPress開発環境を作る

サーバーサイドエンジニアになった今でも、プライベートでは以前副業で制作したWordpressの改修案件が多いです。
そのような中、私のWordPressの開発環境構築は以下のように遷移しました。

入門書を読みながらMAMPでなんとか作成する。本番デプロイはFTPソフトのcyberDeckで、サーバー直上書き

黒い画面とお知り合いになる

VCCWと出会う。wordmove、sshの設定に苦しみながら、なんとか環境構築。vagrantで開発環境構築して、wordmoveでデプロイ

MacのOSアップデートでvagrantの起動に詰まる。その他、起動が遅い。メモリを食うことに嫌気が、、

クジラと出会う

現在

そんな経験を得て、今回作成したものは最強だと思っています。(N=1)

利点

  • docker-compose upで環境起動まで3秒。(初回のimageダウンロード除く)
  • .envファイルで設定管理。docker-compose.yml, movefile.ymlは触る必要なし
  • wordmoveでコマンド一発デプロイ、バックアップ
  • 複数環境起動してもメモリ消費わずか

リポジトリ

以下がそのリポジトリです。
README記載の通り基本、.envファイルに値追加すれば立ち上がります。
WordPressの開発環境でお困りの方!是非使ってみてください!!

https://github.com/kawamataryo/quick-start-wordpress-docker

以下README.md 抜粋

開発環境構築

0. 事前準備

Macにdocker, docker-composeをインストール

以下参考:
Docker Compose - インストール - Qiita

1. 環境変数の設定

リポジトリをクローン

$ git clone https://github.com/kawamataryo/quick-start-wordpress-docker.git project-dir

.envにdocker-composeで使う環境変数を定義しています。
コメントを元に記載してください。

vi ./.env
# -------------------------------------------
# wordpress・mysqlコンテナの設定
# -------------------------------------------
# プロダクトの名前 作成されるcontainer名の接頭語として使用
PRODUCTION_NAME=
# local WordPressを紐付けるPort名(ex: 8080)
LOCAL_SERVER_PORT=
# localのmysqlを紐付けるPort名(ex: 3306)
LOCAL_DB_PORT=

# -------------------------------------------
# wordmoveコンテナの設定
# -------------------------------------------
# 全て本番環境の情報
# URL
PRODUCTION_URL=
# WordPressのディレクトリの絶対パス
PRODUCTION_DIR_PATH=
# DB名
PRODUCTION_DB_NAME=
# DBのユーザー名
PRODUCTION_DB_USER=
# DBのパスワード
PRODUCTION_DB_PASSWORD=
# DBのホスト名
PRODUCTION_DB_HOST=
# DBの接続ポート
PRODUCTION_DB_PORT=
# SSHホスト名
PRODUCTION_SSH_HOST=
# SSHユーザー名
PRODUCTION_SSH_USER=
# SSHポート名
PRODUCTION_SSH_PORT=

2. Dockerコンテナの起動

docker-composeで関連コンテナを起動します。

$ docker-compose up -d

3. WordPressの初期化

.envのLOCAL_SERVER_PORTに設定したホストにアクセスし、worpdressの初期化を行います

$ open http://localhost:8080

4. Dockerコンテナの停止

docker-composeで関連コンテナを停止します。

※ docker-compose downを行うと、DBのデータも初期化されてしまうので、注意。
もし永続化したい場合は以下を参考に設定を追加する。
DockerでMySQLのデータを保存する方法

$ docker-compose stop

wordmoveでの本番デプロイ、バックアップ

wordmoveを使えば容易に本番環境とローカル環境の同期が可能です。

1. wordmoveのコンテナに接続

wordmoveのコンテナが起動した状態で以下コマンドを実行します。

$ docker exec -w /home/ -it wordmoveのコンテナ名 /bin/bash

2. sshの設定

コンテナから本番環境に同期するためssh-agentの設定を行います。
接続先サーバーとのssh接続設定、ローカルのssh/configの設定は終わっていることを前提としてます。
またid_rsa(秘密鍵)までのパスは接続するサーバーに合わせて記載してください。

参考:
エックスサーバーにSSHで接続してみよう! | vdeep
ssh-agentを利用して、安全にSSH認証を行う - Qiita

# ssh-agentの起動
$ ssh-agent bash

# ssh-agentの登録。
$ ssh-add /home/.ssh/id_rsa

2020/05/10追記

mysqlのdumpで失敗する場合は以下をwordmoveのコンテナ内で実行してください。

# wordmoveのmysql dumpで使うRubyのエンコーディングをUTF8に
export RUBYOPT=-EUTF-8

3. 同期・デプロイ

あとはコマンド一発で同期が可能です。
本番のデータをローカルにバックアップしたい場合は、、

$ wordmove pull --all

ローカルのデータを本番にアップロードしたい場合は、、

$ wordmove push --all

さらにオプション部分の指定で、DBのみthemesのみなど同期内容を変更可能です。
参考:

Wordmoveの基本操作 - Qiita

TODO

  • wordmoveで毎回ssh-addの設定を行う手間を削減(docker-composeのcommandで行う?)
  • MySQLのデータ永続化の設定追加

2020/05/19 追記

@yamanaka-aiz さんに対応のコメント頂きました!
記事下のコメント欄も確認お願いします

参考

https://docs.docker.com/compose/wordpress/
https://qiita.com/maimax/items/5090fd37f9832fe3c5fd

ryo2132
Frontend engineer / フルリモートワーク / 元消防士🚒 / 一児の父 / Ruby / Typescript / Vue.js / Firebase
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。
https://admin-guild.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away