diff --git a/backend/.github/.workflows/deploy.yml b/backend/.github/.workflows/deploy.yml new file mode 100644 index 0000000000..8c0c7cc570 --- /dev/null +++ b/backend/.github/.workflows/deploy.yml @@ -0,0 +1,26 @@ +name: Deploy + +on: + push: + branches: + - deploy/v1 + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v3 + with: + node-version: 16 + cache: npm + - run: yarn install + + - name: Build + run: yarn build + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.TOKEN }} + publish_dir: dist \ No newline at end of file diff --git a/backend/moment/moment-server/auth/Dockerfile b/backend/moment/moment-server/auth/Dockerfile new file mode 100644 index 0000000000..e269094219 --- /dev/null +++ b/backend/moment/moment-server/auth/Dockerfile @@ -0,0 +1,30 @@ +# 도커 허브에서 공식적으로 제공하는 OpenJDK 이미지를 베이스 이미지로 사용합니다. +FROM openjdk:17-jdk-slim + +# 빌드에 필요한 패키지를 설치합니다. +RUN apt-get update && apt-get install -y findutils && rm -rf /var/lib/apt/lists/* + +# 작업 디렉토리를 생성합니다. +RUN mkdir -p /app +WORKDIR /app + +# Gradle 캐시를 미리 복사하여 의존성 다운로드 시간을 단축합니다. +#COPY .gradle .gradle + +# 프로젝트 소스 코드와 Gradle 설정 파일을 복사합니다. +COPY build.gradle gradlew ./ +COPY gradle gradle +COPY src src + +# Gradle을 이용하여 프로젝트를 빌드합니다. +RUN --mount=type=cache,target=/root/.gradle ./gradlew build -x test + +# 빌드 결과물을 Docker 이미지 안에 포함시킵니다. 이건 호스트에서 가져올떄 COPY고 컨테이너 내부에서 빌드한 파일을 복사할때 cp +#COPY build/libs/*SNAPSHOT.jar app.jar +RUN cp build/libs/*SNAPSHOT.jar app.jar + + +# 컨테이너가 실행될 때 자동으로 실행할 명령어를 설정합니다. +CMD ["java", "-jar", "app.jar"] + + diff --git a/backend/moment/moment-server/auth/src/main/java/com/moment/auth/service/AuthService.java b/backend/moment/moment-server/auth/src/main/java/com/moment/auth/service/AuthService.java index f8f6b7d50a..df176b7cd5 100644 --- a/backend/moment/moment-server/auth/src/main/java/com/moment/auth/service/AuthService.java +++ b/backend/moment/moment-server/auth/src/main/java/com/moment/auth/service/AuthService.java @@ -38,6 +38,7 @@ public TokenResponseDTO.GetToken login(AuthRequest.Login login) { @Transactional public TokenResponseDTO.GetTempToken sendCode(AuthRequest.SendCode sendCode) { + log.info("sendCode.isSignUp : {}", sendCode.isSignUp()); if (sendCode.isSignUp()) { if(userRepository.existsByEmail(sendCode.getEmail())){ throw new AlreadyRegisteredEmailException("이미 가입된 이메일"); diff --git a/backend/moment/moment-server/docker-compose.yml b/backend/moment/moment-server/docker-compose.yml index 92b463ac64..6c9aa81777 100644 --- a/backend/moment/moment-server/docker-compose.yml +++ b/backend/moment/moment-server/docker-compose.yml @@ -8,7 +8,7 @@ services: build: context: eureka/. ports: - - "8761:8761" # 호스트 머신의 8080 포트와 컨테이너 내부의 8080 포트를 매핑 + - "8761:8761" # 호스트 머신의 8761 포트와 컨테이너 내부의 8761 포트를 매핑 logging: driver: "json-file" options: @@ -44,7 +44,7 @@ services: ports: - "8080:8080" # 호스트 머신의 8080 포트와 컨테이너 내부의 8080 포트를 매핑 depends_on: - db: # db 서비스가 먼저 실행되어야 함 + db-core: # db 서비스가 먼저 실행되어야 함 condition: service_healthy # eureka-server: # condition: service_healthy @@ -54,7 +54,7 @@ services: # retries: 5 # restart: on-failure environment: - SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/moment_core?createDatabaseIfNotExist=TRUE&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC + SPRING_DATASOURCE_URL: jdbc:mysql://db-core:3306/moment_core?createDatabaseIfNotExist=TRUE&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: root1234 logging: @@ -67,7 +67,63 @@ services: # volumes: # - /c/Users/jykim/TheWayHome_Server/src/main/resources/static/images:/app/src/main/resources/static/images - db: + # 스케줄러 서버 + scheduler: + image: moment-scheduler:0.0.1 # 스프링부트 어플리케이션의 이미지 이름과 태그 + container_name: moment-scheduler-server # 컨테이너 이름 + build: + context: scheduler/. + ports: + - "8081:8081" # 호스트 머신의 8081 포트와 컨테이너 내부의 8081 포트를 매핑 + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://db-core:3306/moment-core?createDatabaseIfNotExist=TRUE&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC + SPRING_DATASOURCE_USERNAME: root + SPRING_DATASOURCE_PASSWORD: root1234 + depends_on: + db-core: # db 서비스가 먼저 실행되어야 함 + condition: service_healthy + networks: + - moment-net + # 메일 서버 + mail: + image: mail:0.0.1 # 스프링부트 어플리케이션의 이미지 이름과 태그 + container_name: mail-server # 컨테이너 이름 + build: + context: mail/. + ports: + - "8082:8082" # 호스트 머신의 8082 포트와 컨테이너 내부의 8082 포트를 매핑 + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "10" + networks: + - moment-net + # Auth 서버 + auth: + image: auth:0.0.1 # 스프링부트 어플리케이션의 이미지 이름과 태그 + container_name: auth-server # 컨테이너 이름 + build: + context: auth/. + ports: + - "8083:8083" # 호스트 머신의 8083 포트와 컨테이너 내부의 8083 포트를 매핑 + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://db-auth:3306/moment-auth?createDatabaseIfNotExist=TRUE&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=UTC + SPRING_DATASOURCE_USERNAME: root + SPRING_DATASOURCE_PASSWORD: root1234 + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "10" + depends_on: + db-auth: # db 서비스가 먼저 실행되어야 함 + condition: service_healthy + networks: + - moment-net + + # 코어 서버 디비 + db-core: image: mysql:8.0 # MySQL 이미지 이름과 태그 container_name: moment-core-db # 컨테이너 이름 ports: @@ -85,8 +141,48 @@ services: volumes: - moment_core_data:/var/lib/mysql + # 스케줄러 서버 디비 +# db-scheduler: +# image: mysql:8.0 # MySQL 이미지 이름과 태그 +# container_name: moment-scheduler-db # 컨테이너 이름 +# ports: +# - "23306:3306" # 호스트 머신의 23306 포트와 컨테이너 내부의 3306 포트를 매핑 +# command: --default-authentication-plugin=mysql_native_password # MySQL 8.0 이상 버전일 경우 인증 방식 지정 +# environment: +# MYSQL_ROOT_PASSWORD: root1234 +# MYSQL_DATABASE: moment_scheduler +# networks: +# - moment-net +# healthcheck: +# test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] +# timeout: 20s +# retries: 10 +# volumes: +# - moment_scheduler_data:/var/lib/mysql + + # Auth 서버 디비 + db-auth: + image: mysql:8.0 # MySQL 이미지 이름과 태그 + container_name: moment-auth-db # 컨테이너 이름 + ports: + - "33306:3306" # 호스트 머신의 33306 포트와 컨테이너 내부의 3306 포트를 매핑 + command: --default-authentication-plugin=mysql_native_password # MySQL 8.0 이상 버전일 경우 인증 방식 지정 + environment: + MYSQL_ROOT_PASSWORD: root1234 + MYSQL_DATABASE: moment_auth + networks: + - moment-net + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + timeout: 20s + retries: 10 + volumes: + - moment_auth_data:/var/lib/mysql + volumes: moment_core_data: +# moment_scheduler_data: + moment_auth_data: networks: diff --git a/backend/moment/moment-server/eureka/src/main/resources/application.yml b/backend/moment/moment-server/eureka/src/main/resources/application.yml index b68df40177..a9d1cf95bb 100644 --- a/backend/moment/moment-server/eureka/src/main/resources/application.yml +++ b/backend/moment/moment-server/eureka/src/main/resources/application.yml @@ -16,5 +16,5 @@ eureka: register-with-eureka: false fetch-registry: false service-url: -# defaultZone: http://host.docker.internal:${server.port}/eureka/ - defaultZone: http://localhost:${server.port}/eureka/ \ No newline at end of file + defaultZone: http://host.docker.internal:${server.port}/eureka/ +# defaultZone: http://localhost:${server.port}/eureka/ \ No newline at end of file diff --git a/backend/moment/moment-server/gateway/src/main/resources/application.yml b/backend/moment/moment-server/gateway/src/main/resources/application.yml index c663b9484e..a007715904 100644 --- a/backend/moment/moment-server/gateway/src/main/resources/application.yml +++ b/backend/moment/moment-server/gateway/src/main/resources/application.yml @@ -68,5 +68,5 @@ eureka: register-with-eureka: true fetch-registry: true service-url: - # defaultZone: http://host.docker.internal:8761/eureka +# defaultZone: http://host.docker.internal:8761/eureka defaultZone: http://localhost:8761/eureka diff --git a/backend/moment/moment-server/mail/Dockerfile b/backend/moment/moment-server/mail/Dockerfile new file mode 100644 index 0000000000..e269094219 --- /dev/null +++ b/backend/moment/moment-server/mail/Dockerfile @@ -0,0 +1,30 @@ +# 도커 허브에서 공식적으로 제공하는 OpenJDK 이미지를 베이스 이미지로 사용합니다. +FROM openjdk:17-jdk-slim + +# 빌드에 필요한 패키지를 설치합니다. +RUN apt-get update && apt-get install -y findutils && rm -rf /var/lib/apt/lists/* + +# 작업 디렉토리를 생성합니다. +RUN mkdir -p /app +WORKDIR /app + +# Gradle 캐시를 미리 복사하여 의존성 다운로드 시간을 단축합니다. +#COPY .gradle .gradle + +# 프로젝트 소스 코드와 Gradle 설정 파일을 복사합니다. +COPY build.gradle gradlew ./ +COPY gradle gradle +COPY src src + +# Gradle을 이용하여 프로젝트를 빌드합니다. +RUN --mount=type=cache,target=/root/.gradle ./gradlew build -x test + +# 빌드 결과물을 Docker 이미지 안에 포함시킵니다. 이건 호스트에서 가져올떄 COPY고 컨테이너 내부에서 빌드한 파일을 복사할때 cp +#COPY build/libs/*SNAPSHOT.jar app.jar +RUN cp build/libs/*SNAPSHOT.jar app.jar + + +# 컨테이너가 실행될 때 자동으로 실행할 명령어를 설정합니다. +CMD ["java", "-jar", "app.jar"] + + diff --git a/backend/moment/moment-server/mail/src/main/resources/application.yml b/backend/moment/moment-server/mail/src/main/resources/application.yml index 5c611e18d6..ad50153af1 100644 --- a/backend/moment/moment-server/mail/src/main/resources/application.yml +++ b/backend/moment/moment-server/mail/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8088 + port: 8082 spring: # config: diff --git a/backend/moment/moment-server/scheduler/Dockerfile b/backend/moment/moment-server/scheduler/Dockerfile new file mode 100644 index 0000000000..e269094219 --- /dev/null +++ b/backend/moment/moment-server/scheduler/Dockerfile @@ -0,0 +1,30 @@ +# 도커 허브에서 공식적으로 제공하는 OpenJDK 이미지를 베이스 이미지로 사용합니다. +FROM openjdk:17-jdk-slim + +# 빌드에 필요한 패키지를 설치합니다. +RUN apt-get update && apt-get install -y findutils && rm -rf /var/lib/apt/lists/* + +# 작업 디렉토리를 생성합니다. +RUN mkdir -p /app +WORKDIR /app + +# Gradle 캐시를 미리 복사하여 의존성 다운로드 시간을 단축합니다. +#COPY .gradle .gradle + +# 프로젝트 소스 코드와 Gradle 설정 파일을 복사합니다. +COPY build.gradle gradlew ./ +COPY gradle gradle +COPY src src + +# Gradle을 이용하여 프로젝트를 빌드합니다. +RUN --mount=type=cache,target=/root/.gradle ./gradlew build -x test + +# 빌드 결과물을 Docker 이미지 안에 포함시킵니다. 이건 호스트에서 가져올떄 COPY고 컨테이너 내부에서 빌드한 파일을 복사할때 cp +#COPY build/libs/*SNAPSHOT.jar app.jar +RUN cp build/libs/*SNAPSHOT.jar app.jar + + +# 컨테이너가 실행될 때 자동으로 실행할 명령어를 설정합니다. +CMD ["java", "-jar", "app.jar"] + + diff --git a/backend/moment/moment-server/scheduler/src/main/resources/application.yml b/backend/moment/moment-server/scheduler/src/main/resources/application.yml index b78d83fffd..a528c288cb 100644 --- a/backend/moment/moment-server/scheduler/src/main/resources/application.yml +++ b/backend/moment/moment-server/scheduler/src/main/resources/application.yml @@ -17,8 +17,8 @@ eureka: register-with-eureka: true fetch-registry: true service-url: -# defaultZone: http://host.docker.internal:8761/eureka - defaultZone: http://localhost:8761/eureka + defaultZone: http://host.docker.internal:8761/eureka +# defaultZone: http://localhost:8761/eureka logging: level: