##目的
pushはすべて上書きしてしまうので、本番環境をpullしてテスト環境にpushする目的で使用します。
やってみるにあたり、Ryo Kawamata氏のリポジトリを利用させていただきました。
##環境
- docker-compose version 1.29.0
- wordmove
- ssh-agent
- mySQL version 5.7
- phpmyadmin
##準備
###環境変数の設定 + テスト環境を追加する
利用したリポジトリにはテスト環境の設定がないので、ついでに追加していきます。
コンテナの設定部分をコピーし、"PRODUCTION_"を"STAGING_"に置換するだけでOK。
# -------------------------------------------
# wordpress・mysqlコンテナの設定
# -------------------------------------------
# プロダクトの名前 作成されるcontainer名の接頭語として使用
PRODUCTION_NAME= hogehoge
# local wordpressを紐付けるPort名(ex: 8080)
LOCAL_SERVER_PORT= 8080
# localのmysqlを紐付けるPort名(ex: 3306)
LOCAL_DB_PORT= 3306
MYSQL_NETWORK= hogehoge
# -------------------------------------------
# wordmoveコンテナの設定
# -------------------------------------------
# 全て本番環境の情報
# URL
PRODUCTION_URL=https://*****.com
# wordpressのディレクトリの絶対パス
PRODUCTION_DIR_PATH= /*****/
# DB名
PRODUCTION_DB_NAME= *****
# DBのユーザー名
PRODUCTION_DB_USER= *****
# DBのパスワード
PRODUCTION_DB_PASSWORD= *****
# DBのホスト名
PRODUCTION_DB_HOST= *****.*****.jp
# DBの接続ポート
PRODUCTION_DB_PORT=3306
# SSHホスト名
PRODUCTION_SSH_HOST= *****
# SSHユーザー名
PRODUCTION_SSH_USER= *****
# SSHポート名
PRODUCTION_SSH_PORT= 10022
# -------------------------------------------
# テスト環境の情報
# -------------------------------------------
# URL
STAGING_URL=
# wordpressのディレクトリの絶対パス
STAGING_DIR_PATH=
# DB名
STAGING_DB_NAME=
# DBのユーザー名
STAGING_DB_USER=
# DBのパスワード
STAGING_DB_PASSWORD=
# DBのホスト名
STAGING_DB_HOST=
# DBの接続ポート
STAGING_DB_PORT=
# SSHホスト名
STAGING_SSH_HOST=
# SSHユーザー名
STAGING_SSH_USER=
# SSHポート名
STAGING_SSH_PORT=
# SSHパスワード(パスアクセスの場合)
STAGING_SSH_PASS=
global:
sql_adapter: default
local:
vhost: "http://localhost:<%= ENV['LOCAL_SERVER_PORT'] %>"
wordpress_path: "/var/www/html/"
database:
name: "wordpress"
user: "root"
password: "wordpress"
host: "database"
production:
vhost: "<%= ENV['PRODUCTION_URL'] %>"
wordpress_path: "<%= ENV['PRODUCTION_DIR_PATH'] %>"
database:
name: "<%= ENV['PRODUCTION_DB_NAME'] %>"
user: "<%= ENV['PRODUCTION_DB_USER'] %>"
password: "<%= ENV['PRODUCTION_DB_PASSWORD'] %>"
host: "<%= ENV['PRODUCTION_DB_HOST'] %>"
port: "<%= ENV['PRODUCTION_DB_PORT'] %>"
exclude:
- '.git/'
- '.gitignore'
- '.gitmodules'
- '.env'
- 'node_modules/'
- 'bin/'
- 'tmp/*'
- 'Gemfile*'
- 'Movefile'
- 'movefile'
- 'movefile.yml'
- 'movefile.yaml'
- 'wp-config.php'
- 'wp-content/*.sql.gz'
- '*.orig'
- "wp-content/uploads/backwpup*/*"
- ".htaccess"
ssh:
host: "<%= ENV['PRODUCTION_SSH_HOST'] %>"
user: "<%= ENV['PRODUCTION_SSH_USER'] %>"
port: "<%= ENV['PRODUCTION_SSH_PORT'] %>"
password: "<%= ENV['PRODUCTION_SSH_PASS'] %>" # パス接続の場合
rsync_options: "--verbose"
staging:
vhost: "<%= ENV['STAGING_URL'] %>"
wordpress_path: "<%= ENV['STAGING_DIR_PATH'] %>"
database:
name: "<%= ENV['STAGING_DB_NAME'] %>"
user: "<%= ENV['STAGING_DB_USER'] %>"
password: "<%= ENV['STAGING_DB_PASSWORD'] %>"
host: "<%= ENV['STAGING_DB_HOST'] %>"
port: "<%= ENV['STAGING_DB_PORT'] %>"
exclude:
- '.git/'
- '.gitignore'
- '.gitmodules'
- '.env'
- 'node_modules/'
- 'bin/'
- 'tmp/*'
- 'Gemfile*'
- 'Movefile'
- 'movefile'
- 'movefile.yml'
- 'movefile.yaml'
- 'wp-config.php'
- 'wp-content/*.sql.gz'
- '*.orig'
- "wp-content/uploads/backwpup*/*"
- ".htaccess"
ssh:
host: "<%= ENV['STAGING_SSH_HOST'] %>"
user: "<%= ENV['STAGING_SSH_USER'] %>"
port: "<%= ENV['STAGING_SSH_PORT'] %>"
password: "<%= ENV['STAGING_SSH_PASS'] %>" # パス接続の場合
rsync_options: "--verbose"
version: '3'
services:
database:
image: mysql:5.7
command:
- "--character-set-server=utf8"
- "--collation-server=utf8_unicode_ci"
ports:
- "${LOCAL_DB_PORT}:3306"
restart: on-failure:5
container_name: "${PRODUCTION_NAME}_db"
environment:
MYSQL_USER: wordpress
MYSQL_DATABASE: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_ROOT_PASSWORD: wordpress
wordpress:
depends_on:
- database
image: wordpress:latest
container_name: "${PRODUCTION_NAME}_wordpress"
ports:
- "${LOCAL_SERVER_PORT}:80"
restart: on-failure:5
volumes:
- ./public:/var/www/html
environment:
WORDPRESS_DB_HOST: database:3306
WORDPRESS_DB_PASSWORD: wordpress
wordmove:
tty: true
depends_on:
- wordpress
image: welaika/wordmove
restart: on-failure:5
container_name: "${PRODUCTION_NAME}_wordmove"
volumes:
- ./config:/home/
- ./public:/var/www/html
- ~/.ssh:/home/.ssh
environment:
LOCAL_SERVER_PORT: "${LOCAL_SERVER_PORT}"
PRODUCTION_URL: "${PRODUCTION_URL}"
PRODUCTION_DIR_PATH: "${PRODUCTION_DIR_PATH}"
PRODUCTION_DB_NAME: "${PRODUCTION_DB_NAME}"
PRODUCTION_DB_USER: "${PRODUCTION_DB_USER}"
PRODUCTION_DB_PASSWORD: "${PRODUCTION_DB_PASSWORD}"
PRODUCTION_DB_HOST: "${PRODUCTION_DB_HOST}"
PRODUCTION_DB_PORT: "${PRODUCTION_DB_PORT}"
PRODUCTION_SSH_HOST: "${PRODUCTION_SSH_HOST}"
PRODUCTION_SSH_USER: "${PRODUCTION_SSH_USER}"
PRODUCTION_SSH_PORT: "${PRODUCTION_SSH_PORT}"
PRODUCTION_SSH_PASS: "${PRODUCTION_SSH_PASS}"
STAGING_URL: "${STAGING_URL}"
STAGING_DIR_PATH: "${STAGING_DIR_PATH}"
STAGING_DB_NAME: "${STAGING_DB_NAME}"
STAGING_DB_USER: "${STAGING_DB_USER}"
STAGING_DB_PASSWORD: "${STAGING_DB_PASSWORD}"
STAGING_DB_HOST: "${STAGING_DB_HOST}"
STAGING_DB_PORT: "${STAGING_DB_PORT}"
STAGING_SSH_HOST: "${STAGING_SSH_HOST}"
STAGING_SSH_USER: "${STAGING_SSH_USER}"
STAGING_SSH_PORT: "${STAGING_SSH_PORT}"
STAGING_SSH_PASS: "${STAGING_SSH_PASS}"
RUBYOPT: -EUTF-8
phpmyadmin:
container_name: "${PRODUCTION_NAME}_pma"
image: phpmyadmin/phpmyadmin
restart: on-failure:5
depends_on:
- database
ports:
- 8888:80
environment:
PMA_HOST: database
###docker-composeでビルド
$ docker-compose up -d
###Wordpressを初期化、一旦docker-composeを停止
.envで設定した8080にアクセスし、Wordpressを同期する前に初期化しておきます。
$ open http://localhost:8080
いつもdownでやっているので1回間違えてしまったのですが、DBのデータも初期化されてしまうのでstopで停止させます。
毎度忘れるので、どこかにメモしておきます。
$ docker-compose stop
###ssh-agentの設定
####wordmoveのコンテナに移動
docker exec -w /home/ -it wordmoveのコンテナ /bin/bash
####ssh-agentを起動、公開鍵を設定
$ ssh-agent bash
$ ssh-add -K /home/.ssh/id_rsa
登録できているか確認
$ ssh-add -l
使うときは
ssh -A [鍵の名前]
##wordmoveを使ってみる
Rubyのエンコーディングはdocker-compose.xmlで設定済
wordmoveのコマンドは以下
> wordmove help
Commands:
wordmove --version, -v # Print the version
wordmove doctor # Do some local configuration and environment checks
wordmove help [TASK] # Describe available tasks or one specific task
wordmove init # Generates a brand new movefile.yml
wordmove list # List all environments and vhosts
wordmove pull # Pulls WP data from remote host to the local machine
wordmove push # Pushes WP data from local machine to remote host
###本番環境をpullしてみる
$ wordmove pull -e [production / staging] -[オプション]
複数環境を設定している場合、(今回はテスト環境)-e [production / staging]
で指定することができます。一つだけであれば、-e
は省略。
pullの場合はdefaultで常にlocalにpullされるので、localにpullするときは指定しなくてもOK。複数環境を設定していて且つpull先を指定したい場合は、-e
をつけて指定します。
pushの場合は毎回push先を指定する必要があります。
$ wordmove push -t -e test
When you pull/push you can specify a remote w/ -e flag if you have multiple remotes.
If you have just one remote it will be used by default, so you can omit -e flag.
When you pull, the destination will always be local; tell Wordmove the environment from where it should take the bits w/ -e. E.g.:
wordmove pull -t -e live
will sync from live to local
When you push, the destination will always be the requested remote; tell Wordmove the required destination environment w/ -e. E.g.:
wordmove push -t -e test
will sync from local to test.
##ToDo
sshの公開鍵認証を自動化しているかたがいるので参考にしたい。