Categories
Uncategorized

WordPress 5 on Heroku

I started off using mhoofman/wordpress-heroku. One gotcha from there is that the PostgreSQL plugin does not work.  Here’s what worked for me on my Ubuntu 18.10 desktop.

Dependencies

wget, git, and heroku-cli

$ sudo apt install git wget git
$ sudo snap install --classic heroku
Get WordPress

Download from https://wordpress.org/download/, extract, move wp-config-sample.php to wp-config.php.

$ wget https://wordpress.org/latest.tar.gz
$ tar xzvf latest.tar.gz
$ cd wordpress
$ mv wp-config-sample.php wp-config.php

I then made the following edits to wp-config.php  This allows all parameters to be set via ‘heroku config:set’.  The first block is used to configure the WP Offload Media Lite plugin.

define( 'AS3CF_SETTINGS', serialize( array(
    'provider' => 'aws',
    'access-key-id' => getenv('AWS_ACCESS_KEY_ID'),
    'secret-access-key' => getenv('AWS_SECRET_ACCESS_KEY'),
) ) );

Now get and parse the MySQL connection.

$url = parse_url(getenv('CLEARDB_DATABASE_URL'));

define('DB_NAME', trim($url['path'], '/'));
define('DB_USER', $url['user']);
define('DB_PASSWORD', $url['pass']);
define('DB_HOST', $url['host']);

Finally, define authentication keys and salts.

define('AUTH_KEY',         getenv('AUTH_KEY'));
define('SECURE_AUTH_KEY',  getenv('SECURE_AUTH_KEY'));
define('LOGGED_IN_KEY',    getenv('LOGGED_IN_KEY'));
define('NONCE_KEY',        getenv('NONCE_KEY'));
define('AUTH_SALT',        getenv('AUTH_SALT'));
define('SECURE_AUTH_SALT', getenv('SECURE_AUTH_SALT'));
define('LOGGED_IN_SALT',   getenv('LOGGED_IN_SALT'));
define('NONCE_SALT',       getenv('NONCE_SALT'));
Download and install plugins and themes.

I added the following plugins. Unpack each into the ‘/wp-content/plugins’ directory.

Do the same with desired theme, unpacking to ‘/wp-content/themes’.

Initialize git repository and create Heroku app

The base code, plugins, and themes are in place. wp-config.php created and modified.  Now initialize a git repository and create an App on Heroku.com.

$ git init .
$ heroku create
Add MySQL and Sendgrid
$ heroku addons:create cleardb
$ heroku addons:create sendgrid
Now set those configuration variables

You’ll need your AWS Access Keys.

$ heroku config:set AWS_ACCESS_KEY_ID
$ heroku config:set AWS_SECRET_ACCESS_KEY

Authentication keys and salts must also be configured.  Do it one-by-one, or script it.

$ heroku config:set AUTH_KEY:a-strong-password
$ heroku config:set SECURE_AUTH_KEY:another-strong-password

Continue for all the keys and salts.

That’s it! Deploy and then configure your site and the plugins from WordPress itself.
$ git checkout -b production
$ git push heroku production:master

Point your web browser to Heroku’s App URL.  You should then get WordPress’s famous five-minute install. You can see my resulting code at terryg/wordpress-heroku.

Leave a Reply

Your email address will not be published. Required fields are marked *