10

Hacer deploy en Laravel para dummies 🥴

Si, muy bonito todo con el curso… bueno casi 😥. Tal vez terminaste todo desorientado pero lograste sacar tu primer proyecto en Laravel con a penas los conceptos básicos pero… ¿Y ahora qué?, ¿Subo todo el montón de carpetas así sin más en mi hosting?

Aquí te lo digo en 11 sencillos pasos, créeme que haré mi mejor esfuerzo por explicartelo con peras y manzanitas 🍎.

Antes de empezar es necesario recalcarte que tu servicio de hosting necesita brindarte la opción de acceder a la terminal de tu servidor, y al manejador de archivos. La mayoría de los servicios deberían tener estas opciones, si no contiene la opción de acceder a la terminal como tal, busca si se puede acceder por medio de una conexión SSH (Sería otro tema muy aparte el explicarte este proceso, busca en la documentacion de tu servidor de hosting).

También es importante mencionar que este tutorial es para dummies, tendrá mucho texto porque me detendré a explicar varias cosas que vaya haciendo a través de los pasos.

Para este tutorial estaré utilizando cPanel.

1. .gitignore

Primero que nada, hay que tener en claro que Laravel utiliza una tonelada de librerías las cuales fueron instaladas con Composer, para los que no sepan esas librerías están listadas en dos archivos: composer.lock y composer.json.

Para este primer paso es necesario que tu proyecto esté en un repositorio en la nube, como puede ser en la plataforma de Github. Luego como ya pudiste haber adivinado, no es necesario incluir todas las librerías que descargaste, necesitamos excluir algunas carpetas que nuestro proyecto genera automáticamente. ¿Cómo se cuales carpetas que Laravel genera automáticamente debo excluir? La verdad ni yo sé, la carpeta principal sería la de vendor/ donde se guarda todo lo que Composer descarga, pero si no quieres fallar en este aspecto dirígete a esta página que te genera tus archivos .gitignore automáticos.

Screenshot_20200717_173735.png

Como ves, yo le especifiqué las tecnologías que estoy usando, en este caso mi editor Visual Studio Code me llega a generar carpetas que no son necesarias incluir en nuestro repositorio, así como Laravel (obvio) y Node en caso de que hayas incluido librerías Javascript con npm.

Lo siguiente es darle a Create y copiar todas las líneas que salen a continuación a un archivo que se ubique en la RAÍZ de tu proyecto con el nombre de .gitignore.

Con esto ya tenemos excluidas todas las carpetas que no necesitamos, puedes hacer commit de todos tus archivos y subirlos a tu repositorio en la nube.

2. Abrir la Terminal

No, no es la terminal o CMD de tu computadora, tiene que ser la terminal que te ofrece tu servicio de hosting.

Screenshot_20200717_174805.png

Si tienes una barra de búsqueda escribe terminal o consola y entra en ella.

3. Clonar tu repositorio

Si manejar la terminal es muy nuevo para ti, no te preocupes. Te explicaré a detalle cada comando que ejecutemos.

Primeramente debemos conocer la estructura que tendrá nuestro directorio en el servidor:

** /home/		//La raíz de tu servidor
	|
	** /public_html/	//Es la carpeta principal de tu dominio, generalmente aquí van todos los archivos que se muestran entupágina.
	|
	** /repositorio/		//Es la carpeta donde contiene todos los archivos de tu repositorio en Github.

Las demás carpetas que se encuentren en el mismo nivel ignóralas, ahorita solo nos centraremos en public_html y en la carpeta de tu repositorio. Tal vez se te haga un poco extraño el por qué si te acabo de decir que en public_html van los archivos de tu página, tenemos una carpeta fuera del repositorio, más adelante te explico el por qué, por ahora vamos a centrarnos en la terminal.

En este caso nuestra ubicación actual siempre va a ser en el home, te darás cuenta de esto ya que tu consola aparece [email protected]: ~, lo que va después de los : es donde te encuentras actualmente, el símbolo ~ es el shortcut que indica que estás en la raíz.

Escribimos el siguiente comando:

usuario@server: ~$ git cloneurl-del-repositorio

la URL de tu repositorio la consigues de la siguiente forma:

Screenshot_20200717_180626.png

Para no entrar en detalles y evitarte problemas, usa la opción de HTTPS y copia el enlace que te brinda y pégalo en el comando anterior. comúmnete la terminal no reconoce la combinación de teclas Ctrl + C y Ctrl + V, así que te recomiendo que utilices el mouse para hacer eso.

Muy probablemente te pida ingresar tu usuario y contraseña de Github, en mi caso no ya que he realizado antes otros deploys.

Screenshot_20200717_181132.png

4. Instalar dependencias

Al ejecutar git clone automáticamente se nos crea una carpeta con el mismo nombre del repositorio, dentro se descargaron todos los archivos de nuestro proyecto.

Screenshot_20200717_181619.png

Lo siguiente es posicionarnos dentro de esa carpeta:

usuario@server: ~$  cd portfolio/

El comando cd nos sirve para posicionarnos en la ruta especificada, en este caso como estamos en el home solo escribimos el nombre de nuetra carpeta. Es lógico que se tenga que escribir bien el nombre, así que para no tener fallos puedes empezar por escribir las primeras tres letras por y presionar la tecla tab, con esto te autocompleta el nombre de la carpeta, siempre y cuando no exista alguna que se llame igual o similar a las primeras letras que escribiste.

Ya ubicados instalamos las depencencias con composer:

usuario@server: portfolio$ composer install

Tu servidor debería tener composer instalado, no está de más checar primero con el comando composer -v, te tendría que aparecer algo así:

Screenshot_20200717_182419.png

Una vez hecho esto se instalarán todas las dependencias listadas en composer.lock y composer.json, esto puede tardar algunos minutos dependiendo de tu conexión y la del servidor.

Screenshot_20200717_182943.png

Tal vez a ti te salgan muchas más líneas de código, yo ya tenía este proyecto hecho.

5. Mover carpeta public

Ahora viene lo interesante de por qué manejamos dos carpetas separadas como en el paso 3.

Por si no sabías, los archivos base si los podemos llamar de alguna forma, que hacen que nuestra página se visualice están dentro de *public. Todo lo que está contenido dentro de esa carpeta, tiene que ir dentro de public_html.

En este tutorial lo haremos desde el manejador de archivos que tiene cPanel para que sea más visual, nos vamos a nuestra carpeta del REPOSITORIO y nos posicionamos dentro de la carpeta public.

Seleccionamos todos los archivos y carpetas y damos clic derecho, elegimos la opción de move:

Screenshot_20200717_183750.png

Nos saldrá una ventana para especificar la ruta a donde moveremos los archivos, simplemente escribimos /public_html/ y presionamos en Move files:

Screenshot_20200717_184001.png

Luego de esto vemos que nuestra carpeta quedó vacía, y si nos dirigimos a public_html/ veremos que todos nuestros archivos están posicionados ahí.

6. Editar el index.php

¡Ya casi terminamos! si lo pudiste deducir, no es así de simple solo mover los archivos de una carpeta a otra, también necesitamos modificar un par de líneas en nuestro archivo index.php. En cPanel se puede hacer directamente seleccionando el archivo, dando clic derecho y en Edit:

Screenshot_20200717_184301.png

Al presionar Edit en mi caso me sale otra ventana para confirmar que voy a editar el archivo, simplemente acepto y continúo. Se abre otra ventana en la cual vamos a cambiar las siguientes líneas:

Screenshot_20200717_184949.png

Como puedes observar, dejé comentadas las líneas originales en donde se especifica las rutas para la carpeta vendor y bootstrap.

Las nuevas líneas de código quedan de la siguiente manera: require __DIR__.'/ queda igual, require para indicar que vamos a necesitar incluir un directorio, seguido de eso DIR.’/ hace referencia al directorio raíz en el que nos encontramos, o sea public_html. Seguido de eso es donde cambia la cosa, tenemos quedarle la ruta de vendor, recordemos que estamos en public_html, necesitamos devolvernos un nivel atrás para salir de esa carpeta ( …/ ), ahora estamos en home, por lo que necesitamos acceder a la carpeta del repositorio ( portfolio/ ), una vez dentro completamos con vendor/autoload.php y ¡Ya tenemos nuestra ruta armada!, si juntamos todo este proceso al final nos queda: require __DIR__.'/../portfolio/vendor/autoload.php';.

Lo mismo hacemos con la carpeta de bootsrap.

7. Crear la base de datos

cPanel tiene una herramienta para crear bases de datos automáticamente. Nos vamos nuevamente al menú principal y en el buscador empezamos a buscar database y entramos en MySQLDatabases.

OJO: Es importante que entres a esta opción en específico y no en phpMyAdmin, algunos pueden estar familiarizados con la segunda herramienta, pero al menos en mi servicio de hosting no puedo crear bases de datos en ningún lugar que no sea el primero que les dije.

Screenshot_20200717_190013.png

Lo que sigue es demasiado fácil, la primer sección es para crear bases de datos, y basta con solo escribir el nombre y dar clic en Create database

Screenshot_20200717_190430.png

Como puedes notar, todas mis bases de datos contiene forzozamente un prefijo con mi usuario y un guión bajo, es es importante tenerlo en cuenta para cuando especifiquemos el nombre de nuestra base de datos.

Más abajo nos dirigimos a crear un nuevo usuario para nuestra base de datos, de igual manera nos obliga a agregar el prefijo en el nombre del usuario

Screenshot_20200717_190757.png

Una vez hecho esto solo falta darle los privilegios de nuestro nuevo usuario a la base de datos correspondiente, más abajo encontraremos esa sección.

Screenshot_20200717_190941.png

Seleccionan la base de datos correcta y los manda a otra página en la cual le darán todos los privilegios

Screenshot_20200717_191029.png

Al final solo damos clic en Make changes y listo!

8. Configurar archiv .env

Ya teniendo nuestra base de datos y usuario hechos, procederemos a configurar nuestro archivo .env, ese donde al principio del curso establecemos las credenciales de la base de datos entre otras cosas.

Si seguiste mi consejo del .gitignore, te darás cuenta que nos excluyó el archivo original .env y sólamente nos dejó el .env.example. Esto es obvio ya que ahí pudimos haber puesto las contraseñas de alguna API, base de datos externa, etc al momento de trabajar en local con nuestro proyecto, y es peligroso subir este tipo de archivos confidenciales a un repositorio en Github.

En cambio, lo que tenemos que hacer es renombrar el archivo .env.example a que diga solo .env, ya que este contiene la misma información pero con los campos vacíos.

No posicionamos en nuestro manejador de archivos y damos clic derecho para renombrar el archivo

Screenshot_20200717_191814.png

De igual forma como lo hicimos con el archivo index.php, lo podemos editar ahí mismo, llenando los campos correspondientes:

0_o2fqEANbKbuiqdgm.png
  • DB_CONNECTION se deja como está, con el valor mysql a menos que estés usando algún motor diferente.
  • DB_HOST es la dirección de tu servidor, este siempre te lo mandan en un correo al momento de haber adquirido tu plan de hosting
  • DB_PORT el puerto por defecto en el que trabaja el motor de base de datos es 3306, no debería cambiar a menos que tu servicio sea distitno.
  • DB_DATABASE el nombre de tu base de datos, en mi caso incluido con todo y el prefijo que le agregó.
  • DB_USERNAME de igual manera con el usuario.
  • DB_PASSWORD la contraseña con la cual registramos al usuario.

9. Hacer las migraciones de nuestras bases de datos

A este momento nuestra base de datos está vacía, pero de la misma forma que trabajamos en el curso podemos hacer uso de los comandos artisan. Para esto tenemos que volver nuevamente a la terminal del servidor. Y OJO que como pueden deducir, debemos estar ubicados en la CARPETA DEL REPOSITORIO, si por alguna razón se salieron de la terminal, recuerden que simplemente es entrar y poner cd carpeta-del-repo/.

Y tan simple como ejecutar php artisan migrate para que haga efecto. Recuerda que si tienes alguna seed para alimentar tu base de datos agregamos el parámetro --seed.

OJO: El error más común que salga depués de ejectar las migraciones puede ser el siguiente:

SQLSTATE[42000]: Syntaxerrororaccessviolation:1071Specifiedkeywastoolong; maxkeylengthis1000bytes

Esto lo solucionamos editando nuestro archivo ubicado en app/Providers/AppServiceProvider.php, de la misma forma que en los pasos anteriores. No olvides que esto es dentro de la carpeta de nuestro repositorio.

Screenshot_20200717_193532.png

En las primeras líneas agregamos use Illuminate\Support\Facades\Schema;, y en la función boot() que por defecto está vacía, agregamos Schema::defaultStringLength(191);

Guardamos los cambios y no olvides volver a correr el comando php artisan migrate:fresh para borrar y volver a hacer las migraciones desde cero y sin errores.

En caso de que te salga algún otro problema, deberás Googlearlo y hacer los ajustes necesarios, solo este porque es el más común que te puede pasar.

10. Crear el acceso directo a storage/

En caso de que utilices la carpeta de storage o no, es importante crear de todas formas el acceso directo para poder acceder desde public_html, recuerda que la carpeta de storage está ubicada en la de nuestro repositorio.

¡Descuida! no vas a tener que meterte otra vez en el rollo de las rutas, tam simple como correr el comando php artisan storage:link.

En caso de no haberte funcionado este comando, también es lo mismo que hacer

usuario@server: portfolio$ ln -s ~/carpeta-repositorio/storage/app/public/ ~/public_html/storage

11. Dar permisos a storage/ y bootstrap/

Tenemos que dar permisos adicionales para las carpetas storage/ y bootstrap/ con el siguiente comando. Recuerda que seguimos posicionados dentro de la carpeta de nuestro repositorio.

[email protected]: portfolio$ chmod -R o+w storage/ bootstrap/

12. Limpiar caché y generar llave

¡Ya terminamos! sólo nos queda limpiar el caché de configuración ejecutando php artisan config:cache.

También tenemos que generar una clave para poder acceder a nuestra página correctamente, con el comando php artisan key:generate.

BONUS

  • Ahora cada vez que hagamos un cambio en el proyecto, lo subimos a github, nos posicionamos de nuevo en la terminal y dentro de la carpeta de nuestro repositorio hacemos git pull origin master.

  • Recuerda que si hubo archivos nuevos dentro de la carpeta public, como archivos CSS, Javascript o cualquiera dentro de la carpeta.

  • Primero que nada necesitas ser cuidadoso con las migraciones, la primera vez todo correrá bien, pero si tu aplicación es de propósito real, puede llegar un punto en el cual necesites agregar nuevas columnas en tablas ya existentes, y como ya te habrás dado cuenta, cada que haces un cambio en los archivos de migración, a la hora de efectuar los cambios con php artisan migrate:fresh o php artisan migrate:refresh ¡Todos tus datos serán borrados!, obviamente no quremos eso, y por defecto Laravel no tiene un comando para hacer migraciones sin borrar datos, así que lo que hay que hacer es crear un archivo de migración únicamente para las columnas a insertar, esto se hace fácilmente con php artisan make:migration nombre-de-columna --table=tabla-a-agregar, es importante especificar bien el nombre de la tabla a la cual se van a insertar las nuevas columnas.

Ya con esto igual que con las otras migraciones, escribimos el código para insertar las columnas que queramos en la tabla objetivo, al final después de haber hecho el pull de nuestro repositorio hacia nuestro servidor, corremos el comando php artisan migrate así sin ningún parametro adicional, las migraciones se efectuarán sólo en esos archivos nuevos que hemos creado.

Conclusión

Ahora ya puedes entrar a tu página y disfrutar de tu aplicación web hecha con Laravel, fue fácil ¿No?.

Por favor déjame en los comentarios si te gustó la explicación, este fue mi primer tutorial / aporte en Platzi y me siento feliz, la verdad no fue tan simple jaja demasiado trabajo tuve que hacer para intentar redactar todo esto. ¡Espero les sirva!

Escribe tu comentario
+ 2
8
9162Puntos

¡Que estrés! no hay separación entre los párrafos jaja 😦 no encuentro la forma de editarlo. Espero les haya dado ganas de leerlo aún así 😅

1
13609Puntos
un año

Que gran aporte, lo pondré en practica, muchas gracias 😃