Step 1: Create a Procfile with the following line: web: npm run start:prod
. We do this because Heroku runs npm run start
by default, so we need this setting to override the default run command.
Step 2: Install the Node.js buildpack for your Heroku app by running the following command: heroku buildpacks:set https://github.com/heroku/heroku-buildpack-nodejs#v133 -a [your app name]
. Make sure to replace #v133
with whatever the latest buildpack is, which you can find here.
Step 3: Follow the standard Heroku deploy process:
git add .
git commit -m 'Made some epic changes as per usual'
git push heroku master
Step 1: Run npm install
to install dependencies, then npm run build
to create the ./build
folder.
Step 2: Navigate to AWS S3 and login (or sign up if you don't have an account). Click on Services
followed by S3
in the dropdown.
Step 3: Click on Create Bucket
and fill out both your Bucket Name
and Region
(for the USA we recommend US Standard
). Click Create
to create your bucket.
Step 4: Open the Permissions
accordion on the right (under the Properties
tab) after selecting your new bucket. Click Add more permissions
, set the Grantee
to Everyone
(or whoever you want to be able to access the website), and give them View Permissions
. Click Save
.
Step 5: Click on the Static Website Hosting
accordion where you should see the URL (or endpoint) of your website (ie. example.s3-website-us-east-1.amazonaws.com). Click Enable website hosting
and fill in both the Index document
and Error document
input fields with index.html
. Click Save
.
Step 6: Click on your new S3 bucket on the left to open the bucket. Click Upload
and select all the files within your ./build
folder. Click Start Upload
. Once the files are done, select all of the files, right-click on the selected files (or click on the Actions
button) and select Make Public
.
Step 7: Click on the Properties
tab, open Static Website Hosting
, and click on the Endpoint link. The app should be running on that URL.
Suppose you want users to access the app on https://<host>/web-app
Step 1: Configure webpack to inject necessary environment variables into the app
- Changes below are made to
internals/webpack/webpack.base.babel.js
file.
+ const BUILD_FOLDER_PATH = process.env.BUILD_FOLDER_PATH || 'build';
+ const PUBLIC_PATH = process.env.PUBLIC_PATH || '/';
- path: path.resolve(process.cwd(), 'build'),
- publicPath: '/',
+ path: path.resolve(process.cwd(), BUILD_FOLDER_PATH),
+ publicPath: PUBLIC_PATH,
# inside EnvironmentPlugin
+ PUBLIC_PATH: '/',
Step 2: add basename
to the history
- Changes below are made to
app/utils/history.js
file.
- const history = createHistory();
+ const basename = process.env.PUBLIC_PATH;
+ const history = createHistory({ basename });
Step 3: Run PUBLIC_PATH='/web-app/' BUILD_FOLDER_PATH='build/web-app' npm run build
, to save production build inside ./build/web-app
folder.
Step 4: Upload/Place the created web-app
folder in your server's web-root folder
Endpoint The app should be accessible on https://<host>/web-app
.
NOTE that this has been tested on both APACHE and NGINX servers.
Please refer to to issue #2566 for more explanation.
- Create an account on AWS console
- Install EB CLI (AWS documentation)
- Create your AWS EB profile. In case you are using a continous deployment tool, you can create another user for your CD tool as well.
- Create your Elastic Beanstalk application and environment (either via CLI or web console)
- Configure your EB CLI. You should have a
.elasticbeanstalk/config.yml
if properly configured
Step 1: Add AWS EB start scripts in package.json: "aws-eb:prod": "npm run build && npm run start:prod"
Step 2: Create a .ebextensions/aws.config
file:
# Check https://github.com/react-boilerplate/react-boilerplate/issues/2566 for details
option_settings:
aws:elasticbeanstalk:container:nodejs:
NodeCommand: 'npm run aws-eb:prod'
aws:elasticbeanstalk:application:environment:
NPM_USE_PRODUCTION: false
In the likely case of multiple environment, remove the NodeCommand
entry and
manually configure it per environment in the web console: Configuration > Software > Node command.
Step 3: Create a .npmrc
file:
# Check https://github.com/react-boilerplate/react-boilerplate/issues/2566 for details
unsafe-perm=true
Step 4: commit your changes and deploy via EB CLI:
eb deploy {target environment name}