Skip to content

Commit

Permalink
Merge pull request #30 from DDD-Community/dev
Browse files Browse the repository at this point in the history
2차 MVP 릴리즈
  • Loading branch information
dldmsql authored Aug 26, 2024
2 parents d03723f + 28211f1 commit fb16248
Show file tree
Hide file tree
Showing 71 changed files with 2,905 additions and 15 deletions.
84 changes: 84 additions & 0 deletions .github/workflows/cd-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Java CI with Gradle

on:
push:
branches: [ "dev" ]

jobs:
build:
## checkout후 자바 21 버전으로 설정을 합니다
runs-on: ubuntu-latest
env:
DB_URL: ${{ secrets.DB_URL }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
JASYPT_ENCRYPTOR_PASSWORD: ${{ secrets.JASYPT_ENCRYPTOR_PASSWORD }}

steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

- name: Set up Gradle
uses: gradle/gradle-build-action@v2

- name: Increase Gradle memory settings
run: |
echo "org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8" >> ~/.gradle/gradle.properties
echo "kotlin.daemon.jvmargs=-Xmx4g" >> ~/.gradle/gradle.properties
## gradlew 의 권한을 줍니다.
- name: Grant execute permission for gradlew
run: chmod +x gradlew

## gradle build
- name: Build with Gradle
run: ./gradlew clean build -x test

## 이미지 태그에 시간 설정을 하기위해서 현재 시간을 가져옵니다.
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"

- name: Show Current Time
run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
## AWS에 로그인. aws-region은 서울로 설정(ap-northeast-2)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
## ECR에 로그인
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
## sample라는 ECR 리파지터리에 현재 시간 태그를 생성하고, 푸쉬
## 앞의 스탭에서 ${{steps.current-time.outputs.formattedTime}}로 현재 시간을 가져옵니다.
- name: Build, tag, and push image to Amazon ECR
run: |
docker build --build-arg PASSWORD=$PASSWORD -t polabo:${{steps.current-time.outputs.formattedTime}} .
docker tag polabo:${{steps.current-time.outputs.formattedTime}} ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
docker push ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
env:
PASSWORD: ${{ secrets.JASYPT_ENCRYPTOR_PASSWORD }}

- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST_DEV }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_KEY }}
script: |
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${{ steps.login-ecr.outputs.registry }}/${{ secrets.ECR_REPOSITORY }}
docker stop polabo-dev
docker rm polabo-dev
docker pull ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
docker run -d -v /etc/localtime:/etc/localtime:ro -v /usr/share/zoneinfo/Asia/Seoul:/etc/timezone:ro -e ENVIRONMENT_VALUE=-Dspring.profiles.active=dev --name polabo-dev -p 8080:8080 --restart=always --network host ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
84 changes: 84 additions & 0 deletions .github/workflows/cd-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Java CI with Gradle

on:
push:
branches: [ "main" ]

jobs:
build:
## checkout후 자바 21 버전으로 설정을 합니다
runs-on: ubuntu-latest
env:
DB_URL: ${{ secrets.DB_URL }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
JASYPT_ENCRYPTOR_PASSWORD: ${{ secrets.JASYPT_ENCRYPTOR_PASSWORD }}

steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

- name: Set up Gradle
uses: gradle/gradle-build-action@v2

- name: Increase Gradle memory settings
run: |
echo "org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8" >> ~/.gradle/gradle.properties
echo "kotlin.daemon.jvmargs=-Xmx4g" >> ~/.gradle/gradle.properties
## gradlew 의 권한을 줍니다.
- name: Grant execute permission for gradlew
run: chmod +x gradlew

## gradle build
- name: Build with Gradle
run: ./gradlew clean build -x test

## 이미지 태그에 시간 설정을 하기위해서 현재 시간을 가져옵니다.
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"

- name: Show Current Time
run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
## AWS에 로그인. aws-region은 서울로 설정(ap-northeast-2)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
## ECR에 로그인
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
## sample라는 ECR 리파지터리에 현재 시간 태그를 생성하고, 푸쉬
## 앞의 스탭에서 ${{steps.current-time.outputs.formattedTime}}로 현재 시간을 가져옵니다.
- name: Build, tag, and push image to Amazon ECR
run: |
docker build --build-arg PASSWORD=$PASSWORD -t polabo:${{steps.current-time.outputs.formattedTime}} .
docker tag polabo:${{steps.current-time.outputs.formattedTime}} ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
docker push ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
env:
PASSWORD: ${{ secrets.JASYPT_ENCRYPTOR_PASSWORD }}

- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_KEY }}
script: |
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${{ steps.login-ecr.outputs.registry }}/${{ secrets.ECR_REPOSITORY }}
docker stop polabo-dev
docker rm polabo-dev
docker pull ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
docker run -d -v /etc/localtime:/etc/localtime:ro -v /usr/share/zoneinfo/Asia/Seoul:/etc/timezone:ro -e ENVIRONMENT_VALUE=-Dspring.profiles.active=dev --name polabo-dev -p 8080:8080 --restart=always --network host ${{ secrets.ECR_REGISTRY }}/polabo:${{steps.current-time.outputs.formattedTime}}
11 changes: 11 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
FROM openjdk:21

ARG JAR_FILE=build/libs/*SNAPSHOT.jar
ARG PASSWORD

COPY ${JAR_FILE} polabo.jar

ENV JASYPT_ENCRYPTOR_PASSWORD=${PASSWORD}

#ENTRYPOINT ["sh", "-c", "java -jar /polabo.jar -Djasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}"]
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} ${ENVIRONMENT_VALUE} -jar /polabo.jar", "-Djasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}"]
81 changes: 69 additions & 12 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,31 +1,70 @@
import org.jetbrains.kotlin.gradle.idea.proto.com.google.protobuf.GeneratedCodeInfoKt.annotation
import nu.studer.gradle.jooq.JooqEdition
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
val kotlinVersion = "1.9.24"
id("org.springframework.boot") version "3.3.1"
id("io.spring.dependency-management") version "1.1.5"
kotlin("jvm") version kotlinVersion
kotlin("plugin.spring") version kotlinVersion
kotlin("plugin.jpa") version kotlinVersion
kotlin("plugin.allopen") version kotlinVersion
// kotlin("plugin.jpa") version kotlinVersion
// kotlin("plugin.allopen") version kotlinVersion
kotlin("kapt") version kotlinVersion
id("nu.studer.jooq") version "9.0"
}

group = "com.ddd"
version = "0.0.1-SNAPSHOT"

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
languageVersion.set(JavaLanguageVersion.of(21))
}
}

allOpen {
annotation("jakarta.persistence.Entity")
annotation("jakarta.persistence.MappedSuperclass")
annotation("jakarta.persistence.Embeddable")
jooq {
version.set("3.18.10")
edition.set(JooqEdition.OSS)

configurations {
create("main") {
generateSchemaSourceOnCompilation.set(true)
jooqConfiguration.apply {
logging = org.jooq.meta.jaxb.Logging.WARN
jdbc.apply {
driver = "com.mysql.cj.jdbc.Driver"
url = System.getenv("DB_URL") ?: "jdbc:mysql://localhost:3306/polabo"
user = System.getenv("DB_USER") ?: "polabo"
password = System.getenv("DB_PASSWORD") ?: "polabo"
}
generator.apply {
name = "org.jooq.codegen.KotlinGenerator"
database.apply {
name = "org.jooq.meta.mysql.MySQLDatabase"
excludes = "sys"
}
generate.apply {
isDeprecated = false
isFluentSetters = true
isRecords = true
}
target.apply {
packageName = "com.ddd.sonnypolabobe.jooq"
directory = "build/generated-src/jooq/main"
}
strategy.name = "org.jooq.codegen.DefaultGeneratorStrategy"
}
}
}
}
}

//allOpen {
// annotation("jakarta.persistence.Entity")
// annotation("jakarta.persistence.MappedSuperclass")
// annotation("jakarta.persistence.Embeddable")
//}

repositories {
mavenCentral()
}
Expand All @@ -34,17 +73,35 @@ dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")
// runtimeOnly("org.mariadb.jdbc:mariadb-java-client")
// implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.jetbrains.kotlin:kotlin-reflect")
runtimeOnly("com.mysql:mysql-connector-j")
implementation("org.springframework.boot:spring-boot-starter-jooq")
jooqGenerator("com.mysql:mysql-connector-j")
jooqGenerator("org.jooq:jooq-meta:3.18.10")
jooqGenerator("org.jooq:jooq-codegen:3.18.10")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
implementation ("com.github.f4b6a3:uuid-creator:5.3.3")
implementation("software.amazon.awssdk:s3:2.20.68")
implementation("com.amazonaws:aws-java-sdk-s3:1.12.561")
implementation("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("io.netty:netty-resolver-dns-native-macos:4.1.68.Final:osx-aarch_64")

implementation("io.jsonwebtoken:jjwt-api:0.11.2")
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.2")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.2")
}

kotlin {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict")
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "21"
kotlinDaemonJvmArguments = listOf("-Xmx4096m", "-Xms2560m", "-XX:+UseParallelGC")
}
}

Expand Down
26 changes: 26 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
version: '3.7'

services:
mysql:
image: mysql:latest
container_name: polabo_mysql
hostname: polabo_mysql
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_USER=polabo
- MYSQL_PASSWORD=polabo
- MYSQL_ROOT_PASSWORD=polabo
- MYSQL_HOST=localhost
- MYSQL_PORT=3306
- MYSQL_DATABASE=polabo
ports:
- "3306:3306"


# redis:
# image: redis
# container_name: polabo_redis
# hostname: polabo_redis
# ports:
# - "6379:6379"
2 changes: 2 additions & 0 deletions gradle/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Increase the maximum heap size for the Kotlin daemon
kotlin.daemon.jvmargs=-Xmx4g
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.ddd.sonnypolabobe

import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.scheduling.annotation.EnableScheduling

@EnableScheduling
@SpringBootApplication
class SonnyPolaboBeApplication

inline fun <reified T> T.logger() = LoggerFactory.getLogger(T::class.java)!!
fun main(args: Array<String>) {
runApplication<SonnyPolaboBeApplication>(*args)
}
Loading

0 comments on commit fb16248

Please sign in to comment.