Muchas personas me han preguntado como instalar Laravel en un hosting compartido. La verdad, que los hosting compartidos me parecen una mier…. para ser utilizados con Laravel.
Así que, vamos a hacer un tutorial que sea la guía definitiva de como instalar Laravel en Digital Ocean.
¿Qué es Digital Ocean?
Para los que no sepan que es Digital Ocean, en su pagina oficial se definen como:
La plataforma en la nube más simple para desarrolladores y equipos.
A esta definición le agregaría «económica», ya que sus precios comparados con sus prestaciones y soporte, son muy buenos.
Esta plataforma nos permite crear Servidores Virtuales Privados (VPS), que aquí son llamadas Droplets. A diferencia de los hosting compartidos que utilizan cPanel (u otro administrador), en nuestra droplet debemos acceder por SSH (por terminal o Putty) y tendremos control total de nuestra maquina virtual para instalar todo lo que necesitemos.
Podemos tener las gotitas (dropets) que queramos y en cada una de ellas podemos instalar uno o mas proyectos.
Por otro lado, si decimidimos no utilizar mas una gotita, podemos apagarla y Digital Ocean dejara de cobrarnos dinero. Genial, no? 😀
Registración en Digital Ocean + $100 dolares Gratis
La registración en Digital Ocean es muy fácil. Solamente te pide tu nombre, correo electrónico y contraseña. También, tenes la posibilidad de registrarte con tu cuenta de Google.
Además, gracias a su sistema de referidos, podes obtener $100 dolares gratis si te registras por la invitación de un usuario de Digital Ocean y podrás utilizarlos para crear tus dropets. Si lo deseas, te puedes registrar con mi invitación haciendo clic aquí o en la imagen de abajo para obtener tus $100 dolares que te servirán por 60 días. Es una buena opción para comenzar a probar sus servicios.
Registrarte a través de mi link de invitación no tiene ningún costo y si lo haces, puedo ayudarte con cualquier duda que tengas en este tutorial.
¿Cómo crear una Droplet en Digital Ocean?
Una vez que te hayas registrado en Digital Ocean, veremos nuestro panel de control donde tendremos que hacer clic en el botón «Create» que se encuentra en la parte superior izquierda y luego hacemos clic en «Droplet (create cloud servers)«.
Esto nos llevara a una pagina donde debemos elegir que imagen utilizar. Si vamos a instalar Laravel, lo que recomiendo es elegir una imagen LAMP. De esta forma ya tendremos instalado las ultimas versiones de Linux, Apache, PHP y MySql.
Para esto, debemos hacer clic en la pestaña «One-click apps» y luego en «Lamp on 18.04» (al momento de escribí este artículo la versión de Linux es 18.04).
El siguiente paso será seleccionar el tamaño de nuestra droplet.
Cada una tiene sus características y su precio que debemos pagar por mes (si usas en link de referencia, será gratis). También tienes la posibilidad de elegir droplets con CPU optimizada pero, para una aplicación chica, la gotita de $5 dolares es mas que suficiente.
Siempre tendrás la posibilidad de expandir las características de tu gotita si tu aplicación crece con tan solo algunos clics.
En los pasos siguientes debes dejar todo como esta, lo que si, te recomiendo habilitar el backup automático de tu gotita, nunca esta de mas tener backup, me ha salvado mas de una vez. Y solo cuesta el 20% de la gotita que hayas elegido, en este caso, el 20% de $5 dolares (pfff, nada!).
Por ultimo, hacemos clic en el botón «Create» y listo, ya tenemos nuestra primer droplet creada. Vas a recibir un correo electrónico con los datos para ingresar a tu droplet por SSH (ip del servidor, usuario y una contraseña genérica).
Ingresando a la Droplet
Utilizando la ip, usuario y contraseña que te enviaron a tu email, puedes ingresar a la droplet a través de la consola web que te brinda digital ocean. Pero, por un tema de seguridad, te recomiendo que lo hagas por terminal si tu computadora tiene Linux o Mac ya que vienen con SSH instalado. Si tienes Windows, puedes utilizar Windows PowerShell o Putty.
Con este comando en tu terminal o PowerShell ya podrás ingresar a tu cloud server de Digital Ocean.
Una vez que ingresamos a nuestra gotita, vamos a actualizar el sistema con los siguientes comandos:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
Habilitar el modulo mod_rewrite de Apache
Este paso es importante para que funcionen correctamente nuestras rutas de Laravel. Ejecutamos el siguiente comando:
sudo a2enmod rewrite
Obtener contraseña de MySQL
Cuando creamos una droplet con MySQL previamente instalado, la contraseña de nuestro usuario MySQL se se guarda en /root/.digitalocean_password
.
Debemos obtener esta contraseña ya que la necesitaremos para configurar nuestra base de dato. Por lo tanto, vamos a acceder al archivo usando el comando cat
:
cat /root/.digitalocean_password
Buscamos el parámetro root_mysql_pass
y la cadena de caracteres que figura será nuestra contraseña.
Para cambiar esta contraseña complicada y tener una base de datos mas segura, vamos a ejecutar el siguiente comando:
mysql_secure_installation
El comando te pedirá que ingreses la contraseña para el usuario root.
Luego, el sistema te hará una serie de preguntas que te aconsejo responderlas de la siguiente forma:
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: N
Luego, te preguntará si deseas cambiar la contraseña. Te aconsejo hacerlo
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No): Y
Luego de ingresar tu contraseña y confirmarla, la próximas preguntas debes ingresar Y
para todas.
Esto eliminará los usuarios anónimos y la base de datos de prueba. Deshabilitará los inicios de sesión remotos y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios que hemos realizado.
Listo, tu base de datos ya está configurada y podemos continuar.
Instalar Composer en nuestro servidor
Vamos a instalar Composer para luego poder instalar Laravel con el siguiente comando:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
También podes a instalar git si ya tenemos un repositorio con nuestro proyecto de Laravel:
sudo apt-get install git
Caso contrario, vamos a dirigirnos a la carpeta www
donde instalaremos Laravel, para ello usamos los siguientes comandos:
cd /var/www
composer create-project laravel/laravel nombre-de-tu-proyecto --prefer-dist
Si se produce un error al ejecutar el comando anterior con respecto a la falta de memoria, puedes ejecutar los siguientes comandos para habilitar el sistema swap del servidor:
cd ~
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
Esto hará que, si el servidor se queda sin memoria RAM por la instalación de Laravel, se tomara una parte de disco duro como memoria RAM para finalizar el proceso y luego liberará dicha parte del disco duro.
Una vez finalizada la descarga de Laravel, accedemos a la carpeta del proyecto y le damos los permisos necesarios:
cd nombre-de-tu-proyecto
sudo chown -R www-data: storage
sudo chmod -R 755 storage
sudo chmod -R 755 bootstrap/cache
sudo chmod -R 755 bootstrap/cache
Creando nuestro Apache Virtual Host
Ahora vamos a crear un virtual host en Apache para nuestro proyecto de Laravel. Lo ideal es crear un vhost nuevo para cada proyecto ya que podríamos tener mas de un sitio web en nuestro servidor.
Para crear un Apache virtual host, vamos a utilizar el editor nano
de la siguiente forma:
sudo nano /etc/apache2/sites-available/my_app.conf
En el ejemplo, le pusimos my_app pero puedes ponerle el nombre que quieras.
Una vez dentro del archivo, vamos a pegar el siguiente código:
Ya puedes guardar los cambios con las teclas Ctrl + o
, Enter
y luego Ctrl + x
para salir del archivo.
Ya casi terminamos, lo unico que queda por hacer es registrar el nuevo vhost. Para esto ejecutamos el siguiente comando:
sudo a2ensite my_app
Y, reiniciamos nuestro servidor web Apache:
sudo service apache2 reload
Ingresando a la aplicación Laravel
Por ultimo, si no tenemos el archivo .env
en nuestra carpeta donde se hizo la instalación de Laravel, debemos crearlo. Para esto, vamos a basarnos en el archivo .env-example
y luego lo editaremos con los datos de nuestra base de datos:
cd /var/www/nombre-de-tu-proyecto
cp .env-example .env
nano .env
Ingresamos el nombre de nuestra base de datos, usuario, contraseña y guardamos el archivo y salimos.
Listo! ahora ya puedes ingresar a tu aplicación escribiendo la IP de tu droplet o, si ya tienes un dominio, ingresando por tu dominio.
NOTA: Si la pagina queda en blanco es porque la carpeta www
no tiene los permisos necesarios. Por lo tanto, deberás correr el comando sudo chmod -R guo+w www
.
¿Todavía no tienes un dominio?
Digital Ocean no provee dominios por lo que debes adquirirlo en sitios como GoDaddy o Namecheap, recomiendo este ultimo.
Si ya tienes un dominio, hacérmelo saber en los comentarios y completare esta guía con la certificación SSL para que tengas una web con protocolo HTTPS. 😉
Instalar Certificado SSL a nuestro Servidor Apache
Si quiere ver el artículo de como Instalar un Certificado SSL en Apache, podes hacer click aquí.
Conclusión
Espero que les haya gustado la guía. Seguramente, continuare completándola agregando la certificación SSL y como hacer deploy de Laravel en otros cloud servers como Heroku o AWS.
Muy buena guía. Se que los Shared son una mier…. Pero no todos podemos pagar digital. Soy Venezolano y requiero mínimo de $10, y pues tampoco es que es muy barato para los pobres jajaja. Yo tengo corriendo uno en un shared y me va genial, pero a la hora de si coloco todos los archivos del proyecto dentro de la carpeta public o si los coloco en el root y solo muevo el contenido de la carpeta public a public_html, no sabría cual es la mejor manera para hacerlo.
Muchas gracias bro. Entiendo el tema del dinero y se que $5 o $10 dolares puede ser un numero importante para muchos (una mierda también :/). Por otro lado, no se si entendí bien tu pregunta, creo que sería lo mismo copiar los archivos desde root o desde public, siempre y cuando tu server apunte a public_html.
La cuestión esta así, yo tengo todos los archivos de laravel en /misitio
los archivos que estan en /misitio/public/ los movi a /public_html/
y en /public_html/index.php cambie las lineas
`require __DIR__.’/../misitio/bootstrap/autoload.php’;
…
$app = require_once __DIR__.’/../misitio/bootstrap/app.php’;`
Para de esta manera apunte a la carpeta donde estan mis archivos.
La pregunta es ¿Es correcto hacerlo de esta manera?
¿Cual es la mejor manera? ¿Y porque?
Estaría genial ese tip.
Cuando en tu aplicación quieras usar por ejemplo Scheduling de laravel veras lo útil que es una VPS 😉
Esto te lo soluciona ya lo e probado http://desarrollowebtutorial.com/publicar-laravel-en-hosting-compartido/
Hola, yo ya tengo un dominio, pero lo tengo comprado en DreamHost, como puedo hacer para que no aparezca la IP y aparezca mi dominio?
Debes apuntar los DNS de digital a tu dominio. Voy a ver si completo la guía con esas cosas.
Te lo agradecería mucho, ya que es algo que ayuda a que seamos mas profesionales
Yo quiero saber eso igual manera, tengo un dominio externo en otro proveedor, y quiero apuntar al Droplet que he creado.
El tutorial esta genial bro, de verdad gracias y espero con ansias el deploy para AWS.
Muy interesante, felicidades. Me gustaría saber cómo instalar ssl en mi dominio.
Hola amigo, yo acabo de hacer esto la semana pasada pero de todas formas me sirvio para corroborar los pasos que seguí, la única diferencia fue que utilicé PostgreSQL (me costó un poco hacer la conexión por que habia que instalar un par de módulos de php). Me gustaria que completaras la guia para configurar el nombre de dominio y el SSL, saludoss
Excelente aporte y me gustaría saber como configurar mi dominio en Digital Ocean y el ssl. Saludos bro gracias por segur con tus aportes.
Donde esta el link de invitacion?
Hola Eduardo. Tenes que hacer click donde dice «haciendo click aquí». Igualmente, aquí te lo dejo: https://m.do.co/c/8b36d5ec4690
Estoy utilizando firefox 65 y el link no se ve. Tuve que poner inspeccionar codigo para verlo.
Por otro lado, podrias explicar como es el tema de la facturacion? Porque en una parte del articulo mencionas que si se apaga la gotita digitalocean no nos cobra. En tal caso mientras este prendida cobran por el trafico y una vez que alcanzas el trafico de tu plan te bloquean o algo asi?
Con trafico me referia a la transferencia.
Con firefox no se ve? Gracias, lo voy a revisar.
Con respecto a la facturación. No, los precios no varían por trafico ni tampoco te cortan el servicio. Digital Ocean cobra por hora. Mientras la gotita este prendida, Digital Ocean te cobra $0,007 por hora (que es lo mismo a $5 por mes), tomando como ejemplo el caso que puse yo.
Si apagas la gotita, no pasa nada. No te van a dar de baja o bloquear. Solamente, Digital Ocean te dejará de cobrar y obviamente, no podrás acceder a tu gotita. Pero cuando la volves a activar, podes seguir trabajando normalmente con ella, sin perder los archivos que tenias.
Gracias esta buenisimo el tutorial! Acabo de descubrir el sitio muy buenos tutoriales gracias!
Gracias a vos por tu comentario. Saludos Ariel.
Hola Matias, muy buen tutorial.. segui al pie de la letra los pasos hasta llegar a la parte donde se instala en composer…. ejecute esto tal cual:
curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer
Se ejecuta todo de una o son comando por separado 😀 … perdon si es basica la pregunta pero soy un poco nuevo en esto… Me sale este error:
Could not open input file: sudo
curl: (23) Failed writing body (0 != 16133)
Gracias de antemano
Como estas David? Son dos comandos. Ahi actualice el artículo para que quede mas claro.
Primero va el comando:
curl -sS https://getcomposer.org/installer | php
Y luego:
sudo mv composer.phar /usr/local/bin/composer
Saludos.
Que tal Matias, una duda, cuando visito la direccion IP del servidor me aparece el codigo que esta en /public/index.php en texto plano, he visto que es referente a libapache2-mod-php pero lo tengo instalado y aun asi es lo que veo en el navegador. Tendras alguna experiencia con esta cuestion que pueda orientarme? Gracias de antemano. Buen articulo.
Gracias Alberto. Verifica también de tener instalado php-mcrypt y también ejecuta a2enmod php7.2 (o la versión de php que hayas instalado). Saludos.
I’m pleased that I seen this website, precisely the proper information that I was trying to find!
Excelente guía, gracias, tengo una duda, para tener una app que soporte 10mil usuarios que tipo de paquete sería mejor??? gracias
Debería saber cual es el máximo aproximado de cuantos usuarios están online en el mismo momento.
Pero recuerda que DigitalOcean te permite escalar rápidamente con un solo click cuando tengas picos.
deberías complementar este tutorial con deploys automáticos usando los webhooks de github
A alguien más los ha bloquedao usar el link de referido? Yo lo usé, creé mi cuenta y bloqueado de una vez, sin respiro.
De verdad? Voy a revisar el link.
Ok, me informas por acá…
Revise el link y esta bien. También probé crear una cuenta con un nuevo email y pude sin problemas.
No se que estará detectando Digital Ocean con tu cuenta. Prueba con otro email como hice yo.
Hola. Cree un servidor Ubuntu 20 en D.O. con Laravel forge y me anda todo bien menos que no me guarda las imágenes. Ya le di los permisos a storage y public y cree el enlace con storage. Que puede ser ? gracias
Me hubiera gustado poder copiar el codigo del puerto jajajaja