Step 0: Have an app
Create an empty app if you dont have one
Create a folder,
cd into it and initialize your git repo.
$ mkdir <app_name>; cd <app_name>; git init
Step 1: Install Heroku
heroku cli with
$ brew install heroku/brew/heroku
Check your heroku installation and login if necessary:
$ heroku --version
Note: heroku will check for the latest version every* time you run the command
$ heroku login
$ heroku login -i to stay in your CLI
Check what apps you have already created:
$ heroku apps
Step 2: Create a new named heroku app
$ heroku create <app_name>
If you run this command with the <app_name> heroku will choose a new random name for you.
In the picture above, https://theptrk.herokuapp.com is the new url for your blank app.
* this is the default site for your new app that sends a 502 HTTP code
Check that your app has been created
$ heroku apps
Step 3: Initialize your app to your heroku git url*
* If you ran
heroku create in your app directly this step will be done automatically.
Check this by checking for a remote named
$ git remote -v
If you dont see heroku, continue with this step.
“””With Github you might be used to using the word
origin to mean your Github url, but the convention for heroku is to name this remote “heroku”. Note that this remote name is completely arbitrary and has nothing to do with the platform or url or anything.”””
git remote --verbose to check if you have any remote urls set up. There should be none
Get your apps “info” with
$ heroku info <app_name>
With your git url add your remote:
$ git remote add heroku <git_url>
$ git push --set-upstream heroku master
* Notice that once you set this and push, you no longer need to specify the
** Note that heroku commands return different things depending on where you are.
Step 4: Set up node.js, install express.js
This file will be used by node/npm to indicate meta data, dependencies and other project level info
$ npm init
$ npm install express --save
Set the node version
package.json to the one on your local machine.
You can check your local version with
$ node --version
// use your local version to stay consistent
// if you want to push a newer node version, update your local node version
// use nvm for the best way to handle local node versions
Create a “start” script
This is the script which is run whenever the command
npm start is run.
Heroku will use this “start’ script as the default script if no
Procfile is found.
"start": "node index.js"
curl express hello world (link)
curl -L https://bit.ly/express-hello-world > index.js
Run this server locally with
$ heroku local web or
$ npm start
Check out your website at http://localhost:5000/
At this point, you can
git push heroku master
Step 5: Installing PostgreSQL instance for your app
Postgres instances are created and assigned to individual apps as “add-ons”.
Use this command to see all your existing add-ons.
$ heroku addons
** Note that
heroku addons performs differently depending on where you are. If heroku recognizes that you are in a heroku app, it will only show you the add-ons for only that app.
cd to a directory that is not a heroku app (say your home directory) and heroku will show you all add-ons for your account.
Create your PostgreSQL instance:
$ heroku addons:create heroku-postgresql:hobby-dev --app=<app_name>
Get more info with:
$ heroku pg:info*
* if you navigated to a different directory, you may need to specify the app like this
heroku pg:info --app theptrk
Congrats! You now have a heroku app instance and PostgreSQL instance.
Connecting to your PostgreSQL instance:
If you want to connect your app to your db, note that heroku automatically created a
DATABASE_URL config variable for you. Type
heroku config to see your current config variables. You can access this variable with
process.env.DATABASE_URL in your application code.
Updated: added heroku login command; Mark Lewin suggested