A WP-CLI command for syncing a remote site to a local environment
- A WordPress installation using .env for environment variables
- SSH connection to remote server
- WP-CLI
- rsync
- Require the plugin by running:
composer require jonbp/wp-cli-sync- Add the following to your
.envfile (don't forget.env.examplefor reference 😉):
# WP-CLI Sync Settings [wp sync]
REMOTE_SSH_USERNAME=""
REMOTE_SSH_HOSTNAME=""
REMOTE_PROJECT_DIR="~/gitrepo" # No trailing slashes
REMOTE_UPLOAD_DIR="~/gitrepo" # No trailing slashes
If you need to specify a port for the connection, you can specify it:
```sh
REMOTE_PORT=""If you want to be able to sync from additional environments (e.g. a remote development site), add additional environment variables for your remote install with the suffix _ENVIRONMENT.
REMOTE_SSH_USERNAME_DEV=""
REMOTE_SSH_HOSTNAME_DEV=""
REMOTE_PROJECT_DIR_DEV=""
REMOTE_UPLOAD_DIR_DEV=""- Run
wp syncfrom the project root. If you configured additional remote environments in step 2, you can pass a single argument to sync with that environment instead. E.g.wp sync dev.
LOCAL_ACTIVATED_PLUGINS=""
LOCAL_DEACTIVATED_PLUGINS=""
LOCAL_SYNC_DIR_EXCLUDES=""
LOCAL_POST_SYNC_QUERIES=""
You may find yourself working on a bedrock project that already exists on a production server and you don't have the database setup locally yet. Running wp sync in the project will fail in this case as it requires an active WordPress installation to run.
To remedy this, you can run the following commands to create a database (if necessary) and create a basic installation inside that database in order to run the plugin and its first sync.
wp db create
wp core install --url=abc.xyz --title=abc --admin_user=abc --admin_password=abc --admin_email=abc@abc.xyz --skip-email
It’s not necessary to edit the variables on the second line as the database is overwritten by the plugin during sync. The code is simply to give the plugin the requirements it needs to run without the real database installed.
