diff --git a/docker-compose-prod/docker-compose.frontend.yml b/docker-compose-prod/docker-compose.frontend.yml new file mode 100644 index 00000000..9bda1b21 --- /dev/null +++ b/docker-compose-prod/docker-compose.frontend.yml @@ -0,0 +1,9 @@ +services: + frontend: + container_name: frontend-prod + build: + dockerfile: ../frontend/Dockerfile + context: ../frontend + image: frontend:1.0.0 + ports: + - "5173:80" diff --git a/docker-compose-prod/docker-compose.housing.yml b/docker-compose-prod/docker-compose.housing.yml index 1fe84592..ecdcbca7 100644 --- a/docker-compose-prod/docker-compose.housing.yml +++ b/docker-compose-prod/docker-compose.housing.yml @@ -28,8 +28,8 @@ services: depends_on: - db-housing - rabbitmq - ports: - - "8088:8080" + expose: + - "8080" db-housing: container_name: db-housing-prod diff --git a/docker-compose-prod/docker-compose.notification.yml b/docker-compose-prod/docker-compose.notification.yml index 25ba582a..cd55b469 100644 --- a/docker-compose-prod/docker-compose.notification.yml +++ b/docker-compose-prod/docker-compose.notification.yml @@ -26,7 +26,7 @@ services: SPRING_PROFILES_ACTIVE: prod ports: - - "8087:8080" + - "8095:8080" depends_on: - db-notification - rabbitmq diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index fe352103..f38d8466 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -10,6 +10,7 @@ include: - ./docker-compose-prod/docker-compose.gateway.yml - ./docker-compose-prod/docker-compose.consul.yml - ./docker-compose-prod/docker-compose.notification.yml + - ./docker-compose-prod/docker-compose.frontend.yml networks: default: diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 00000000..ae842711 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1 @@ +./node_modules \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 00000000..ca301e64 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,14 @@ +FROM node:22-alpine AS builder +WORKDIR /app +COPY . . +RUN npm ci +RUN npm run build + +# ---------- runtime stage ---------- +FROM nginx:stable-alpine +RUN rm -rf /usr/share/nginx/html/* +COPY --from=builder /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf + +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/frontend/nginx.conf b/frontend/nginx.conf new file mode 100644 index 00000000..3aa17e6b --- /dev/null +++ b/frontend/nginx.conf @@ -0,0 +1,11 @@ +server { + listen 80; + server_name _; + + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } +} diff --git a/gateway/src/main/java/com/micro/gateway/SecurityConfig.java b/gateway/src/main/java/com/micro/gateway/SecurityConfig.java index 11a118c6..e60b537e 100644 --- a/gateway/src/main/java/com/micro/gateway/SecurityConfig.java +++ b/gateway/src/main/java/com/micro/gateway/SecurityConfig.java @@ -33,6 +33,7 @@ public SecurityConfig(JwtAuthenticationFilter jwtFilter) { public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) { return http .csrf(ServerHttpSecurity.CsrfSpec::disable) + .cors(ServerHttpSecurity.CorsSpec::disable) .authorizeExchange(exchanges -> exchanges .pathMatchers("/api/auth/**").permitAll() // endpoints use code