1
1

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 3 years have passed since last update.

wordmoveでWordPressを同期したりしてみる

Last updated at Posted at 2021-07-14

##目的
pushはすべて上書きしてしまうので、本番環境をpullしてテスト環境にpushする目的で使用します。

やってみるにあたり、Ryo Kawamata氏のリポジトリを利用させていただきました。

##環境

  • docker-compose version 1.29.0
    • wordmove
    • ssh-agent
    • mySQL version 5.7
    • phpmyadmin

##準備
###環境変数の設定 + テスト環境を追加する
利用したリポジトリにはテスト環境の設定がないので、ついでに追加していきます。
コンテナの設定部分をコピーし、"PRODUCTION_"を"STAGING_"に置換するだけでOK。

.env
# -------------------------------------------
# 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=
config/movefile.yml
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"
docker-compose.xml
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の公開鍵認証を自動化しているかたがいるので参考にしたい。

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?