Skip to content

Commit cb03c86

Browse files
committed
[Resolves #12] 자동 배포 구성 (#13)
* chore: 배포 관련 파일 작성 * chore: 배포 설정 - 레디스 테스트 로컬 프로파일에서만 실행하도록 설정 - application-prod.yml에서 데이터베이스 호스트 환경변수화 - gradle build clean build, jar 파일명 명시 - 배포 스크립트 작성 fix: clean 빌드로 변경 fix: jar 파일명 명시 * fix: docker-compose 설정 - scp시 기존 폴더 삭제 옵션 추가 * chore: .env 파일 생성 스크립트 추가 - 도커 컴포즈 컨테이너 이미지 버전 명시하도록 수정 * chore: spring 컨테이너 prod 프로파일로 실행하도록 설정 - docker-compose 통해 .env 파일 넘겨줌 - 배포 전 이전 배포 내리도록 수정 * fix: docker-compose에서 image build하도록 수정 - env_file 옵션 통해.env 파일 넘기도록 수정 * fix: mysql 컨테이너 포트 명시 - docker-compose로 빌드한 이미지 올리도록 설정 - 서버에서 docker hub 미리 인증 처리 필요 * chore: 최신버전 가져오기
1 parent cd686a4 commit cb03c86

File tree

4 files changed

+117
-1
lines changed

4 files changed

+117
-1
lines changed

.github/workflows/deploy.yml

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
name: deploy
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
8+
jobs:
9+
build:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v2
15+
16+
- name: Set up JDK 11
17+
uses: actions/setup-java@v1
18+
with:
19+
java-version: 11
20+
21+
- name: Set up Docker
22+
uses: docker/setup-buildx-action@v2
23+
24+
- name: Grant execute permission for gradlew
25+
run: chmod +x ./gradlew
26+
shell: bash
27+
28+
- name: Build with Gradle
29+
run: ./gradlew clean build
30+
31+
- name: Build image
32+
run: docker build . -t ${{ secrets.DOCKERHUB_USERNAME }}/concoder-server:latest
33+
34+
- name: Docker login
35+
run: echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
36+
37+
- name: Push image
38+
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/concoder-server:latest
39+
40+
- name: Copy Docker files
41+
uses: appleboy/scp-action@master
42+
with:
43+
host: ${{ secrets.SSH_IP }}
44+
username: ${{ secrets.SSH_USERNAME }}
45+
key: ${{ secrets.SSH_KEY }}
46+
source: 'docker-compose.yml'
47+
target: 'compose'
48+
rm: true
49+
50+
- name: SSH remote and Run Docker Compose
51+
env:
52+
SPRING_DATABASE_SCHEMA: ${{ secrets.SPRING_DATABASE_SCHEMA}}
53+
SPRING_DATABASE_USERNAME: ${{ secrets.SPRING_DATABASE_USERNAME}}
54+
SPRING_DATABASE_PASSWORD: ${{ secrets.SPRING_DATABASE_PASSWORD}}
55+
SPRING_DATABASE_HOST: ${{ secrets.SPRING_DATABASE_HOST}}
56+
REDIS_HOST: ${{ secrets.REDIS_HOST}}
57+
uses: appleboy/ssh-action@master
58+
with:
59+
host: ${{ secrets.SSH_IP }}
60+
username: ${{ secrets.SSH_USERNAME }}
61+
key: ${{ secrets.SSH_KEY }}
62+
envs: SPRING_DATABASE_SCHEMA,SPRING_DATABASE_USERNAME,SPRING_DATABASE_PASSWORD,SPRING_DATABASE_HOST,REDIS_HOST
63+
script: |
64+
echo $SPRING_DATABASE_HOST
65+
echo $SPRING_DATABASE_SCHEMA
66+
echo $SPRING_DATABASE_USERNAME
67+
echo $SPRING_DATABASE_PASSWORD
68+
echo $REDIS_HOST
69+
cd compose
70+
71+
sudo touch .env
72+
sudo echo "
73+
SPRING_DATABASE_SCHEMA=$SPRING_DATABASE_SCHEMA
74+
SPRING_DATABASE_USERNAME=$SPRING_DATABASE_USERNAME
75+
SPRING_DATABASE_PASSWORD=$SPRING_DATABASE_PASSWORD
76+
SPRING_DATABASE_HOST=$SPRING_DATABASE_HOST
77+
REDIS_HOST=$REDIS_HOST" | sudo tee .env
78+
79+
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/concoder-server:latest
80+
docker compose down
81+
docker-compose up -d

Dockerfile

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
FROM openjdk:11
2+
ARG JAR_FILE=build/libs/concoder-0.0.1-SNAPSHOT.jar
3+
COPY ${JAR_FILE} app.jar
4+
ENV SPRING_PROFILES_ACTIVE=prod
5+
ENTRYPOINT ["java","-jar","/app.jar"]

docker-compose.yml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
version: '3.0'
2+
3+
services:
4+
app:
5+
container_name: concoder-app
6+
image: binimini/concoder-server:latest
7+
ports:
8+
- 8080:8080
9+
env_file:
10+
- .env
11+
12+
mysql:
13+
container_name: concoder-mysql
14+
image: mysql:8.0
15+
ports:
16+
- 3306:3306
17+
volumes:
18+
- concoder-volume:/var/lib/mysql
19+
environment:
20+
MYSQL_ROOT_PASSWORD: ${SPRING_DATABASE_PASSWORD}
21+
MYSQL_DATABASE: ${SPRING_DATABASE_SCHEMA}
22+
23+
redis:
24+
container_name: concoder-redis
25+
image: redis:6.0
26+
ports:
27+
- 6379:6379
28+
29+
volumes:
30+
concoder-volume:

src/main/resources/application-prod.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
spring:
22
datasource:
3-
url: jdbc:mysql://${SPRING_DATABASE_HOST}:3306/${SPRING_DATABASE_SCHEMA}?allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
3+
url: jdbc:mysql://${SPRING_DATABASE_HOST}:3306/${SPRING_DATABASE_SCHEMA}?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
44
username: ${SPRING_DATABASE_USERNAME}
55
password: ${SPRING_DATABASE_PASSWORD}
66
driver-class-name: com.mysql.cj.jdbc.Driver

0 commit comments

Comments
 (0)