Despliega tu proyecto Laravel en un servidor VPS creado en clouding.io

Uno de los temas interesantes y en el que a veces no pensamos mucho al desarrollar un proyecto es: cómo publicar y desplegar nuestro proyecto Laravel de manera que nuestros clientes o usuario puedan acceder fácilmente.

Pues bien, en el contexto de Laravel en particular, es muy importante tener flexibilidad de acceso al sistema donde vayamos a poner nuestro proyecto además de poder instalar y configurar adecuadamente las herramientas necesarias tales como PHP, un servidor web, una base de datos y herramientas particulares como es el caso de Composer, pues resulta que un proyecto Laravel, aunque funciona con PHP, no solo requiere de PHP y un servidor web, sino de Composer para poder obtener e instalar la lista de dependencias (esas librerías que permiten que el framework funcione bien).

Lastimosamente, muchos servicios tradicionales no permiten este tipo de labores, ni nos dan flexibilidad en ello. Muchos aún siguen prefiriendo el uso de hostings compartidos y sistemas basados en FTP. Sin embargo, esos tiempos ya pasaron y debemos adaptarnos y exigir flexibilidad para nuestros proyectos.

Una de las principales "contras" que algunos tienen para no pasarse de un servicio de hosting tradicional es el precio, pero la diferencia de precio entre estos y los sistemas superiores no es grande y la recuperas de sobra con el tiempo y esfuerzo que ahorras, al desplegar un proyecto en un servicio flexible y adecuado.

Así que bien, ahora que sabemos que un sistema de hosting tradicional no es de ayuda, entonces ¿qué opción tenemos?

Opciones adecuadas para desplegar y publicar un proyecto Laravel

Bien, una de las más flexibles y además económicas son los servidores VPS (Virtual Private Server). Un VPS es un servidor virtual que nos permite tener control específico sobre las características y capacidades del mismo, por lo cual podemos acceder a sistemas de capacidades básicas a un muy bajo precio y eso, en general, es más que suficiente para un proyecto tradicional.

Otras opciones también válidas son los servidores dedicados y los servicios avanzados de computación en la nube (tipo Amazon Web Services, Azure, Google Cloud, etc.), pero estos tienden a ser mucho más costosos e incluso más complicados, al punto de resultar casi innecesarios al exceder nuestros requerimientos. Por supuesto, todo depende del tipo de proyecto que estés desplegando, pero en general diría que el 90% de los proyectos en los que trabajamos usualmente no requieren enormes infraestructuras ni sistemas de redundancia en general (a menos que estés construyendo algo para un banco con millones de usuarios :P).

Aparece clouding.io

Por supuesto, existen muchísimos proveedores de VPS y no tienes que usar el que indique. De hecho, la idea es explorar diferentes servicios de VPS en esta serie de artículos, pero en esta ocasión nos vamos a centrar en cómo desplegar tu proyecto Laravel usando un VPS creado en clouding.io

Nota: Todo el proceso detallado en este artículo puedes seguirlo en el video explicativo que he publicado sobre el tema acá.

Todo comienza creando una cuenta con ellos, lo puedes hacer ingresando acá.

Una vez creada la cuenta, como pudiste notar, obtendrás un bono de 5€ el cual te permitirá probar sin costo alguno sus servicios. Por supuesto, para evitar que cualquiera llegue allí a aprovecharse de sus sistemas y usarlos de forma incorrecta, primero deben comprobar la identidad de quienes se registran. Esto es habitual y de hecho es un buen signo del servicio al no permitir todo tipo de usuario. Recuerda: no te van a cobrar nada mientras no decidas voluntariamente comenzar a usar el servicio al terminar tu bono de 5€.

Creando tu servidor VPS en clouding.io para desplegar Laravel

Una vez creada y verificada tu cuenta, podrás crear tu primer VPS para desplegar tu proyecto Laravel. Existen diferentes opciones, pero para mantener todo bajo nuestro control, vamos a crear el servidor completamente desde cero sin instalar paquetes adicionales. Para ello estando en la pestaña "Mis Servidores", presiona el botón "Crear tu primer servidor".

Una vez allí, debemos hacer lo siguiente:

  • Asigna un nombre para tu servidor (cualquier texto descriptivo funcionará bien)
  • Elige el sistema operativo. Depende de lo que necesites, pero usualmente la versión LTS más reciente es recomendable. Cualquiera superior a Ubuntu 18.04 estará bien
  • Luego eliges las capacidades. Para un sistema tradicional, recomiendo 1GB de RAM, 0.5 vCores y especialmente como mínimo 15GB de espacio de disco SSD
  • Finalmente, puedes activar los backups, o una red privada, incluso indicar si quieres usar una llave SSH. Para mantenerlo simple no haremos uso de nada de eso, así que deja esas opciones sin tocar :)

En la parte derecha puedes comprobar el costo que tendría ese servidor VPS ya sea por hora o por mes y una vez tengas los valores que consideras adecuados (o los recomendados anteriormente), puedes presionar "Enviar". Esto comenzará el proceso que se completará en cuestión de segundos. Recomiendo que esperes hasta que te diga que todo está listo.

Preparando y configurando tu VPS para desplegar un proyecto Laravel

Ahora que tu VPS está creado, tienes una dirección IP pública que puedes usar para acceder a él. Por defecto, los servidores VPS usan el protocolo SSH para las conexiones remotas y dado que SSH es muy seguro y sencillo, lo usaremos para acceder a tu servidor desde tu sistema.

Usualmente, los sistemas operativos actuales permiten hacer uso de un comando llamado "ssh" (sí, igual que el protocolo) para establecer conexiones (incluso los sistemas Windows 10). En el caso de que estés en Windows y este comando no sea reconocido en tu consola de comandos, entonces dale una mirada a este video para resolverlo.

Conectándose a tu servidor VPS

Ahora que conocemos sobre SSH y lo podemos usar, podemos entonces abrir nuestra consola (ya sea iTerm, PowerShell, CMD, CMDER, etc. según tu sistema operativo) y ejecutar ssh [email protected]. La IP aparece en el panel del sitio o incluso te llegó a tu correo electrónico, junto con la contraseña. Si te preguntas, debemos usar root, porque es el usuario que se crea por defecto en los sistemas basados en Linux.

Instalando Nginx en tu VPS

Nginx es un servidor web que es justamente el que permitirá recibir peticiones de tus usuarios y retornarles la respuesta que corresponda desde tu proyecto Laravel.

Para instalar Nnginx, como es la primera vez que vamos a instalar un paquete, es recomendable ejecutar apt update. Este comando actualiza y obtiene la lista de paquetes que puedes instalar en tu sistema.

Luego de actualizar la lista de paquetes, entonces ejecutas apt install nginx -y, el cual instalará Nginx de inmediato. El parámetro -y confirma de una vez la intensión de ejecutar esa instrucción.

Una vez instalado Nginx en tu VPS, puedes acceder a la dirección IP y deberás obtener una respuesta predeterminada de Nginx. Ahora, vamos con el siguiente paso.

Instalando PHP en el servidor VPS

Tal como lo hicimos con Nginx, vamos a utilizar apt para instalar PHP. Sin embargo, en esta ocasión necesitamos una distribución diferente de PHP, llamado PHP-FPM (Fast Processing Module), el cual es necesario para comunicar Nginx y PHP, pues ambos se instalan como módulos separados.

Así que ejecutamos apt install php-fpm -y. Esto instala PHP y todas las demás dependencias usadas por PHP. Puede ejecutar php --version para confirmar la instalación y ver la versión que se ha instalado.

Ahora que ya tienes PHP, vamos a instalar composer

Instalando composer en tu servidor VPS

Composer es el sistema gestor de dependencias de PHP y es de gran utilidad para manejar fácilmente proyectos en este lenguaje, especialmente cuando hablamos de Frameworks como Laravel.

Para instalar composer es recomendable ir directamente a su sitio web y copiar de allí las instrucciones, pues tienden a cambiar. Puedes tomarlas del apartado "Command line installation" acá.

En cuanto ejecutas esta instrucción en tu sistema, terminarás con un archivo llamado composer.phar el cual podrás usar para gestionar las dependencias de tu proyecto Laravel. Sin embargo, para poder usar composer en cualquier ubicación de tu servidor, debemos moverlo a la carpeta /usr/bin ejecutando mv -r composer.phar /usr/bin/composer. Este comando mueve el archivo composer.phar a la carpeta indicada y le cambia el nombre a simplemente "composer".

Hecho lo anterior, podrás entonces escribir simplemente "composer" en tu línea de comando y será reconocido independientemente de donde te encuentres en tu servidor.

Instalando dependencias adicionales de PHP para Laravel

Laravel requiere, como muchos otros proyectos, ciertas extensiones adicionales para su correcto funcionamiento. Vamos a instalarlas todas para asegurar un buen funcionamiento no solo de Laravel, sino de cualquier otro proyecto PHP que requieras.

Una vez más, usando apt install, tenemos lo siguiente: apt install -y php-mysql php-curl php-json php-xml php-sqlite3 php-mbstring php-xmlrpc php-zip

El comando anterior va a instalar las extensiones necesarias para que PHP se pueda entender con MySQL o con SQLite, cifrar strings, hacer peticiones, entre otros.

En este punto, ya tenemos todos los requerimientos mínimos necesarios para instalar y desplegar el proyecto Laravel, así que vamos a hacerlo.

Desplegando Laravel en tu VPS

Para obtener Laravel, podemos hacer uso de composer, así que vamos a definir dónde poner la estructura del proyecto. En el caso de Nginx, es preferible hacerlo en la carpeta /var/www. Allí deberían ponerse los proyectos cada uno en una carpeta independiente. Aunque no es obligatorio, es una buena idea y es lo comúnmente recomendado.

Vamos a la carpeta /var/www ejecutando cd /var/www y una vez allí, ejecutas composer create-project laravel/laravel. Esto va a usar composer para crear un proyecto Laravel al interior de una carpeta llamada "laravel" (el último elemento del comando).

En este punto ya tienes Laravel en tu sistema, pero es momento de indicarle a Nginx cómo "ejecutar" este proyecto con PHP y dónde ubicarlo, pues de momento Nginx sigue retornando la misma respuesta de cuando lo instalamos.

Asignando los permisos necesarios para Laravel y Nginx

Una vez creada la estructura de Laravel, debemos permitir que ciertas ubicaciones puedan ser manipuladas para que el framework funcione correctamente. Para ellos debemos asignar permisos sobre las ubicaciones storage (donde Laravel almacena las vistas compiladas, los archivos de log, entre otros) y en bootstrap/cache (donde Laravel almacena el caché de ciertas configuraciones y funcionalidades).

Para conseguir lo anterior puedes usar el comando chown -R el cual asigna permisos a un usuario particular de forma recursiva (-R).

Ejecutas entonces chown -R www-data storage y chown -R www-data bootstrap/cache. Esto asigna permisos sobre esas ubicaciones al usuario www-data que es el usuario del servidor web Nginx.

Vamos ahora a configurar Nginx para que se pueda acceder a Laravel desde un navegador web.

Configurando Nginx para ejecutar un proyecto Laravel

La configuración usada por defecto por Nginx para indicar el modo de ubicar y "ejecutar" los proyectos se encuentra en /etc/nginx/sites-available, así que, si vas a esa ruta por medio del comando cd, allí habrá un archivo llamado default con la configuración por defecto.

Una vez estés en la carpeta sites-available de Nginx, debes abrir el archivo default, ejecutando nano default. Esto abrirá el editor de texto llamado nano con el contenido de dicho archivo. Allí, usando las flechas del teclado, te puedes desplazar en el documento.

En el archivo default, nos interesa modificar las siguientes instrucciones:

  • La instrucción index: Esta le dejas el valor solo de index.php
  • La instrucción root: Esta debe apuntar a la ubicación del archivo index.php de Laravel, la cual sería /var/www/laravel/public (laravel tiene el archivo index.php al interior de su carpeta public)
  • La directiva try_files: Esta se encuentra al interior de un bloque "location", su valor debe ser el siguiente: try_files $uri $uri/ /index.php?$query_string; Esto asegura que, si el archivo solicitado no existe, la petición se envía al archivo index.php de Laravel.

Ahora, antes de cerrar el archivo, debemos indicarle a Nginx cómo comunicarse con PHP de forma satisfactoria.

Conectando Nginx y PHP

Estamos a punto de terminar. Ahora debemos enfocarnos en el bloque de PHP (el que contiene esta línea location ~ \.php$. Este bloque está comentado, así que remueve todos los "#" en la línea que comienza con "include" y la que dice "fastcgi_pass"

Finalmente, en el caso de la línea de fastcgi_pass, debes asegurarte de que la ruta corresponda con tu versión de PHP. Por defecto Ubuntu 18.04 instala PHP 7.2, mientras que Ubuntu 20.04 instala PHP 7.4, así que tu línea podría lucis así para Ubuntu 20.04: fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; Por supuesto, si tienes otra versión de PHP lo debes modificar de manera acorde.

Hecho esto, debemos cerrar el archivo presionando Ctrl + X, se nos pedirá confirmación así que presionas "Y" seguido de un enter más para confirmar el nombre del archivo.

Una vez sales del archivo solo queda recargar el servicio de Nginx para tener en cuenta los nuevos cambios, ejecutando systemctl reload nginx.service. Con esto ya se podrá comprobar el funcionamiento.

Comprobando tu proyecto Laravel en tu VPS

En este punto, si todo ha ido bien, solo queda ir a la dirección IP de tu servidor y allí Nginx atenderá la petición, la enviará al archivo index.php la cual será procesada por PHP y enviada a tu navegador. Deberás entonces poder el sitio por defecto de Laravel con una serie de enlaces de utilidad.

Eso ha sido todo :) Recuerda que puedes seguir este mismo proceso y comprobar detalles siguiendo el video acá. Adicionalmente, no olvides de crear tu cuenta en clouding.io y obtener ese bono que ter permitirá probar las funciones de tu servidor y tus proyectos sin costo alguno.

Déjame tus comentarios y sugerencias, espero poder seguir agregando artículos y actualizaciones a este mismo con base a sus preguntas.

La última actualización de este artículo fue hace 2 años

Foto de JuanDMeGon

Juan David Meza González

JuanDMeGon

Magister, Ingeniero, Desarrollador
Web & Instructor

¡Listo!

En breve recibirás un mensaje de confirmación. Verifica, por si acaso, la carpeta de correo no deseado.

...

Si te parece bien, te enviaré de vez en cuando, mensajes de interés sobre los temas que se tratan en el sitio.

Tu dirección de correo electrónico será almacenada con un interés según el artículo en el que te encuentres.

Por supuesto, puedes cancelar tu suscripción en cualquier momento.