diff --git a/.env b/.env new file mode 100644 index 0000000000000000000000000000000000000000..5f4d4f89f7a9503eed479cf9ae40a7b9325a5823 --- /dev/null +++ b/.env @@ -0,0 +1,6 @@ +AUTH_SERVICE_HOSTNAME=auth-api +USERS_SERVICE_HOSTNAME=users-api +HOTELS_SERVICE_HOSTNAME=hotels-api +BOOKINGS_SERVICE_HOSTNAME=bookings-api +DB_SERVICE_HOSTNAME=roomsbooking +DB_DATABASE_NAME=RoomsBooking \ No newline at end of file diff --git a/angular/RestClient/Dockerfile b/angular/RestClient/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..2e7bc5701936d528a696ce40b7c6214df7a35159 --- /dev/null +++ b/angular/RestClient/Dockerfile @@ -0,0 +1,27 @@ +# Etapa 1: Construcción de la aplicación Angular +FROM node:20 AS build + +# Establecer el directorio de trabajo +WORKDIR /app + +# Copiar archivos de package.json e instalar dependencias +COPY package*.json ./ +RUN npm install + +# Copiar el código fuente de Angular +COPY . . + +# Compilar la aplicación Angular para producción +RUN npm run build -- --output-path=dist/app --configuration production + +# Etapa 2: Servidor Nginx para producción +FROM nginx:alpine AS production + +# Copiar los archivos de construcción generados en la etapa anterior a la carpeta de Nginx +COPY --from=build /app/dist/app/browser /usr/share/nginx/html + +# Exponer el puerto 80 para Nginx +EXPOSE 7920 + +# Iniciar Nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/angular/RestClient/default.conf b/angular/RestClient/default.conf new file mode 100644 index 0000000000000000000000000000000000000000..9f78ceb14768cd5687f0eae199dcbdf0d6d21cae --- /dev/null +++ b/angular/RestClient/default.conf @@ -0,0 +1,23 @@ +server { + + # Ubicación de los archivos estáticos + root /usr/share/nginx/html; + + location / { + try_files $uri $uri/ /index.html; + } + + # Configuración de caché (opcional) + location ~* \.(?:manifest|css|js|map|json)$ { + expires 1h; + add_header Cache-Control "public"; + } + + # Deshabilitar la cache de contenido dinámico + location ~* \.(?:png|jpg|jpeg|gif|ico|svg|woff|woff2)$ { + expires 1h; + access_log off; + } + + error_page 404 /index.html; +} \ No newline at end of file diff --git a/angular/RestClient/src/environments/environment.prod.ts b/angular/RestClient/src/environments/environment.prod.ts index 445f0d3b770f01162006dbe8262e44338b9161e5..9318edcf83573d82d0005c135849aca26dc609a2 100644 --- a/angular/RestClient/src/environments/environment.prod.ts +++ b/angular/RestClient/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, authAPI: 'http://auth-api:8080', - userAPI: 'http://user-api:8080', + userAPI: 'http://users-api:8080', hotelAPI: 'http://hotels-api:8080', bookingAPI: 'http://bookings-api:8080', }; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..14b336d0c6c805a3bfc02c08b613432a8ae2807d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,55 @@ +version: "3.7" + +volumes: + kong_data: {} + users_data: {} + +networks: #Red interna para comunicar los servicios (“Services on the same network can communicate with each other using their name”) + kong-net: {} + +services: + RoomsBooking-WEB: + image: roomsbooking-web-image + build: + context: ./angular/RestClient + dockerfile: ./Dockerfile + restart: unless-stopped + ports: + - 4221:80 + networks: # Networks to join + - kong-net + depends_on: + - RoomsBooking-API + RoomsBooking-API: + image: roomsbooking-api-image + build: + context: ./java/roomBooking + dockerfile: ./Dockerfile + restart: unless-stopped + ports: + - 8080:8080 + networks: # Networks to join + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://RoomsBooking-database:3306/RoomsBooking?createDatabaseIfNotExist=true + depends_on: + - RoomsBooking-database + + RoomsBooking-database: + image: mysql #Usamos imagen del respositorio ya creada + hostname: RoomsBooking-database + cap_add: + - SYS_NICE + restart: unless-stopped + ports: + - "3307:3306" + networks: + - kong-net + volumes: + - users_data:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: ClaveRoot + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_DATABASE: RoomsBooking + MYSQL_ROOT_HOST: "%" diff --git a/docker-compose_test.yml b/docker-compose_test.yml new file mode 100644 index 0000000000000000000000000000000000000000..9e542345a0a36b2c3d97d31454ce948e911e84eb --- /dev/null +++ b/docker-compose_test.yml @@ -0,0 +1,106 @@ +volumes: + kong_data: {} + users_data: {} + +networks: + kong-net: {} + +services: + Auth-API: + image: auth-api-image + hostname: ${AUTH_SERVICE_HOSTNAME} + build: + context: ./java/services/auth + dockerfile: Dockerfile + restart: unless-stopped + ports: + - 8101:8080 + networks: + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true + depends_on: + - RoomsBooking-database + + Users-API: + image: users-api-image + hostname: "${USERS_SERVICE_HOSTNAME}" + build: + context: ./java/services/users + dockerfile: Dockerfile + restart: unless-stopped + ports: + - 8111:8080 + networks: + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true + depends_on: + - RoomsBooking-database + + Hotels-API: + image: hotels-api-image + hostname: ${HOTES_SERVICE_HOSTNAME} + build: + context: ./java/services/hotels + dockerfile: Dockerfile + restart: unless-stopped + ports: + - 8121:8080 + networks: + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true + depends_on: + - RoomsBooking-database + - Bookings-API + + Bookings-API: + image: bookings-api-image + hostname: ${BOOKINGS_SERVICE_HOSTNAME} + build: + context: ./java/services/bookings + dockerfile: Dockerfile + restart: unless-stopped + ports: + - 8131:8080 + networks: + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true + depends_on: + - RoomsBooking-database + + RoomsBooking-database: + image: mysql + hostname: RoomsBooking-database + cap_add: + - SYS_NICE + restart: unless-stopped + ports: + - "3307:3306" + networks: + - kong-net + volumes: + - users_data:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: ClaveRoot + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_DATABASE: RoomsBooking + MYSQL_ROOT_HOST: "%" + + RoomsBooking-Web: + image: roomsbooking-web-image + build: + context: ./angular/RestClient + dockerfile: ./Dockerfile + restart: unless-stopped + ports: + - 3328:80 + networks: + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true + depends_on: + - RoomsBooking-database diff --git a/java/roomBooking/Dockerfile b/java/roomBooking/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..8d0b79d6514534deddac782fc9367bcdbcaf89c3 --- /dev/null +++ b/java/roomBooking/Dockerfile @@ -0,0 +1,10 @@ +FROM maven:3-openjdk-17 AS maven +WORKDIR /app +COPY ./ ./ +RUN mvn -Dmaven.test.skip clean package +FROM openjdk:17-jdk-oracle +ARG JAR_FILE=/app/target/*.jar +COPY --from=maven ${JAR_FILE} app.jar +ENV PORT 8080 +EXPOSE $PORT +ENTRYPOINT ["java","-jar", "/app.jar"] \ No newline at end of file diff --git a/java/services/authentication/Dockerfile b/java/services/authentication/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..8d0b79d6514534deddac782fc9367bcdbcaf89c3 --- /dev/null +++ b/java/services/authentication/Dockerfile @@ -0,0 +1,10 @@ +FROM maven:3-openjdk-17 AS maven +WORKDIR /app +COPY ./ ./ +RUN mvn -Dmaven.test.skip clean package +FROM openjdk:17-jdk-oracle +ARG JAR_FILE=/app/target/*.jar +COPY --from=maven ${JAR_FILE} app.jar +ENV PORT 8080 +EXPOSE $PORT +ENTRYPOINT ["java","-jar", "/app.jar"] \ No newline at end of file diff --git a/java/services/bookings/Dockerfile b/java/services/bookings/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..8d0b79d6514534deddac782fc9367bcdbcaf89c3 --- /dev/null +++ b/java/services/bookings/Dockerfile @@ -0,0 +1,10 @@ +FROM maven:3-openjdk-17 AS maven +WORKDIR /app +COPY ./ ./ +RUN mvn -Dmaven.test.skip clean package +FROM openjdk:17-jdk-oracle +ARG JAR_FILE=/app/target/*.jar +COPY --from=maven ${JAR_FILE} app.jar +ENV PORT 8080 +EXPOSE $PORT +ENTRYPOINT ["java","-jar", "/app.jar"] \ No newline at end of file diff --git a/java/services/hotels/.gitignore b/java/services/hotels/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..549e00a2a96fa9d7c5dbc9859664a78d980158c2 --- /dev/null +++ b/java/services/hotels/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/java/services/hotels/Dockerfile b/java/services/hotels/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..8d0b79d6514534deddac782fc9367bcdbcaf89c3 --- /dev/null +++ b/java/services/hotels/Dockerfile @@ -0,0 +1,10 @@ +FROM maven:3-openjdk-17 AS maven +WORKDIR /app +COPY ./ ./ +RUN mvn -Dmaven.test.skip clean package +FROM openjdk:17-jdk-oracle +ARG JAR_FILE=/app/target/*.jar +COPY --from=maven ${JAR_FILE} app.jar +ENV PORT 8080 +EXPOSE $PORT +ENTRYPOINT ["java","-jar", "/app.jar"] \ No newline at end of file diff --git a/java/services/users/Dockerfile b/java/services/users/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..8d0b79d6514534deddac782fc9367bcdbcaf89c3 --- /dev/null +++ b/java/services/users/Dockerfile @@ -0,0 +1,10 @@ +FROM maven:3-openjdk-17 AS maven +WORKDIR /app +COPY ./ ./ +RUN mvn -Dmaven.test.skip clean package +FROM openjdk:17-jdk-oracle +ARG JAR_FILE=/app/target/*.jar +COPY --from=maven ${JAR_FILE} app.jar +ENV PORT 8080 +EXPOSE $PORT +ENTRYPOINT ["java","-jar", "/app.jar"] \ No newline at end of file