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.