How to deploy create-react-app in AWS EC2
You can build and deploy the React.js app in any cloud VM (Virtual Machine) like ec2 with custom port.
By using it you can deploy multiple react applications on the same machine.
What do you need to deploy the application?
1. Nodejs
2. PM2js
3. Koa.js
4. Koa-static.js
You just need to flow this procedure.
- In your project run this command
npm run build
. - It will create a build folder in your project.
- Create zip of the project folder and move it on your VM (ec2) and extract that.
- Create a Nodejs script file in your project root folder and paste a below script in it.
Filename: buildStart.js
const httpPort = 80;
const httpsPort = 443;
const koa = require( 'koa' );
const serve = require( 'koa-static' );
const http = require( 'http' );
const https = require( 'https' );
const fs = require( 'fs' );
const app = new koa();
const cert = fs.readFileSync( '/ssl/cert.crt' );
const key = fs.readFileSync( '/ssl/private.key' );
app.use( serve( __dirname + '/build', {
maxage: 365 * 24 * 60 * 60
} ) );
http.createServer( app.callback() ).listen( httpPort, () => console.log( `sever is listening on ${httpPort}` ) );
https.createServer( { cert, key }, app.callback() ).listen( httpsPort, () => console.log( `sever is listening on ${httpsPort}` ) );
OR
The above code will start your react application on both HTTP and HTTPS. if you don't have certificates for https then you can only start it for HTTP.
const httpPort = 80;
const httpsPort = 443;
const koa = require( 'koa' );
const serve = require( 'koa-static' );
const http = require( 'http' );
const https = require( 'https' );
const fs = require( 'fs' );
const app = new koa();
app.use( serve( __dirname + '/build', {
maxage: 365 * 24 * 60 * 60
} ) );
http.createServer( app.callback() ).listen( httpPort, () => console.log( `sever is listening on ${httpPort}` ) );
You can use Amazon S3.
Do npm run build in your local instance.
Upload the files to S3 bucket instance.
Static website hosting can be chosen.
https://s3.console.aws.amazon.com/s3/buckets
I'm a little bit new to React, but I wanna add my experience here. I deployed my CRA app on AWS EC2 using Apache.
- You follow this link to install Apache after launching the EC2 instance.
- Build your react app and upload 'build' folder.
Now done. Finally, make sure to use HashRouter rather than BrowserRouter. Because EC2 didn't allow the .htaccess file to redirect all requests to index.html, but replacing BrowserRouter with HashRouter helped me solve that issue. Hope this helps others save the time. Thanks.
https://medium.com/@spiromifsud/deploying-an-amazon-ec2-build-server-for-reactjs-with-jenkins-and-github-3195d2242aae
I deployed my app on EC2 with the help of the above mentioned link. This link also helped -
https://medium.com/@sgobinda007/setting-up-react-redux-application-for-production-and-hosting-in-aws-ec2-8bbb8bf3c643