En este artículo, desplegaremos una Aplicación de Laravel en un Servidor Privado Virtual (VPS) usando el Software de Servidor Web Apache, MySQL como sistema gestor de base de datos y Vue.js para el diseño de las vistas e interfaces.
A todo esto, ¿Qué es un VPS y por qué utilizar uno?
VPS, que significa Servidor Privado Virtual, es una máquina virtual vendida como servicio por varias compañías de hosting. Se puede pensar que es similar al hardware de la CPU de un ordenador portátil, pero en su forma bruta, es decir, sin la pantalla, el teclado, etc.
Varias empresas como Google, Amazon ofrecen servicios de servidores en la nube (GCP, AWS, etc.). Como parte del servicio, se pueden prestar varios servidores situados en diferentes partes del mundo. Te cobran en base a diferentes estándares como las horas utilizadas, la utilización de la CPU, etc.
Utilizar un servidor en la nube no solo te permite un mejor rendimiento, sino además el control total de tu propio servidor. Hice un par de búsquedas y debido a la adaptabilidad decidí alojarme con Clouding VPS Cloud. Pasemos a todo el proceso, desde la configuración de mi servidor hasta la ejecución real de una aplicación web.
Iniciar con el VPS
Dirígete a Clouding.io (ofrece un servicio de Cloud VPS con 5€ de saldo GRATIS al registrarte) o tu proveedor de VPS favorito y compra los recursos que necesites. Puedes elegir la opción más barata si solo lo estás probando, pero te recomiendo obtener algo con al menos 1 GB de RAM si deseas ejecutar varias aplicaciones desde tu VPS.
El registro en Clouding es simple y, solo debes verificar tus datos (email y teléfono) para recibir 5€ de regalo. Una vez recibido los créditos, podemos empezar con la configuración del servidor.
Configuración del Servidor
Al iniciar sesión en el sitio web, te redirigirá a la sección de Servidores, aquí hacemos clic en “Haz clic aquí para crear tu primer servidor“. A continuación, elegimos un nombre, sistema operativo y detalles de configuración del servidor.
Esta es la configuración de ejemplo: (3,90€ Por mes aproximadamente)
- Nombre servidor: esgeeks
- Sistema operativo: CentOS 7
- 0.5 vCores
- 2 GB de RAM por cada vCore. (1 GB de RAM en total)
- 10 GB de disco SSD
- Backups: 02 veces cada 7 días
No te preocupes por los volúmenes, podrás agregarlos más tarde sobre la marcha sin problemas (en caso necesites más recursos). Esperamos unos segundos a que el servidor se encuentre en estado Activo.
Una vez activado, anota la dirección IP pública. De ahora en adelante, esto es lo que más vas a usar. A partir de ahora, este tutorial será compatible con cualquier servidor VPS que ejecute CentOS u otras distribuciones de Linux.
2. Acceso SSH
El siguiente paso es acceder a nuestro servidor a través de SSH (Secure Shell). Los datos de acceso lo encontramos en los detalles del servidor, por ejemplo:
La manera principal de conectarte a un VPS Linux es con el uso de un cliente SSH. Para conectarte a tu VPS con SSH (línea de comando), necesitarás uno de los siguientes programas:
- Putty, disponible para todas las versiones de Windows
- WinSCP, disponible para todas las versiones de Windows
- Terminal.app, empaquetado con todas las versiones de Mac OS X.
- Tu aplicación shell / terminal favorita para Linux.
Después de iniciar Putty, WinSCP o abrir tu terminal shell, el programa requerirá las credenciales de inicio de sesión de VPS:
- Dirección IP/Host
- Nombre de usuario: root
- Contraseña
- Puerto SH : 22
En OS X y Linux, esta información se ingresa en la línea de comando usando el comando ssh en el siguiente formato, donde “xxxx” es la dirección IP del servidor y “22” es el número de puerto SSH:
ssh root@x.x.x.x -p 22
En este ejemplo, utilizaré un emulador de terminal como Cmder. Una vez conectado confirmaré la versión actual del servidor.
El comando de salida que representa es la versión actual de CentOS que se muestra con el número 7.9.2009. Introduce los siguientes comandos (en caso utilices CentOS) para limpiar y actualizar el sistema operativo.
yum clean all
yum -y update
Después de completar los pasos anteriores, completa el siguiente comando para reiniciar el sistema operativo.
reboot
3. Instalando LAMP
En primer lugar, debes agregar repositorios rpm REMI y EPEL en el sistema; estos repositorios tienen paquetes actualizados. Utilizaré el siguiente comando para CentOS 7.
Para instalar el repositorio EPEL:
yum -y install epel-release
Entonces, instalamos los repositorios EPEL adicionales desde dl.fedoraproject.org:
yum install wget
cd /tmp
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
ls *.rpm
Para instalar MySQL:
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
md5sum mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
yum install mysql-server
service mysqld start
Después de instalar MySQL, debes protegerlo. Por defecto, la cuenta de MySQL para ‘root‘ no tiene una contraseña asociada, y el servidor también incluye una base de datos de demostración y todos los permisos asociados a ella. Si este servidor va a ser público o se va a utilizar para algo remotamente serio, necesitamos reforzar un poco la seguridad.
/usr/bin/mysql_secure_installation
Para instalar PHP usa el siguiente comando:
yum --enablerepo=remi,epel install php php-zip php-mysql php-mcrypt php-xml php-mbstring
Si ejecutas el comando php -v
, puedes ver que la versión predeterminada de PHP es 5.4, y entonces la actualizaremos.
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install yum-utils
yum-config-manager --enable remi-php74
yum update
Luego reinicia Apache:
service httpd restart
4. Instalando Composer y Laravel
Se requiere Composer para instalar Laravel. Puedes instalar Composer usando los siguientes comandos:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/bin/composer
chmod +x /usr/bin/composer
Entonces, para Laravel utilizamos los siguientes comandos:
cd /var/www
git clone https://github.com/laravel/laravel.git
cd /var/www/laravel
composer install
La instalación de requisitos previos es un poco larga, pero espera hasta que esté completamente instalada e ingresa los siguientes comandos:
chown -R apache.apache /var/www/laravel
chmod -R 755 /var/www/laravel
chmod -R 755 /var/www/laravel/storage
Usa este comando para escribir en el directorio de almacenamiento:
chcon -R -t httpd_sys_rw_content_t /var/www/laravel/storage
ADEMÁS
En caso necesites instalar Vue.js independientemente, primero debes instalar Node y NPM. En CentOS 7, deberás ejecutar lo siguiente:
curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
yum install nodejs
Entonces necesitas instalar vue-cli. Esto facilita la creación de aplicaciones Vue. Instálalo ejecutando:
npm install -g @vue/cli
Laravel por Defecto
Laravel usa el archivo .env para configurar el entorno. Utilizamos el archivo .env para configurar todas las variables de entorno para el programa, como base de datos, SMTP, clave de seguridad, etc.
cp .env.example .env
Ahora configura la clave de cifrado aleatoria de 32 bits que te proporcionó el Servicio de cifrado Illuminati (es broma, pero genéralo):
php artisan key:generate
Ahora agrega un host virtual en el archivo de configuración de Apache para acceder al Framework Laravel desde el navegador web. Para hacerlo, edita el archivo de configuración de Apache /etc/httpd/conf/httpd.conf
y agrega el siguiente código al final del archivo.
vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName mi.sitioweb.com
ServerAlias 46.183.116.100
DocumentRoot /var/www/laravel/public
<Directory /var/www/laravel>
AllowOverride All
</Directory>
</VirtualHost>
Reinicia el servicio Apache y accede al framework Laravel usando tu navegador web favorito y comienza a desarrollar una gran aplicación web.
service httpd restart
Ahora accede al sitio web de Laravel en un navegador web.
5. Implementando nuestra Aplicación
Veamos un ejemplo de Laravel 8 + Vue 2 + AdminLTE 3
laravel-vue-crud-starter (este enlace se abre en una nueva ventana) por AnowarCST (este enlace se abre en una nueva ventana)
Laravel 8 + Vue 2 + AdminLTE 3 based Curd Starter template
La siguiente es una plantilla CRUD de inicio basada en Laravel 8 + Vue 2 + AdminLTE 3 muy simple para una aplicación SPA. Entonces, empecemos a desplegarla en el servidor.
Los comandos son los siguientes:
git clone https://github.com/AnowarCST/laravel-vue-crud-starter.git
cd laravel-vue-crud-starter/
composer install
Ahora creamos una base de datos usando MySQL desde la línea de comandos:
- Inicia sesión en MySQL como usuario root
mysql -u <usuario> -p
- Cree un nuevo usuario de base de datos: (modifica db_usuario y P@s$w0rd123!)
GRANT ALL PRIVILEGES ON *.* TO 'db_usuario'@'localhost' IDENTIFIED BY 'P@s$w0rd123!';
- Cierra la sesión de MySQL escribiendo:
\q
- Inicia sesión como el nuevo usuario de la base de datos que acabas de crear:
mysql -u db_usuario -p
- Crea una nueva base de datos: (Modifica db_nombre con el nombre real que te gustaría darle a la base de datos.)
CREATE DATABASE db_nombre;
Entonces, creamos el archivo de entorno de laravel:
cp .env.example .env
Y completamos las credenciales de la base de datos.
Por último, ejecuta los siguientes comandos:
php artisan key:generate
php artisan migrate
php artisan db:seed
php artisan passport:install
npm install
npm run dev
Nuevamente, agregamos un host virtual en el archivo de configuración de Apache.
vim /etc/httpd/conf/httpd.conf
Lo que resultaría en algo similar a lo siguiente:
<VirtualHost *:80>
ServerName mi.sitioweb.com
ServerAlias 46.183.116.100
DocumentRoot /var/www/laravel-vue-crud-starter/public
<Directory /var/www/laravel-vue-crud-starter>
AllowOverride All
</Directory>
</VirtualHost>
No olvidemos reiniciar el servidor apache:
service httpd restart
Ahora puedes continuar http://46.183.116.100 y ver la nueva página que acabamos de crear. ¿Y sabes lo que es genial? ¡Cualquier cambio en se implementará instantáneamente en el servidor!
Extra: Servidores DNS
Todo está correcto, pero ¿siempre se mostrará la dirección IP para acceder a mi aplicación? Por supuesto que no; todo lo que debemos hacer es apuntar un dominio a un servidor privado virtual (VPS). Dependiendo el servidor que estés utilizando, puedes encontrar una sección DNS para configurar los servidores DNS en tu dominio. Por suerte, Clouding.io incluye gratis el servicio de Hosting DNS.
Es importante recordar que los cambios en el DNS pueden tardar al menos hasta 24 horas en propagarse en todo el mundo. Una vez que el dominio comience a funcionar con tu VPS, tu aplicación estará pública a través del nombre de tu dominio.
6. Conclusión
Eso es todo, espero poder ayudarte con esta demostración de cómo EsGeeks implemento algunas de sus aplicaciones en servidores VPS Cloud y los hago funcionar 24/7 sin gastar mucho dinero; sobre todo utilizando Clouding. Si tuve un error tipográfico, un error de configuración o algo no funciona, no dudes en anotarlo en los comentarios a continuación.
Estrellas