Cómo instalar ReactJS con Nginx en Ubuntu 22.04
React.js es un framework JavaScript gratuito y de código abierto desarrollado por Facebook en 2011. Se utiliza para construir componentes de interfaz de usuario reutilizables y ayuda a los usuarios a crear aplicaciones web ricas y atractivas de forma rápida y eficiente con una codificación mínima. Con React, puedes construir una interfaz web interactiva y componer interfaces de usuario complejas a partir de piezas pequeñas y aisladas. Utiliza DOM virtual, que agiliza la aplicación. Proporciona muchas funciones, como DOM virtual, enlace de datos unidireccional, componentes, JSX, declaraciones condicionales y muchas más.
En este tutorial, te mostraremos cómo instalar React.js en Ubuntu 22.04.
Requisitos previos
- Un servidor que ejecute Ubuntu 22.04.
- Nombre de dominio válido apuntado con la IP de tu servidor.
- Una contraseña de root configurada en el servidor.
Cómo empezar
En primer lugar, tendrás que actualizar los paquetes de tu sistema a la última versión. Puedes actualizarlos utilizando el siguiente comando:
apt-get update -y apt-get upgrade -y
Una vez actualizados todos los paquetes, ejecuta el siguiente comando para instalar otras dependencias necesarias:
apt-get install curl gnupg2 -y
Una vez instaladas todas las dependencias, puedes pasar al siguiente paso.
Instalar Node.js
A continuación, tendrás que instalar Node.js en tu servidor. Por defecto, la última versión de Node.js no está disponible en el repositorio estándar de Ubuntu 22.04. Así que tendrás que instalar Node.js desde el repositorio oficial de Node.js.
Primero, añade el repositorio de Node.js con el siguiente comando:
curl -sL https://deb.nodesource.com/setup_18.x | bash -
A continuación, ejecuta el siguiente comando para instalar Node.js en tu sistema:
apt-get install nodejs -y
Tras instalar Node.js, actualiza el NPM a la última versión con el siguiente comando:
npm install npm@latest -g
Deberías obtener la siguiente salida:
removed 14 packages, changed 73 packages, and audited 223 packages in 3s 14 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
A continuación, verifica la versión instalada de Node.js con el siguiente comando:
node -v
Deberías obtener la siguiente salida:
v18.12.1
Una vez que hayas terminado, puedes continuar con el siguiente paso.
Instalar la herramienta Create React App
Create React App es una herramienta CLI que ayuda a los usuarios a ahorrar tiempo de instalación y configuración. Sólo tienes que ejecutar un único comando y Create React App configurará todas las herramientas necesarias para iniciar tu proyecto.
Puedes instalar la herramienta Create React App utilizando el siguiente comando:
npm install -g create-react-app
Una vez que hayas terminado, puedes pasar al siguiente paso.
Crear una aplicación React de ejemplo
En esta sección, crearemos una aplicación React de ejemplo con la herramienta Create React App.
En primer lugar, cambia el directorio a /opt y crea tu primer proyecto con el siguiente comando:
cd /opt create-react-app reactapp
Deberías ver la siguiente salida:
Success! Created reactapp at /opt/reactapp 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 reactapp npm start Happy hacking!
A continuación, cambia el directorio al directorio de tu proyecto e inicia tu aplicación con el siguiente comando:
cd /opt/reactapp npm start
Deberías obtener la siguiente salida:
Compiled successfully! You can now view reactapp in the browser. http://localhost:3000 Note that the development build is not optimized. To create a production build, use npm run build. webpack compiled successfully
Pulsa CTRL+C para detener la aplicación. Crearemos un archivo de servicio systemd para gestionar la aplicación React.
Crear un servicio Systemd para React App
A continuación, tendrás que crear un servicio systemd para tu aplicación React. Puedes crearlo con el siguiente comando:
nano /lib/systemd/system/react.service
Añade las siguientes líneas:
[Service] Type=simple User=root Restart=on-failure WorkingDirectory=/opt/reactapp ExecStart=npm start -- --port=3000
Guarda y cierra el archivo y, a continuación, vuelve a cargar el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicia el servicio React y habilítalo para que se inicie al reiniciar el sistema ejecutando el siguiente comando:
systemctl start react systemctl enable react
Puedes verificar el estado del servicio React con el siguiente comando:
systemctl status react
Deberías obtener la siguiente salida:
? react.service Loaded: loaded (/lib/systemd/system/react.service; static) Active: active (running) since Sun 2022-11-20 11:18:50 UTC; 6s ago Main PID: 76129 (npm start --por) Tasks: 30 (limit: 2242) Memory: 250.9M CPU: 4.663s CGroup: /system.slice/react.service ??76129 "npm start --port=3000" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ??76140 sh -c "react-scripts start --port=3000" ??76141 node /opt/reactapp/node_modules/.bin/react-scripts start --port=3000 ??76148 /usr/bin/node /opt/reactapp/node_modules/react-scripts/scripts/start.js --port=3000 Nov 20 11:18:54 ubuntu2204 npm[76148]: (node:76148) [DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE] DeprecationWarning: 'onAfterSetupMiddl> Nov 20 11:18:54 ubuntu2204 npm[76148]: (Use `node --trace-deprecation ...` to show where the warning was created) Nov 20 11:18:54 ubuntu2204 npm[76148]: (node:76148) [DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE] DeprecationWarning: 'onBeforeSetupMid> Nov 20 11:18:54 ubuntu2204 npm[76148]: Starting the development server... Nov 20 11:18:55 ubuntu2204 npm[76148]: Compiled successfully! Nov 20 11:18:55 ubuntu2204 npm[76148]: You can now view reactapp in the browser. Nov 20 11:18:55 ubuntu2204 npm[76148]: http://localhost:3000 Nov 20 11:18:55 ubuntu2204 npm[76148]: Note that the development build is not optimized. Nov 20 11:18:55 ubuntu2204 npm[76148]: To create a production build, use npm run build. Nov 20 11:18:55 ubuntu2204 npm[76148]: webpack compiled successfully
Una vez que hayas terminado, puedes continuar con el siguiente paso.
Configurar Nginx como Proxy Inverso
Es una buena idea instalar y configurar Nginx como proxy inverso para React App. Así podrás acceder a tu aplicación a través del puerto 80.
En primer lugar, instala el paquete Nginx utilizando el siguiente comando:
apt-get install nginx -y
Una vez instalado Nginx, crea un nuevo archivo de configuración de host virtual Nginx:
nano /etc/nginx/sites-available/reactjs.conf
Añade las siguientes líneas:
upstream backend { server localhost:3000; } server { listen 80; server_name reactjs.example.com; location / { proxy_pass http://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; } }
Guarda y cierra el archivo y, a continuación, habilita el host virtual Nginx con el siguiente comando:
ln -s /etc/nginx/sites-available/reactjs.conf /etc/nginx/sites-enabled/
A continuación, comprueba si Nginx tiene algún error de sintaxis ejecutando el siguiente comando:
nginx -t
Deberías obtener la siguiente salida:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Por último, reinicia el servicio Nginx para aplicar los cambios:
systemctl restart nginx
También puedes verificar el estado del servicio Nginx con el siguiente comando:
systemctl status nginx
Deberías ver la siguiente salida:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-11-20 11:20:17 UTC; 6s ago Docs: man:nginx(8) Process: 76760 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 76762 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 76763 (nginx) Tasks: 2 (limit: 2242) Memory: 2.6M CPU: 32ms CGroup: /system.slice/nginx.service ??76763 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;" ??76764 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" Nov 20 11:20:17 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server... Nov 20 11:20:17 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.
En este punto, Nginx está instalado y configurado para servir a React App. Ahora puedes continuar con el siguiente paso.
Proteger React.js con Let’s Encrypt
A continuación, tendrás que instalar el paquete cliente Certbot para instalar y gestionar el SSL Let’s Encrypt.
Primero, instala Certbot con el siguiente comando:
apt-get install python3-certbot-nginx -y
Una vez finalizada la instalación, ejecuta el siguiente comando para instalar el SSL de Let’s Encrypt en tu sitio web:
certbot --nginx -d reactjs.example.com
Se te pedirá que proporciones una dirección de correo electrónico válida y que aceptes las condiciones del servicio, como se muestra a continuación:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Obtaining a new certificate Performing the following challenges: http-01 challenge for reactjs.example.com Waiting for verification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/fuel.conf
A continuación, elige si deseas o no redirigir el tráfico HTTP a HTTPS, como se muestra a continuación:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Escribe 2 y pulsa Intro para finalizar la instalación. Deberías ver el siguiente resultado:
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/fuel.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://reactjs.example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=reactjs.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/reactjs.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/reactjs.example.com/privkey.pem Your cert will expire on 2023-02-20. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le - We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org.
Ahora, tu aplicación web React.js está protegida con Let’s Encrypt SSL.
Acceder a la interfaz web de React App
Ahora, abre tu navegador web y escribe la URL https://reactjs.example.com. Serás redirigido a la interfaz web de React.Js en la siguiente pantalla:
Conclusión
Enhorabuena! has instalado y configurado correctamente React.Js en el servidor Ubuntu 22.04. Ahora puedes empezar a crear tu propia aplicación basada en React y alojarla en el entorno de producción. No dudes en preguntarme si tienes alguna duda.