Mean.io on Dokku
Here’s how I set up the Mean.io stack for deployment with Dokku.
-
Set up MongoDB on the Dokku host and create a database. I used Jeff Utter’s single container plugin for this.
$ dokku mongodb:start $ dokku mongodb:create <app> <database> $ dokku mongodb:link <app> <database> -
Modify
config/env/production.jsto use ENV var for MongoDB URL:'use strict'; module.exports = { db: process.env.MONGO_URL, // [REST OF FILE ELIDED] -
Configure the application to run in the production environment:
$ dokku config:set <app> NODE_ENV=production -
Set the unsafe-perm npm configuration option to allow npm to operate under the root account. More information here. Create
.npmrcas follows:unsafe-perm = true -
Configure a buildpack which supports Grunt in
.env:BUILDPACK_URL=https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt.git -
Add Heroku build task without environment to
Gruntfile.jssince Dokku doesn’t read config during build steps:// [REST OF FILE ELIDED] // For Heroku users only. // Docs: https://github.com/linnovate/mean/wiki/Deploying-on-Heroku grunt.registerTask('heroku:production', ['cssmin', 'uglify']); // Dokku does not set ENV vars during build steps: grunt.registerTask('heroku:', ['cssmin', 'uglify']); };