Data sync from production to non-production environments
Data syncs between VIP Platform environments facilitate testing and quality assurance (QA) of new features and allows teams to accurately reproduce and examine errors in a non-production environment. After a data sync from a production environment to a non-production environment is completed, the target environment will automatically load shared media files that were uploaded to production. This eliminates the need to copy media between environments.
Limitations
- Data syncs can only occur from a production environment to a non-production environment.
- WordPress multisite environments that have sites created in addition to the main site (ID 1) must create and maintain a
config.yml
file for the results of a data sync to work as expected. - Non-production environments have access to a production environment’s shared media files in read-only mode.
- Elasticsearch indexes are not included in the data sync process.
Prerequisites
- To initiate a data sync, a user must have at minimum an Org admin role or an App write role for that application.
- Initiating a data sync with VIP-CLI requires that VIP-CLI is installed on the user’s local machine and has been updated to the most current version.
Actions that occur during a data sync
The data sync operation is designed not to impact the production environment in any way. The following actions only occur on the target environment:
- The target environment is protected via “maintenance mode”. This prevents access to the environment while the data is being restored and manipulated, and ensures that no changes can be made (and lost) during this time.
- The most recent database backup of the production environment is imported into the target environment.
- Occurrences of the production environment’s primary domain in the database are replaced with the primary domain of the target environment. For example, if the production environment’s primary domain is
example.com
, and the target environment’s primary domain isdevelop.example.com
, then all instances ofexample.com
will be replaced withdevelop.example.com
in the target database after the sync. For target environments that do not yet have a primary domain assigned,example.com
will be replaced by the target environment’s convenience domain (e.g.example-com-develop.go-vip.net
). - Protected options are restored.
- A
wp vip data-cleanup datasync
CLI command is run for further cleanup. - The
vip_datasync_cleanup
hook can be used to perform custom cleanup of application data at this stage. - Jetpack is (re)connected.
- Caches are flushed.
- Maintenance mode is deactivated.
Initiate a data sync
- Navigate to the VIP Dashboard.
- Select a non-production environment from the environment dropdown located at the upper left of the VIP Dashboard.
- Select “Database” from the sidebar navigation at the left of the screen.
- Select “Data Sync” from the submenu.
- Select the button labeled “Copy Data” to initiate the sync.
VIP-CLI command: vip sync [options]
- Target the production environment with the
vip sync
command to initiate the data sync. - A command line prompt will allow the user to select which non-production environment to sync the data to, or to cancel the sync request.
Command example for syncing data from the production environment of the “mystestsite” application to the development environment:
vip @mytestsite.develop sync
Protected options
A specific set of options that exist on the target environment are backed up before the data sync begins, then restored after the data sync has completed. This prevents environment-specific configurations from being shared between environments.
The protected options list cannot be extended or modified.
"WP Options" = [
'jetpack_options',
'jetpack_private_options',
'vip_jetpack_connection_pilot_heartbeat',
'wordpress_api_key',
'vip_search_index_versions',
'vip_search_global_index_versions',
];
// On multisites
"Site Meta" = [
'vip_search_global_index_versions',
];
Custom cleanup operations
The vip_datasync_cleanup
hook can be used for custom cleanup of application data (e.g., removing production API keys, performing brief data manipulation) after a data sync. On a WordPress multisite, the cleanup hook is run individually on each network site on the environment.
Custom code that uses the vip_datasync_cleanup
hook should be added to a file in the /client-mu-plugins
directory. Because data syncs move downward from the production environment, the vip_datasync_cleanup
code must be present in the branch that deploys to the target environment (e.g. develop or staging).
In this example the vip_datasync_cleanup
hook is used to delete the my_social_api_token
option on the non-production environment:
/**
* Run some custom cleanup after a migration.
*
* @uses vip_datasync_cleanup
*/
function my_action_vip_datasync_cleanup() {
// Safety first: Don't do anything in
// the production environment
if ( 'production' === VIP_GO_APP_ENVIRONMENT ) {
return;
}
delete_option( 'my_social_api_token' );
}
add_action( 'vip_datasync_cleanup', 'my_action_vip_datasync_cleanup' );
Using the vip_datasync_cleanup
hook to output logs
The data sync operation, as well as the actions defined in the vip_datasync_cleanup
hook, are performed on a transient job container rather than on an environment’s app or batch containers. Because of this, if the hook is configured to output logs they will not appear in the environment’s app or batch logs.
For log output from the vip_datasync_cleanup
hook to appear in an environment’s batch logs, configure the hook to create a one-time cron event with post-sync tasks. The cron event will be picked up and run on a batch container. Any logs resulting from those tasks will be output to the environment’s batch logs in Runtime Logs.
Last updated: September 14, 2023