Tabla de Contenidos

2. Estructura del proyecto

El proyecto consiste en crear una tienda online con su Backend, frontend y además que se conecte a un banco para hacer los pagos. De forma que cada tienda se conectará al banco del siguiente grupo.

El proyecto ha desarrollar va a ser el siguiente

«device»Servidor«Tomcat»Backend Tienda«MariaDB»Base de datos Tienda«Nginx»Tienda Usuario«Nginx»NGINX Tienda Administrador«Nginx»NGINX Banco«Tomcat»Backend Banco«MariaDB»Base de datos Banco

«Java App»Tienda Backend«Java App»Banco Backend«database»Tienda DB«database»Banco DB«Angular App»Tienda Front«Angular App»Administracion Front«Angular App»Banco Front

Estructura de carpetas

Para poder automatizar el despliegue , lo primero es tener una estructura definida de nuestro proyecto y de nuestro servidor. Durante el curso vamos a usar este esquema tanto en este módulo como en los otros módulos. El esquema he intentado que sea lo mas fiel posible a la realidad de las empresas aunque he intentado simplificarlo.

mi-proyecto
├─src
├─docs
├─disenyo_grafico
├─database
├─builder
│  └─build.sh
└─target o dist

Carpeta ''target'' o ''dist''

La carpeta target o dist es la mas importante para el módulo de despliegue ya que en ella estará el proyecto tal y como se va a desplegar.

Java

En un proyecto Java la carpeta src contiene las clases *.java mientras que en target o dist tenemos en jar con las clases compiladas y empaquetas en un único fichero.

Angular

En un proyecto Angular podemos pensar que debe ser únicamente una copia de la carpeta "src" ya que es código JavaScript pero si que se pueden hacer muchos cambios en esta carpeta.

Repositorios Git

Veamos ahora los repositorios de Git que vamos a tener:

Modelo de Banco

Clienteloginpasswordnombreapellido1apellido2dniapi_tokenCuentaBancariasaldoibanTarjetaCreditonumeroTarjetafechaCaducidadcvcnombreCompletoMovimientoBancarioTipoMovimientoBancario tipoMovimientoBancarioOrigenMovimientoBancario origenMovimientoBancarioTarjetaCredito tarjetaCreditoOrigenDate fechaBigDecimal importeString conceptoTipoMovimientoBancarioDebe //Quitar dineroHaber //Añadir dineroOrigenMovimientoBancarioTransferenciaDomiciliacionTarjetaBancaria1*1*1*

Endpoints

{
  autorizacion: {
    login:"juan"
    api_token:"5f5ca67f-4c02-47cf-8753-a7790f7f5be1"
  },
  origen: {
    iban:"ES61 1234 3456 4204 5632 3532"
  },
  destino: {
    iban:"ES61 1234 3456 4204 5632 5555",  
  },
  pago: {
    importe: 567.67,
    concepto:"Comprar PC"
  }
}

Reglas:

{
  autorizacion: {
    login:"juan"
    api_token:"5f5ca67f-4c02-47cf-8753-a7790f7f5be1"
  },
  origen: {
    numeroTarjeta:"4111 1111 1111 1111",
    fechaCaducidad:"2027-12"
    cvc:"123"
    nombreCompleto:"JUAN GARCIA GARCIA"
  },
  destino: {
    iban:"ES61 1234 3456 4204 5632 5555",  
  },
  pago: {
    importe: 567.67,
    concepto:"Comprar PC"
  }
}

Reglas:

desplegar-proyecto

El repositorio desplegar-proyecto tendrá una estructura distinta ya que no es un proyecto de desarrollo de código sino únicamente para desplegar.

En el raíz del proyecto tendremos el fichero deploy.sh que desplegará todos los repositorios:

Ejemplo simple despliegue

#!/bin/bash

docker compose down
docker compose build --no-cache
docker compose up -d

services:
  web:
    build:
      context: .
      dockerfile: web.Dockerfile    
    container_name: web-lorenzo    
    environment:
      VIRTUAL_HOST: lorenzo.preproducciondaw.cip.fpmislata.com
    networks:
      - proxy_red

  mariadb:
    image: mariadb:latest
    container_name: mariadb-lorenzo
    environment:
      MYSQL_ROOT_PASSWORD: lorenzo
      MYSQL_DATABASE: lorenzo
      MYSQL_USER: lorenzo
      MYSQL_PASSWORD: lorenzo
    networks:
      - proxy_red

networks:
  proxy_red:
    external:
      name: nginx-proxy-network

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html

<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>hola lorenzo</title>
</head>
<body>
hola lorenzo
</body>
</html>

===== Servidores y dominios =====

El proyecto va a estar en 2 servidores:

  • produccion:
    • Host name: producciondaw.cip.fpmislata.com
    • IP: 192.168.59.104
    • Usuario: alumno
    • Contraseña: EFmn5671%%
  • preproduccion:
    • Host name: preproducciondaw.cip.fpmislata.com
    • IP: 172.16.0.205
    • Usuario: alumno
    • Contraseña 278W/Q/fgt

Cada uno de esos servidores contendrá los contenedores que necesite cada proyecto.

Desde el centro es posible acceder a cada uno de los 2 servidores.

===== Proxmox =====

Para acceder al proxmox se usan las URL: