Deploy your React app on Heroku
井民全, Jing, mqjing@gmail.com
Here, I'll show you how to deploy a HelloWorld nodejs app on Heroku. A React app deployment also includes forming a useful guide. For a free dyno, the container running your app sleeps after 30 mins of inactivity [1]. However, it's enough to give a trial to test your idea.
Enjoy!
By Jing.

Table of contents
1. Setup the environment 6
2. Sample Project 6
2.1. Prepare the sample project 6
2.2. Deploy the project 6
2.3. Visit your app 9
2.4. Log 10
3. Hello word 11
3.1. Modify Code 11
3.2. Commit to the local repository 11
3.3. Deploy to heroku 11
3.4. Visit your app 12
4. React app 12
4.1. Create the client 12
4.2. Link to the express 12
4.3. Deploy to heroku 13
4.4. Visit your React app 13
4.5. Delpy Log 14
5. References 14
6. FAQ 14
Quick
Sample Code
# Setup CLI sudo snap install heroku --classic heroku login
# Prepare your project git clone https://github.com/heroku/node-js-getting-started.git cd node-js-getting-started
# Deploy heroku create # Create a heroku project associate to your project git push heroku main # Deploy the project heroku open # Visit your app
# Log heroku logs --tail
|
Deploy React app
mkdir client cd client npx create-react-app my-app --template typescript # create a React sample application
yarn build # bundle the react client
# Link to the Express const express = require('express') const path = require('path') const PORT = process.env.PORT || 5000 const app = express(); // mount the static middleware to the client path app.use(express.static(path.join(__dirname, 'client/my-app/build')));
// route the index.html to the client index.html app.get('/', function (req, res) { res.sendFile(path.join(__dirname, 'client/my-app/build/index.html')); }); app.listen(PORT, () => console.log(`Listening on ${ PORT }`));
|
# Deploy git add -f client/my-app/build # The React bundle client git add client/my-app git commit -m 'Add React client' git push heroku main # Deploy
# Visit the React app heroku open
# Log heroku logs --tail 
|
Detail
1. Setup the environment
Step 1: Install the CLI tool
sudo snap install heroku --classic |
Step 2: Log in to the Heroku CLI
2. Sample Project
2.1. Prepare the sample project
Step 1: Clone the sample project
git clone https://github.com/heroku/node-js-getting-started.git |
2.2. Deploy the project
To deploy your project to the heroku server, you can use the command heroku create that will generates a random name for your app.
Step 1: Create a heroku project associate to your project
cd node-js-getting-started heroku create |

Fig. Create a heroku project associates to your project.
Verify
https://dashboard/heroku.com/apps

Fig. Check the created project.
Check out the branch status.
Command
git branch -a

Fig. The branch status.
Check out the git config status
Command
cat .git/config
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/heroku/node-js-getting-started.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "main"] remote = origin merge = refs/heads/main [remote "heroku"] url = https://git.heroku.com/desolate-brook-83056.git fetch = +refs/heads/*:refs/remotes/heroku/*
|
Step 2: Deploy to heroku
Just push your code to the remote repository heroku with main branch. The heroku server will do the rest tasks.
git push heroku main # push the code to the main branch in repository remotes/heroku |

Fig. Depoy your project by git push.
2.3. Visit your app

Fig. The sample project.
2.4. Log
3. Hello word
3.1. Modify Code
File: views/pages/index.ejs
<!DOCTYPE html> <html> <head> <%- include ("../partials/header.ejs") %> </head>
<body>
<%- include ("../partials/nav.ejs") %>
Hello World.
</body> </html>
|
3.2. Commit to the local repository
git add views/pages/index.ejs git commit -m "Hello world" |
3.3. Deploy to heroku
3.4. Visit your app

Fig. Hello World on heroku server.
4. React app
4.1. Create the client
# create a React sample application mkdir client cd client npx create-react-app my-app --template typescript
# test the react cd my-app npm start
# bundle the react client yarn build # it will generate a folder named ./build |
4.2. Link to the express
File: index.js
const express = require('express') const path = require('path') const PORT = process.env.PORT || 5000 const app = express(); // mount the static middleware to the client path app.use(express.static(path.join(__dirname, 'client/my-app/build')));
// route the index.html to the client index.html app.get('/', function (req, res) { res.sendFile(path.join(__dirname, 'client/my-app/build/index.html')); }); app.listen(PORT, () => console.log(`Listening on ${ PORT }`));
|
4.3. Deploy to heroku
# The React bundle client git add -f client/my-app/build
# [Option] whole React source (nevermind the node_modules, it will be skipped) git add client/my-app
git commit -m 'Add React client'
# Deploy git push heroku main |
4.4. Visit your React app

Fig. The React app.
4.5. Delpy Log
5. References
https://www.heroku.com/pricing
https://devcenter.heroku.com/articles/getting-started-with-nodejs#set-up
6. FAQ
[cloud, main] The Cloud FAQ
[frontend, main] The React, Angular, WebAPI, Chart FAQ
[backend] The NodeJS, Express, Koa, Web FAQ
| cate | l1 | l2 | item | note | status | misc |
| dyno | management | | Q: CLI commands
| | 1 | |
| log | | heroku logs | | 1 | |
| restart | | heroku restart worker.1 | | 1 | |
| dyno | lifecycle | recycle | Q: 系統 docker 何時 recycle? => create a new release by deploying new code change your config vars change your add-ons run heroku restart
Dynos are also restarted (cycled) at least once per day | | 1 | |
| dyno | recycle | manual | Q: 手動 recycle => heroku ps:restart | | 1 | |
| dyno | recycle | effect | Q: recyclce 會怎樣? => local filesystem will be deleted. | | 1 | |
| dyno | network | subnet | Q: subnet range for a dyno? => each dyno will be part of a /30 private subnet in the range 172.16.0.0/12, such as 172.16.83.252/30 or 172.30.239.96/30. | | 1 | |
| project | deploy | | Q: 一定要用 git 嗎? => Yes, the heroku deploy system requires gitt. | | 1 | |
| project | deploy | | Q: heroku 利用 git 的 deploy 機制為何? => use a remote branch named heroku | | 1 | |
| project | deploy | | Q: How to create a remote branch for heroku deploy? => heroku git:remote -a your-app-name | | 1 | |
| project | deploy | | Q: 如何 deploy 你的 project 到 heroku? => push 到 heroku 的 main branch Command git push heroku main
or
Command git push heroku current-branch:main
ex: git push heroku testbranch:main | | 1 | |
| project | limit | size | Q: repository size limination? => 600MB | | 1 | |
| app | Remove | | Q: How to remove a project | | | |
| app | Start | start command | Q: How to start your program on heroku server? => Procfile | | 1 | |
| app | Start | port | Q: Which port can used to listen ? => app.listen(process.env.PORT);
ex: let port = process.env.PORT; if (port == null || port == "") { port = 8000; } app.listen(port); | | 1 | |
| app | runing | storage | | | 1 | |