OpenShift WordPress Install Source

June 20, 2014 Maithilish

Chapter 12. OpenShift WordPress Install Source

Through out the WordPress Tutorial, we stick with the WordPress installed from OpenShift Instant App bundled by OpenShift team. While, OpenShift Instant Apps are stable and updated frequently, we still prefer to do a OpenShift WordPress install from its source.
Consider this scenario. We have a site with WordPress 3.8.3 and every week, on Sunday, we take the backup. Meanwhile, WordPress releases version 3.9 and next Wednesday, OpenShift updates the Instant App to 3.9. To our bad luck, very next day we mess up our site. To restore, we create a new OpenShift WordPress Application and because of an update, its version is 3.9. However, the backup set contains data for WordPress 3.8.3.
Restore goes through, but we end up with a WordPress version 3.9 with WordPress 3.8.3 database. Usually, it is not a good practice jumping versions during restore as it may subtly break something inside without our notice.
We prefer to install WordPress from source to have finer control over the WordPress installation.


When we start with OpenShift and WordPress, it is advisable to use OpenShift Instant App. After we gain sufficient expertise in managing the OpenShift and WordPress migrate the site to WordPress source installation.

OpenShift WordPress Install from Source

In WordPress source installation process, instead of the Instant App bundled by OpenShift, we use WordPress release from Latest WordPress source bundle is available from WordPress Org, and earlier versions of WordPress are available in Release Archive.


While Instant App installation was entirely using OpenShift Web Console, OpenShift WordPress Install Source method uses not only OpenShift Web Console but also RHC Client Tools.
To carry out tasks explained in this chapter, we require to install and setup RHC and PuTTY (Windows users). To install RHC and PuTTY, refer Appendix B, OpenShift RHC Client Tools.
To start with, we create an application in OpenShift. We assume that we already have an OpenShift account with a namespace as explained in Chapter 1, OpenShift WordPress Tutorial. To create a new application, open OpenShift Web Console and choose Application tab and click Add Application. In the Choose a type of application screen, scroll down to PHP section and select PHP 5.3. It adds PHP 5.3 cartridge to our application and displays Configure the application screen. In the Public URL field, enter the name of the application and hit Create Application button. We chose PHP 5.3 cartridge, which bundles Apache Web Server with PHP 5.3 module, because to run WordPress software requires the PHP enabled web server.
Next we need to add MySQL database cartridge to the application. To do that, go to Application Overview screen and click see the entire list of cartridges you can add link. In the Choose a cartridge type screen choose MySQL 5.1 cartridge.
That completes the creation of a new OpenShift application with two cartridges – PHP 5.3 and MySQL 5.1. Now, if we access the public URL of the application, it displays the PHP Welcome page.
Deploy WordPress

OpenShift uses Git, software configuration management tool, to manage the application development and deployment. We use Git to download the OpenShift application repository, add WordPress to the repository and deploy back the application to the OpenShift.

To download the application repository, we require its Git URL. Find out Git URL from OpenShift Web ConsoleApplicationsApplication OverviewSource Code. Copy Source code field to the clipboard.
In the PC, open the command prompt and change to some directory where we can download the source and work on it. Open command prompt and run git clone. Replace <Git URL> with the Source Code field copied earlier.

Window and Linux

C:> git clone <Git URL>

Git downloads (clone) the application repository from OpenShift server and places it in a directory named same as the application name. For example, if our application name is quickstart, then Git downloads the source to a folder named quickstart.
For newly created PHP application, source contains a single index.php. However, remember that this is not a plain directory but a Git Repository. It contains a hidden directory .git which holds repository objects to keep track of changes as we go forward.
Next step is to add WordPress software to the repository. Download the required WordPress release from Release Archive or the latest version from the front page. Extract the downloaded zip and we get a directory named wordpress that contains WordPress software. Copy the wordpress directory to the application repository.
Change to application repository and rename the directory wordpress as php with the move command.


C:> cd quickstart
C:> move <path-to>\wordpress .
C:> move wordpress php


$ cd quickstart
$ mv <path-to>/wordpress .
$ mv wordpress php

WordPress uses a file named wp-config.php to store the WordPress configurations like database connection properties, etc. To create this file, change to php directory and copy the WordPress supplied wp-config-sample.php to wp-config.php.


C:> cd php
C:> copy  wp-config-sample.php  wp-config.php


$ cd php
$ cp wp-config-sample.php  wp-config.php

We need to make some changes to the Sample Config file. Edit the wp-config.php and modify MySQL settings as shown in next snippet.


// ** 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 */

/** MySQL database password */

/** MySQL hostname */
define('DB_HOST', getenv('OPENSHIFT_MYSQL_DB_HOST') . ':' . getenv('OPENSHIFT_MYSQL_DB_PORT'));

In the WP Config file, we also need to enter some unique phrases for the items in Authentication Keys and Salts section. Remove the lines shown in the next screenshot from the WP Config file.

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

We can get random unique keys and salts from WordPress Org. Open WordPress API in a browser tab, which generates and displays random keys and salts. Copy the contents, paste it to the WP Config file’s and save the changes.
Use git status to check the pending changes and then add the php directory and its content to the Git repository.

Window and Linux

C:> cd quickstart        // change to application source dir created by Git clone
C:> git status
C:> git add php

Finally, we need to commit the changes to the repository.

Window and Linux

C:> git commit -am "WordPress software added"

For a better understanding, let’s recap the items we did so far.
  • With Git, we clone the OpenShift PHP application repository to a local repository in our PC.
  • Download the WordPress Software and copy the extracted wordpress directory to the application repository and renamed the directory as php.
  • Create wp-config.php file and modify its parameters for OpenShift.
  • Finally, we add all the changes to Git and commit the changes.
So far, all the changes are made in the local repository. Next, we need to push the changes back to the remote repository that is in OpenShift.

Window and Linux

C:> git push

Git compresses and pushes the change objects – new php directory and its content – to the application repository in the OpenShift application. Git push takes some time to complete as it has to transfer about 35 MB. After updating the OpenShift repository, Git also restarts the OpenShift application and MySQL database as part of the deployment cycle. Our new WordPress application is ready, but before proceeding to WordPress installation, we need to make one crucial change to WordPress structure that is specific to OpenShift.
Move wp-content directories

WordPress places themes, plugins and upload files in three separate directories under its wp-content directory. In OpenShift, Git deploys the application in directory app-root/repo. The php directory that contains WordPress software goes into this directory. The WordPress directory structure in OpenShift is shown in the screenshot.

OpenShift WordPress Install Source - WordPress Directory Structure
By default, whenever we install a new theme it installs in app-root/repo/php/wp-content/themes. Plugins and uploads are treated similarly. That leads to a problem in OpenShift. When we make some changes to the application repository and push the changes to OpenShift, Git overwrites the php directory with the new version. Obviously the items that WordPress installs under wp-content are lost.
To overcome this problem, we have to move wp-content directories to app-root/data so that they are not overwritten during deployment.
We use Git action hook feature to link wp-content directories to app-root/data directories. Open command prompt and change to the local Git repository. Delete plugins, themes and uploads directory from php/wp-content.


C:> cd quickstart
C:> cd php\wp-content
C:> rmdir plugins themes uploads /s


$ cd quickstart
$ cd php/wp-content
$ rm -rf plugins themes uploads

Next add a file named build to quickstart/.openshift/action_hooks with following contents.

ln -sf $OPENSHIFT_DATA_DIR/uploads $OPENSHIFT_REPO_DIR/php/wp-content/uploads
ln -sf $OPENSHIFT_DATA_DIR/plugins $OPENSHIFT_REPO_DIR/php/wp-content/plugins
ln -sf $OPENSHIFT_DATA_DIR/themes $OPENSHIFT_REPO_DIR/php/wp-content/themes

Commit the change to Git local repository with following commands.


C:> cd quickstart
C:> git add .openshift\action_hooks\build
C:> git update-index --chmod=+x .openshift\action_hooks\build
C:> git commit -am "Build script added"


$ cd quickstart
$ chmod 755 .openshift/action_hooks/build
$ git add .openshift/action_hooks/build
$ git commit -am "Build script added"

Finally, push the changes back to OpenShift repository.

Windows and Linux

C:> git push

Git executes build file after it deploys the new version of the application. In the build script, we create three links in php/wp-content which points to directories in app-root/data so that themes, plugins and uploads files lands in app-root/data instead of repo/php/wp-content.
Next we need to create three directories in app-root/data. To create the directories, log in to OpenShift Shell and execute the following commands.

> cd app-root/data
> mkdir plugins themes uploads

With that WordPress source deployment is over, and WordPress is ready for installation. Complete the installation and settings explained in Chapter 2, WordPress Installation