React is an open-source JavaScript library used for building interactive user interfaces for web and mobile applications. It uses a virtual browser to act as an agent between a developer and a real browser. React was created and is maintained by Facebook, but is now used by many companies around the world. React consists of compiled HTML, CSS, and JavaScript files and is often used as a frontend for more complex applications.
In this tutorial, we will show you how to deploy React.js on Ubuntu 20.04.
Step 1 – Install Nodejs
React App is a JavaScript library, so Node.js must be installed in your server. By default, the latest version of Node.js is not available in the Ubuntu standard repository, so you will need to install it from NodeSource.
First, install the necessary dependencies using the following command.
apt-get install -y ca-certificates curl gnupg
Next, download the Node.js GPG key.
mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
Next, add the NodeSource repo to the APT source list.
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
Then, update the repository index and install the Ndoe.js with the following command.
apt update apt-get install -y nodejs
Once Node.js is installed, update the NPM to the latest version using the following command:
npm install npm@latest -g
You can now verify the installed version of Node.js with the following command:
node -v
You should get the following output:
v18.19.0
Step 2 – Create a New Reactjs App
First, you will need to install the create-react-app tool to create a new project in React. You can install it using the following command:
npm install -g create-react-app
You should get the following output:
/usr/bin/create-react-app -> /usr/lib/node_modules/create-react-app/index.js + [email protected] added 67 packages from 25 contributors in 3.605s
Next, create a new project with the following command:
create-react-app awesome-project
You should see the following output:
Success! Created awesome-project at /root/awesome-project Inside that directory, you can run several commands: npm start Starts the development server. npm run build Bundles the app into static files for production. npm test Starts the test runner. npm run eject Removes this tool and copies build dependencies, configuration files and scripts into the app directory. If you do this, you can’t go back! We suggest that you begin by typing: cd awesome-project npm start Happy hacking!
Once your project is created, change the directory to your project and start the application with the following command:
cd awesome-project npm start
You should get the following output:
Compiled successfully! You can now view awesome-project in the browser. http://localhost:3000 Note that the development build is not optimized. To create a production build, use npm run build.
Press CTRL+C to stop the application.
Step 3 – Create a Systemd Service File for React App
Next, you will need to create a systemd service file to manage the React service. You can create it with the following command:
nano /lib/systemd/system/react.service
Add the following lines:
[Service] Type=simple User=root Restart=on-failure WorkingDirectory=/root/awesome-project ExecStart=npm start -- --port=3000
Save and close the file, then reload the systemd daemon with the following command:
systemctl daemon-reload
Next, start the React service and enable it to start at system reboot:
systemctl start react systemctl enable react
You can verify the status of the React service with the following command:
systemctl status react
You should get the following output:
-
react.service
Loaded: loaded (/lib/systemd/system/react.service; static; vendor preset: enabled) Active: active (running) since Sun 2020-12-06 10:11:04 UTC; 5s ago Main PID: 18556 (node) Tasks: 30 (limit: 4691) Memory: 170.0M CGroup: /system.slice/react.service ├─18556 npm ├─18583 sh -c react-scripts start "--port=3000" ├─18584 node /root/awesome-project/node_modules/.bin/react-scripts start --port=3000 └─18591 /usr/bin/node /root/awesome-project/node_modules/react-scripts/scripts/start.js -- port=3000 Dec 06 10:11:04 ubuntu2004 systemd[1]: Started react.service. Dec 06 10:11:04 ubuntu2004 npm[18556]: > [email protected] start /root/awesome-project Dec 06 10:11:04 ubuntu2004 npm[18556]: > react-scripts start "--port=3000" Dec 06 10:11:07 ubuntu2004 npm[18591]: ℹ 「wds」: Project is running at http://0.0.0.0:3000/ Dec 06 10:11:07 ubuntu2004 npm[18591]: ℹ 「wds」: webpack output is served from Dec 06 10:11:07 ubuntu2004 npm[18591]: ℹ 「wds」: Content not from webpack is served from /root/awesome-project/public Dec 06 10:11:07 ubuntu2004 npm[18591]: ℹ 「wds」: 404s will fallback to / Dec 06 10:11:07 ubuntu2004 npm[18591]: Starting the development server...
Step 4 – Configure Nginx as a Reverse Proxy
At this point, your React App is started and listening on port 3000. Next, you will need to configure Nginx as a reverse proxy to access the React App through port 80.
First, install the Nginx web server with the following command:
apt-get install nginx -y
Once installed, create a new Nginx virtual host configuration file:
nano /etc/nginx/conf.d/react.conf
Add the following lines:
upstream react_backend { server localhost:3000; } server { listen 80; server_name react.example.com; location / { proxy_pass http://react_backend/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header X-Forward-Proto http; proxy_set_header X-Nginx-Proxy true; proxy_redirect off; } }
Save and close the file then restart the Nginx service to apply the changes:
systemctl restart nginx
Step 5 – Access Reactjs Web UI
Now, open your web browser and access the React App using the URL http://react.example.com. You should see your React Application in the following screen:
Conclusion
Congratulations! You have successfully installed and deployed React App with Nginx as a reverse proxy on Ubuntu 20.04. You can now start exploring React App for more features. Try out React.js on dedicated server hosting from Atlantic.Net!