Cómo instalar Next.js en Ubuntu 22.04
Next.js es una aplicación React gratuita, de código abierto y apta para producción que te proporciona bloques de construcción para crear aplicaciones web superrápidas y extremadamente fáciles de usar. Está creada por Vercel y permite crear aplicaciones web basadas en React con renderizado del lado del servidor y generar sitios web estáticos. Next.js puede gestionar todas las configuraciones necesarias para React y proporciona funciones adicionales y optimizaciones para tu aplicación.
Este tutorial te mostrará cómo instalar Next.js con Nginx como proxy inverso en Ubuntu 22.04.
Requisitos previos
- Un servidor que ejecute Ubuntu 22.04.
- Un nombre de dominio válido apuntando a la IP de tu servidor.
- Una contraseña de root configurada en el servidor.
Instalar Node.js
Antes de empezar, Node.js debe estar instalado en tu servidor. Primero, instala todas las dependencias necesarias utilizando el siguiente comando:
apt install curl gnupg2 wget -y
A continuación, añade el repositorio de Node.js con el siguiente comando:
curl -sL https://deb.nodesource.com/setup_18.x | bash -
Una vez añadido el repositorio, puedes instalar Node.js utilizando el siguiente comando:
apt install nodejs -y
Tras la instalación, verifica la versión de Node.js utilizando el siguiente comando:
node -v
Deberías ver la siguiente salida:
v18.12.1
También puedes verificar la versión de NPM utilizando el siguiente comando:
npm -v
Deberías ver la siguiente salida:
8.19.2
Crear una aplicación Next.js
Puedes utilizar la herramienta npx para crear una aplicación Next.js. npx es una herramienta CLI que facilita la instalación y gestión de dependencias alojadas en el registro npm.
Ejecuta el siguiente comando para crear una aplicación Next.js llamada nextapp:
npx create-next-app nextapp
Deberías obtener la siguiente salida:
Need to install the following packages: [email protected] Ok to proceed? (y) y ? Would you like to use TypeScript with this project? … No / Yes ? Would you like to use ESLint with this project? … No / Yes Creating a new Next.js app in /root/nextapp. Using npm. Installing dependencies: - react - react-dom - next - typescript - @types/react - @types/node - @types/react-dom - eslint - eslint-config-next added 237 packages, and audited 238 packages in 20s 78 packages are looking for funding run `npm fund` for details found 0 vulnerabilities Initializing project with template: default Success! Created nextapp at /root/nextapp
Una vez que hayas terminado, puedes continuar con el siguiente paso.
Ejecutar una aplicación Next.js
Después de crear una aplicación Next.js, cambia el directorio a nextapp y ejecútala con el siguiente comando:
cd nextapp npm run dev
Obtendrás la siguiente salida:
> [email protected] dev > next dev ready - started server on 0.0.0.0:3000, url: http://localhost:3000 event - compiled client and server successfully in 3.2s (154 modules) Attention: Next.js now collects completely anonymous telemetry regarding usage. This information is used to shape Next.js' roadmap and prioritize features. You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL: https://nextjs.org/telemetry
Pulsa CTRL+C para detener la aplicación. A continuación, construye la aplicación con el siguiente comando:
npm run build
Obtendrás el siguiente resultado:
> [email protected] build > next build info - Linting and checking validity of types info - Creating an optimized production build info - Compiled successfully info - Collecting page data info - Generating static pages (3/3) info - Finalizing page optimization Route (pages) Size First Load JS ? ? / 4.83 kB 83.7 kB ? ? css/ae0e3e027412e072.css 707 B ? /_app 0 B 78.9 kB ? ? /404 212 B 79.1 kB ? λ /api/hello 0 B 78.9 kB + First Load JS shared by all 79.2 kB ? chunks/framework-0f397528c01bc177.js 45.7 kB ? chunks/main-5cebf592faf0463a.js 31.8 kB ? chunks/pages/_app-05f53d08443c56f6.js 402 B ? chunks/webpack-2369ea09e775031e.js 1.02 kB ? css/ab44ce7add5c3d11.css 247 B λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps) ? (Static) automatically rendered as static HTML (uses no initial props)
A continuación, inicia la aplicación Next.js utilizando el siguiente comando:
npm start
Deberías ver la siguiente salida:
> [email protected] start > next start ready - started server on 0.0.0.0:3000, url: http://localhost:3000
Pulsa CTRL+C para detener la aplicación.
Gestionar la aplicación Next.js con PM2
PM2 es un gestor de procesos avanzado para aplicaciones Node.js de producción. Te permite mantener vivas las aplicaciones para siempre.
Para instalar el PM2, ejecuta el siguiente comando:
npm install pm2@latest -g
A continuación, inicia tu aplicación Next.js utilizando el PM2 ejecutando el siguiente comando:
pm2 start "npm start"
Obtendrás la siguiente salida:
[PM2] Starting /usr/bin/bash in fork_mode (1 instance) [PM2] Done. ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu ? mem ? user ? watching ? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? 0 ? npm start ? default ? N/A ? fork ? 1321 ? 0s ? 0 ? online ? 0% ? 24.5mb ? root ? disabled ? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
En este punto, la aplicación Next.js está iniciada y escucha en el puerto 3000. Puedes comprobarlo con el siguiente comando:
ss -antpl | grep 3000
Verás la siguiente salida:
LISTEN 0 511 0.0.0.0:3000 0.0.0.0:* users:(("node",pid=1337,fd=18))
También puedes comprobar el estado de tu aplicación Next.js con el siguiente comando:
pm2 show "npm start"
Obtendrás la siguiente salida:
Describing process with id 0 - name npm start ??????????????????????????????????????????????????????????? ? status ? online ? ? name ? npm start ? ? namespace ? default ? ? version ? N/A ? ? restarts ? 0 ? ? uptime ? 59s ? ? script path ? /usr/bin/bash ? ? script args ? -c npm start ? ? error log path ? /root/.pm2/logs/npm-start-error.log ? ? out log path ? /root/.pm2/logs/npm-start-out.log ? ? pid path ? /root/.pm2/pids/npm-start-0.pid ? ? interpreter ? none ? ? interpreter args ? N/A ? ? script id ? 0 ? ? exec cwd ? /root/nextapp ? ? exec mode ? fork_mode ? ? node.js version ? N/A ? ? node env ? N/A ? ? watch & reload ? ? ? ? unstable restarts ? 0 ? ? created at ? 2022-11-12T13:30:39.734Z ? ??????????????????????????????????????????????????????????? Divergent env variables from local env Add your own code metrics: http://bit.ly/code-metrics Use `pm2 logs npm start [--lines 1000]` to display logs Use `pm2 env 0` to display environment variables Use `pm2 monit` to monitor CPU and Memory usage npm start
Una vez que hayas terminado, puedes proceder a instalar y configurar Nginx.
Configurar Nginx como proxy inverso para la aplicación Next.js
Es una buena idea instalar y configurar Nginx como proxy inverso para acceder a la aplicación Next.js.
Primero, instala el paquete Nginx con el siguiente comando:
apt install nginx -y
Una vez instalado Nginx, crea un archivo de configuración de host virtual Nginx:
nano /etc/nginx/conf.d/next.conf
Añade las siguientes configuraciones:
server { server_name next.example.com; location / { # Reverse proxy for Next server proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; } }
Guarda y cierra el archivo. A continuación, comprueba si el Nginx tiene algún error de configuración sintáctica:
nginx -t
Deberías ver la siguiente salida:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
A continuación, reinicia el servicio Nginx para aplicar los cambios:
systemctl restart nginx
También puedes comprobar el estado de 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 Sat 2022-11-12 13:35:46 UTC; 6s ago Docs: man:nginx(8) Process: 2023 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 2024 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 2025 (nginx) Tasks: 3 (limit: 464122) Memory: 3.3M CGroup: /system.slice/nginx.service ??2025 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;" ??2026 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ??2027 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" Nov 12 13:35:46 ubuntu22041 systemd[1]: Starting A high performance web server and a reverse proxy server... Nov 12 13:35:46 ubuntu22041 systemd[1]: Started A high performance web server and a reverse proxy server.
Una vez que hayas terminado, puedes continuar con el siguiente paso.
Accede a la aplicación web Next.js
Llegados a este punto, la aplicación Next.js está instalada y configurada con Nginx. Ahora puedes acceder a ella utilizando la URL http://next.example.com. Deberías ver la página web de Next.js en la siguiente pantalla:
Conclusión
Enhorabuena! has instalado correctamente la aplicación Next.js con Nginx en Ubuntu 22.04. Ahora puedes acelerar tu proceso de desarrollo utilizando el framework Next.js. No dudes en preguntarme si tienes alguna duda.