Skip to content

Commit 130fd45

Browse files
authored
Merge pull request #24 from studio-recoding/dev
[🚀feat] 1차 배포
2 parents 0d50403 + 62adfa5 commit 130fd45

File tree

104 files changed

+5743
-21
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+5743
-21
lines changed

.github/workflows/dev-deploy.yml

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
name: Deploy to Dev
2+
3+
## dev에 push 일어날 때마다(즉, 하위 디렉토리에서 merge 될 때마다) 빌드
4+
on:
5+
push:
6+
branches: [ "dev" ]
7+
8+
jobs:
9+
build:
10+
## checkout 후 자바 17 버전으로 설정
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v3
14+
- name: Set up JDK 17
15+
uses: actions/setup-java@v3
16+
with:
17+
java-version: '17'
18+
distribution: 'temurin'
19+
20+
## gradlew에 권한 부여
21+
- name: Grant execute permission for gradlew
22+
run: chmod +x gradlew
23+
24+
## Copy properties files
25+
- name: Make application-dev.yml
26+
run: |
27+
touch ./src/main/resources/application-dev.yml
28+
echo "$PROPERTIES_DEV" > ./src/main/resources/application-dev.yml
29+
# Make env file
30+
env:
31+
PROPERTIES_DEV: ${{ secrets.PROPERTIES_DEV }}
32+
33+
## gradle build
34+
- name: Build with Gradle
35+
run: ./gradlew clean build
36+
37+
## docker metadata(namespace/repository)
38+
- name: Docker meta
39+
id: docker_meta
40+
uses: crazy-max/ghaction-docker-meta@v1
41+
with:
42+
images: jeonhaeseung/ness-server-dev
43+
44+
## 멀티-플랫폼 빌드 도구 Buildx 사용
45+
- name: Set up Docker Buildx
46+
uses: docker/setup-buildx-action@v1
47+
48+
## DockerHub에 로그인
49+
- name: Login to DockerHub
50+
uses: docker/login-action@v1
51+
with:
52+
username: ${{ secrets.DOCKER_USERNAME }}
53+
password: ${{ secrets.DOCKER_PASSWORD }}
54+
55+
## 위에서 설정한 테그를 참고해 push
56+
- name: Docker build & push
57+
uses: docker/build-push-action@v2
58+
with:
59+
context: .
60+
file: ./Dockerfile.dev
61+
platforms: linux/amd64
62+
push: true
63+
tags: ${{ steps.docker_meta.outputs.tags }}
64+
65+
## 원격에 접속 및 디렉토리 생성
66+
- name: create remote directory
67+
uses: appleboy/ssh-action@master
68+
with:
69+
host: ${{ secrets.HOST_DEV }}
70+
username: ${{ secrets.USER_DEV }}
71+
key: ${{ secrets.KEY_DEV }}
72+
script: mkdir -p ./dev
73+
74+
## 소스 코드 복사 붙여넣기
75+
- name: copy source via ssh key
76+
uses: burnett01/[email protected]
77+
with:
78+
switches: -avzr --delete
79+
remote_path: ./dev
80+
remote_host: ${{ secrets.HOST_DEV }}
81+
remote_user: ${{ secrets.USER_DEV }}
82+
remote_key: ${{ secrets.KEY_DEV }}
83+
84+
## EC2에 배포(CD)
85+
- name: executing remote ssh commands using password
86+
uses: appleboy/ssh-action@master
87+
with:
88+
host: ${{ secrets.HOST_DEV }}
89+
username: ${{ secrets.USER_DEV }}
90+
key: ${{ secrets.KEY_DEV }}
91+
script: |
92+
sh ./dev/config/scripts/deploy.sh
93+
94+
sudo docker stop $(sudo docker ps -a -q)
95+
sudo docker rm $(sudo docker ps -a -q)
96+
sudo docker rmi $(sudo docker images -q)
97+
docker pull jeonhaeseung/ness-server-dev:dev
98+
docker run -d --name backend-server -p 8080:8080 --restart unless-stopped jeonhaeseung/ness-server-dev:dev

.github/workflows/prod-deploy.yml

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
name: Deploy to Prod
2+
3+
## main에 릴리즈가 일어날 때마다 빌드 및 배포
4+
on:
5+
push:
6+
branches: [ main ]
7+
tags: [ "v*.*.*" ]
8+
9+
jobs:
10+
build:
11+
## checkout 후 자바 17 버전으로 설정
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v3
15+
- name: Set up JDK 17
16+
uses: actions/setup-java@v3
17+
with:
18+
java-version: '17'
19+
distribution: 'temurin'
20+
21+
## gradlew에 권한 부여
22+
- name: Grant execute permission for gradlew
23+
run: chmod +x gradlew
24+
25+
## Copy properties files
26+
- name: Make application-prod.yml
27+
run: |
28+
touch ./src/main/resources/application-prod.yml
29+
echo "$PROPERTIES_PROD" > ./src/main/resources/application-prod.yml
30+
# Make env file
31+
env:
32+
PROPERTIES_PROD: ${{ secrets.PROPERTIES_PROD }}
33+
34+
## gradle build
35+
- name: Build with Gradle
36+
run: ./gradlew clean build
37+
38+
## docker metadata(namespace/repository)
39+
- name: Docker meta
40+
id: docker_meta
41+
uses: crazy-max/ghaction-docker-meta@v1
42+
with:
43+
images: jeonhaeseung/ness-server-prod
44+
tag-semver: |
45+
{{version}}
46+
{{major}}.{{minor}}
47+
48+
## 멀티-플랫폼 빌드 도구 Buildx 사용
49+
- name: Set up Docker Buildx
50+
uses: docker/setup-buildx-action@v1
51+
52+
## DockerHub에 로그인
53+
- name: Login to DockerHub
54+
uses: docker/login-action@v1
55+
with:
56+
username: ${{ secrets.DOCKER_USERNAME }}
57+
password: ${{ secrets.DOCKER_PASSWORD }}
58+
59+
## 위에서 설정한 테그를 참고해 push
60+
- name: Docker build & push
61+
uses: docker/build-push-action@v2
62+
with:
63+
context: .
64+
file: ./Dockerfile.prod
65+
platforms: linux/amd64
66+
push: true
67+
tags: ${{ steps.docker_meta.outputs.tags }}
68+
labels: ${{ steps.docker_meta.outputs.labels }}
69+
70+
## 원격에 접속 및 디렉토리 생성
71+
- name: create remote directory
72+
uses: appleboy/ssh-action@master
73+
with:
74+
host: ${{ secrets.HOST_PROD }}
75+
username: ${{ secrets.USER_PROD }}
76+
key: ${{ secrets.KEY_PROD }}
77+
script: mkdir -p ./prod
78+
79+
## 소스 코드 복사 붙여넣기
80+
- name: copy source via ssh key
81+
uses: burnett01/[email protected]
82+
with:
83+
switches: -avzr --delete
84+
remote_path: ./prod
85+
remote_host: ${{ secrets.HOST_PROD }}
86+
remote_user: ${{ secrets.USER_PROD }}
87+
remote_key: ${{ secrets.KEY_PROD }}
88+
89+
## EC2에 배포(CD)
90+
- name: executing remote ssh commands using password
91+
uses: appleboy/ssh-action@master
92+
with:
93+
host: ${{ secrets.HOST_PROD }}
94+
username: ${{ secrets.USER_PROD }}
95+
key: ${{ secrets.KEY_PROD }}
96+
script: |
97+
sh ./prod/config/scripts/deploy.sh
98+
99+
sudo docker stop $(sudo docker ps -a -q)
100+
sudo docker rm $(sudo docker ps -a -q)
101+
sudo docker rmi $(sudo docker images -q)
102+
docker pull jeonhaeseung/ness-server-prod:prod
103+
docker run -d --name backend-server -p 8080:8080 --restart unless-stopped jeonhaeseung/ness-server-prod:prod

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,7 @@ out/
3535

3636
### VS Code ###
3737
.vscode/
38+
39+
### Secrets ###
40+
application-dev.yml
41+
application-prod.yml

Dockerfile.dev

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FROM openjdk:17-alpine AS builder
2+
ARG JAR_FILE=build/libs/*.jar
3+
COPY ${JAR_FILE} app.jar
4+
ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=dev", "/app.jar"]

Dockerfile.prod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FROM openjdk:17-alpine AS builder
2+
ARG JAR_FILE=build/libs/*.jar
3+
COPY ${JAR_FILE} app.jar
4+
ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=prod", "/app.jar"]

README.md

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,26 @@
1-
# NESS_BE
2-
LLM 기반 인공지능 비서 서비스 NESS BE 레포지토리
1+
## ⚙️ Architecture
2+
<div>
3+
<img alt="Spring Boot" src ="https://img.shields.io/badge/spring boot-6DB33F.svg?&style=for-the-badge&logo=springboot&logoColor=white"/>
4+
<img alt="GCP OAuth" src ="https://img.shields.io/badge/GCP OAuth-4285F4.svg?style=for-the-badge&logo=googlecloud&logoColor=white"/>
5+
<img alt="Redis" src ="https://img.shields.io/badge/Redis-DC382D.svg?style=for-the-badge&logo=redis&logoColor=white"/>
6+
<img alt="Docker" src ="https://img.shields.io/badge/docker-2496ED.svg?style=for-the-badge&logo=docker&logoColor=white"/>
7+
<img alt="Amazon S3" src ="https://img.shields.io/badge/AWS S3-569A31.svg?style=for-the-badge&logo=amazons3&logoColor=white"/>
8+
<img alt="Amazon RDS" src ="https://img.shields.io/badge/AWS RDS-527FFF.svg?style=for-the-badge&logo=amazonrds&logoColor=white"/>
9+
<img alt="Github Actions" src ="https://img.shields.io/badge/Github Actions-232F3E.svg?style=for-the-badge&logo=githubactions&logoColor=white"/>
10+
</div>
11+
12+
<img width="1920" alt="ness-architecture-backend" src="https://github.com/studio-recoding/NESS_BE/assets/89632139/e60789b9-c05c-4baf-9486-fed1bf5b6bc0">
13+
14+
## ✅ How to run
15+
### 1) Prerequisites
16+
- java version: "17.0.6" 2023-01-17 LTS
17+
- Spring boot version: 3.2.2
18+
- Project: Gradle-Groovy
19+
- IntelliJ IDEA or eclipse
20+
- MySQL Workbrench
21+
22+
### 2) Clone
23+
Clone this repository to your local computer using:
24+
```bash
25+
https://github.com/studio-recoding/NESS_BE.git
26+
```

build.gradle

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
plugins {
22
id 'java'
3-
id 'org.springframework.boot' version '3.0.12'
3+
id 'org.springframework.boot' version '3.2.3'
44
id 'io.spring.dependency-management' version '1.1.3'
55
}
66

77
group = 'com.recoding'
8-
version = '0.0.1-SNAPSHOT'
8+
version = '0.0.3-SNAPSHOT'
9+
10+
jar {
11+
enabled = false
12+
}
913

1014
java {
1115
sourceCompatibility = '17'
@@ -21,15 +25,47 @@ repositories {
2125
mavenCentral()
2226
}
2327

28+
ext {
29+
set('springCloudVersion', "2023.0.0")
30+
}
31+
2432
dependencies {
25-
//implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
33+
implementation 'org.springframework.boot:spring-boot-starter' //mysql connect를 위해 필요
34+
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
2635
implementation 'org.springframework.boot:spring-boot-starter-web'
36+
implementation 'org.springframework.boot:spring-boot-starter-validation'
37+
//Mail
38+
implementation 'org.springframework.boot:spring-boot-starter-mail'
39+
40+
//thymeleaf(for email service)
41+
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
42+
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
43+
2744
compileOnly 'org.projectlombok:lombok'
28-
//runtimeOnly 'com.mysql:mysql-connector-j'
45+
runtimeOnly 'com.mysql:mysql-connector-j'
2946
annotationProcessor 'org.projectlombok:lombok'
47+
3048
testImplementation 'org.springframework.boot:spring-boot-starter-test'
49+
3150
//Swagger
3251
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
52+
//Security
53+
implementation 'org.springframework.boot:spring-boot-starter-security'
54+
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
55+
//Jwt
56+
implementation group: 'com.auth0', name: 'java-jwt', version: '3.14.0'
57+
//Redis
58+
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
59+
//FeignClient
60+
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
61+
//Object Mapper
62+
//implementation 'com.fasterxml.jackson.core:jackson-databind:2.16.0'
63+
}
64+
65+
dependencyManagement {
66+
imports {
67+
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
68+
}
3369
}
3470

3571
tasks.named('bootBuildImage') {

0 commit comments

Comments
 (0)