Este documento describe los pasos necesarios para configurar el entorno de desarrollo en la PC local bajo sistemas operativos Linux utilizando Docker.
- Tener instalado Git.
- Tener instalado Composer.
- Tener instalado php-client php-mbstring.
git@github.com:MartinMontanari/LibLaPlaza-admin.git
https://getcomposer.org/download/
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
PD: Si bien aquí se brinda el hash en su última versión al día 19/10/2024 tener en cuenta que el hash de arriba siempre se actualiza por lo que es mejor entrar a la página de composer.
Copiamos el composer.phar
de instalación que nos proveen los comandos anteriores en la carpeta raíz del proyecto (LibLaPlaza-admin/
)
- Primeramente tener
docker
ydocker-compose
instalados (utilizar las guías de Digital Ocean estan bien documentadas).
-
Entrar a la carpeta de docker del proyecto. (
LibLaPlaza-admin/docker
) -
Realizar un
docker-compose pull
-
Realizar un
docker-compose up -d
-
Encender los contenedores con
docker-compose start
-
Listo ya se encuentra levantado el servidor y la base de datos (MySQL).
Es necesario para la correcta visualización y funcionamiento del proyecto que se asignen los siguientes permisos:
sudo chown -R 1000:33 storage/
sudo chmod -R g+w storage/
sudo chown -R 1000:33 bootstrap/cache
sudo chmod -R g+w bootstrap/cache
PD: Puede suceder que en momentos al crearse archivos de Logs nuevos tengamos que reasignar los permisos al storage/ (ver como solucionar esto, muchas veces al terminar la instalación del proyecto necesitamos asignar de nuevo estos permisos).
-
Nos ubicamos en la carpeta de docker del proyecto (
/docker
) -
Acceder al Lord Commander (Ricky Fort) ejecutando
./webapp
(basicamente es nuestro bash de nginxdocker-compose run --user=1000 phpnginx bash
) -
Ejecutamos
./composer.phar install
-
Esperar la instalación de dependencias de Laravel y compañía.
Si has seguido los pasos anteriores correctamente, la base de datos ya se encuentra configurada ya que se ha creado junto con los containers de docker en el punto anterior.
-
Para acceder a la base de datos mediante entorno CLI, ejecutamos
docker exec -it docker_mysql_1 bash
(con esto ingresamos a mysql del docker) -
Ejecutamos
mysql -uroot -psecret
-
Verificamos si la base de datos se encuentra creada con:
show databases;
-
Para poder usarla y ejecutamos el comando:
use trabajofinal;
-
Tener los containers levantados.
-
Acceder a la URL localhost:8080 desde nuestro navegador, allí se encontrará con un login.
-
Para loguearse y acceder a la interfaz, completar los campos:
Servidor = mysql
Usuario = test
Contraseña = test
Base de datos = trabajofinal (éste último campo puede no completarlo y podrá acceder de todos modos y seleccionar la bdd luego)
- Crear un archivo
.env
- Copiar lo que existe en el
.env.example
- Este archivo contiene las credenciales de las cuentas de los servicios utilizados.
- Primeramente actualizar el archivo
.env
con los datos correspondientes de la BD:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=trabajofinal
DB_USERNAME=test
DB_PASSWORD=test
- Luego seguimos con la configuración de las variables para el correcto funcionamiento del despacho de correos electrónicos desde la aplicación:
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME="mail de gmail"
MAIL_PASSWORD="pass de gmail"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="mail de gmail"
MAIL_FROM_NAME="Libreria de La Plaza"
- Esta parte no es fundamental para el funcionamiento del sistema, pero si desea poder recuperar su contraseña en caso de habérsela olvidado puede hacerlo configurando las credenciales para el envío del correo de recuperación.
- Reemplazar los campos por las credenciales de una cuenta de gmail válida.
- También tiene que tener activado el acceso a aplicaciones poco seguras activado (si no sabe como hacerlo puede consultar la documentación oficial de google https://support.google.com/a/answer/6260879?hl=es )
MAIL_USERNAME="mail de gmail"
MAIL_PASSWORD="pass de gmail"
MAIL_FROM_ADDRESS="mail de gmail"
- Ejecutaremos las migraciones y los seeders para tener datos para realizar las pruebas necesarias.
-
Entramos al
bash nginx
del Lord Commander ubicados enLibLaPlaza-admin/docker/
ejecutar:./webapp
. -
Ejecutamos dentro del bash
php artisan migrate
-> esto corre las migraciones y crea las tablas en la bdd. -
Ejecutamos dentro del bash
php artisan db:seed
-> esto corre los seeders y setea datos de prueba en las tablas de la bdd. -
Una vez terminada la ejecución ya tendremos las tablas correspondientes en nuestra base de datos
trabajofinal
. -
Ejecutar para tener el
.env
completo y correctophp artisan key:generate
. -
Listo ya podemos salir del comandante.
-
Ya podemos entrar al sitio
localhost
pero aún falta instalar y compilar las dependencias necesarias para una correcta visualización de los componentes de las vistas. -
Para ello, dentro de la carpeta raíz
LibLaPlaza-admin/
ejecutar los comandosnpm install
ynpm run prod
, además ejecutaryarn install
yyarn dev
. -
Deberíamos visualizar correctamente la página de inicio.
Respecto a la organización de capas lógicas se encuentra basado en Arquitectura Hexagonal / Ports and Adapter / Onion Architecture:
https://martinfowler.com/eaaCatalog/ (Conceptos para el ORM DataMapper vs ActiveRecord)
https://domainlanguage.com/ddd/ (Conceptos DDD como: Entidades / Value Objects / Servicios / Commands / Shared-Kernel / Repositorios)
Ese libro azul principal tiene todos los conceptos correspondientes utilizados aquí como las mejores prácticas para orientarse al dominio y crear sistemas lo más desacoplados y correctos posibles.
Un resumen de este gratuito es:
http://domainlanguage.com/wp-content/uploads/2016/05/DDD_Reference_2015-03.pdf
Para mantenernos sin acoplamientos y poder cumplir bien con la arquitectura se necesita de la inyección de dependencias y en general de un IoC para inversión de control, como lo nombran los Principios SOLID. Esto nos ayuda a utilizar interfaces / contratos, que quien los inyecta es alguien de infrastructra transversal que resuelve por nosotros las dependencias necesarias.