For all my new sites, I'm using free OpenShift account. But it is not 100% stable. Now, I have 5 sites located on OpenShift, and at least once a week, I need to restart one of them (usually it's error 503). So, when number of visitors on sevennet.org exceeded 4000 per day I have decided to move this wordpress blog to my VPS.

Here is a small instruction how to do that

Prepare your VPS\VDS

On your VPS you should have nginx\apache with php and mysql installed.

I would recommend you to change apache to nginx. And here is proper wordpress site configuration for nginx

Generate ssh key to access your OpenShift application

I have made small note: how to generate ssh key and access OpenShift account with this key

Backup your database

  • Go to your wordpress administration panel
  • Select Tools
  • Go to Export
  • Select All Content and press Download export file

Save and download all site files and database dump from OpenShift

  • Check how to connect to OpenShift application with putty
  • Create temporary folder:
    mkdir php/temp
  • Dump database with following command:
    mysqldump -u$OPENSHIFT_MYSQL_DB_USERNAME -h$OPENSHIFT_MYSQL_DB_HOST -p$OPENSHIFT_MYSQL_DB_PASSWORD $OPENSHIFT_APP_NAME > php/temp/database.sql
  • Archive site file structure:
    tar -chvzf php/temp/www.tar.gz app-root/data/current
  • If mysql dump is to big - archive it:
    tar -cvzf php/temp/sql.tar.gz php/temp/database.sql

Connect to OpenShift with FTP client and download all backups

I will use WinSCP to do that.

  • Open WinSCP and fill address and username information (you can find in on your OpenShift application's page)

winscp

  • Go to Advanced... -> Advanced and specify your ssh key there:

winscp

  • Save and connect to your server.
  • Go to "php/temp"
  • Download www.tar.gz and sql.tar.gz on your computer

Create and deploy database on VPS

  • Connect to your VPS\VDS with WinSCP
  • Upload sql.tar.gz
  • Connect to VPS via ssh
  • Extract sql.tar.gz
    tar -xvf sql.tar.gz
  • Create database and user for wordpress site (replace all CAPS with actual values):
    mysql -u ROOT_DB_USER -pROOT_DB_USER_PASSWORD -e "create database NEW_DB_NAME; grant all privileges on NEW_DB_NAME.* to NEW_DB_USER@localhost identified by 'NEW_DB_USER_PASSWORD'"
  • Restore database content from dump file (replace all CAPS with actual values):
    mysql -u NEW_DB_USER -pNEW_DB_USER_PASSWORD NEW_DB_NAME < php/temp/database.sql

Modify Wordpress configs

On your local computer extract files from www.tar.gz

  • Open \www\app-root\data\current\wp-config.php for edit
  • Replace
    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define('DB_NAME', getenv('OPENSHIFT_APP_NAME'));
    
    /** MySQL database username */
    define('DB_USER', getenv('OPENSHIFT_MYSQL_DB_USERNAME'));
    
    /** MySQL database password */
    define('DB_PASSWORD', getenv('OPENSHIFT_MYSQL_DB_PASSWORD'));
    
    /** MySQL hostname */
    define('DB_HOST', getenv('OPENSHIFT_MYSQL_DB_HOST') . ':' . getenv('OPENSHIFT_MYSQL_DB_PORT'));

    with

    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define('DB_NAME', 'NEW_DB_NAME');
    
    /** MySQL database username */
    define('DB_USER', 'NEW_DB_USER');
    
    /** MySQL database password */
    define('DB_PASSWORD', 'NEW_DB_USER_PASSWORD');
    
    /** MySQL hostname */
    define('DB_HOST', '127.0.0.1:3306');
  •  Delete whole block from "/**#@+" line till "/**#@-*/"
  • Go to https://api.wordpress.org/secret-key/1.1/salt/
  • Copy and past that text instead of deleted block
  • If you don't use ssl connection then delete "define('FORCE_SSL_ADMIN', true);" line
  • Also delete following lines:
    /** Tell WordPress where the plugins directory really is */
    if ( !defined('WP_PLUGIN_DIR') && is_link(ABSPATH . '/wp-content/plugins') )
      define('WP_PLUGIN_DIR', realpath(ABSPATH . '/wp-content/plugins'));
  • Save file
  • Archive www folder again (for windows you can use 7zip)

Deploy files to the VPS

  • Upload www.tar on VPS
  • Connect to VPS via ssh (putty)
  • Extract files
    tar -xvf www.tar
  • Copy files to web server site root directory:
    cp -a www/app-root/data/current/* /var/yoursite.com/www
  • Reload web server

Update MX record on your NS server

Change your domain MX record, so it will point to the new VPS server instead of old OpenShift application