Skip to content

Commit 680865d

Browse files
committed
[feat] CI/CD 수정
기존에는 github actions에서 배포 작업을 수행할 때, 빌드된 docker image에 application.properties가 포함된다는 보안 이슈가 있었습니다. 그래서 gradle 빌드 수행하는 과정에서 application.properties를 포함하지 않도록 수정하고, docker-compose에서 application.properties를 볼륨으로 설정해줬습니다.
1 parent 32b7232 commit 680865d

File tree

2 files changed

+19
-36
lines changed

2 files changed

+19
-36
lines changed

.github/workflows/deploy.yml

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -38,31 +38,14 @@ jobs:
3838
APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }}
3939
TEST_APPLICATION_PROPERTIES: ${{ secrets.TEST_APPLICATION_PROPERTIES }}
4040
run: |
41-
# src/main/resources 및 src/test/resources 디렉토리 생성
42-
mkdir -p src/main/resources src/test/resources
43-
44-
# application.properties 파일 생성
45-
echo "$APPLICATION_PROPERTIES" > src/main/resources/application.properties
46-
echo "$TEST_APPLICATION_PROPERTIES" > src/test/resources/application.properties
47-
48-
# 권한 설정
49-
chmod 600 src/main/resources/application.properties
50-
chmod 600 src/test/resources/application.properties
41+
echo "Build Gradle..."
5142
5243
# gradlew 실행 권한 부여
5344
chmod +x ./gradlew
5445
5546
# Gradle 빌드 실행
5647
./gradlew clean build
5748
58-
# JAR 파일 위치 확인
59-
echo "JAR file generated in:"
60-
ls build/libs/
61-
62-
# 빌드 성공 후 application.properties 삭제
63-
rm -f src/main/resources/application.properties
64-
rm -f src/test/resources/application.properties
65-
6649
# 빌드된 JAR 파일을 Docker 빌드 컨텍스트로 복사
6750
cp build/libs/*SNAPSHOT.jar .
6851
@@ -72,17 +55,14 @@ jobs:
7255
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
7356
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
7457
run: |
75-
echo "Building Docker Image..."
76-
77-
# Docker 이미지 빌드
78-
docker build -t teniuscom/plango-backend:latest .
79-
80-
# Docker 이미지 확인 (빌드된 이미지 확인)
81-
docker images
58+
echo "Build Docker Image..."
8259
8360
# Docker Hub 로그인
8461
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
8562
63+
# Docker 이미지 빌드
64+
docker build -t teniuscom/plango-backend:latest .
65+
8666
# 태그 확인 및 푸시
8767
docker push teniuscom/plango-backend:latest
8868
@@ -104,9 +84,13 @@ jobs:
10484
echo "MYSQL_USER=${MYSQL_USER}" >> .env
10585
echo "MYSQL_PASSWORD=${MYSQL_PASSWORD}" >> .env
10686
107-
# Docker Compose 및 .env 파일 전송
87+
# application.properties 파일 생성
88+
echo "$APPLICATION_PROPERTIES" > application.properties
89+
90+
# docker-compose.yml, application.properties, .env 파일 전송
10891
scp -i private_key.pem -o StrictHostKeyChecking=no docker-compose.yml $EC2_USER@$EC2_HOST:/home/ubuntu/plango
10992
scp -i private_key.pem -o StrictHostKeyChecking=no .env $EC2_USER@$EC2_HOST:/home/ubuntu/plango
93+
scp -i private_key.pem -o StrictHostKeyChecking=no application.properties $EC2_USER@$EC2_HOST:/home/ubuntu/plango
11094
11195
# 6. EC2에서 Docker Compose 실행
11296
- name: Deploy on EC2
@@ -125,13 +109,8 @@ jobs:
125109
ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USER@$EC2_HOST << EOF
126110
cd /home/ubuntu/plango
127111
128-
# Docker 서비스 상태 확인 및 실행
129-
if ! systemctl is-active --quiet docker; then
130-
echo "Docker service is not running. Starting Docker..."
131-
sudo systemctl start docker
132-
else
133-
echo "Docker service is already running."
134-
fi
112+
# Docker 서비스 실행
113+
sudo systemctl start docker || true
135114
136115
# Docker Hub 로그인
137116
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
@@ -146,4 +125,5 @@ jobs:
146125
docker-compose up -d
147126
148127
echo "Application deployed successfully!"
128+
149129
EOF

docker-compose.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ services:
3131
ports:
3232
- "8080:8080"
3333
environment:
34+
SPRING_CONFIG_LOCATION: file:/app/config/application.properties
3435
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/plango
3536
SPRING_DATASOURCE_USERNAME: ${MYSQL_USER}
3637
SPRING_DATASOURCE_PASSWORD: ${MYSQL_PASSWORD}
@@ -39,9 +40,11 @@ services:
3940
depends_on:
4041
- mysql
4142
- redis
42-
volumes:
43-
# 로컬 디렉터리를 컨테이너 내부에 마운트
44-
- /home/ubuntu/storage:/home/ubuntu/storage # 파일 저장소
43+
volumes: # 로컬 디렉터리를 컨테이너 내부에 마운트
44+
# 파일 저장소
45+
- /home/ubuntu/storage:/home/ubuntu/storage
46+
# application.properties 파일을 외부에서 주입
47+
- /home/ubuntu/plango/application.properties:/app/config/application.properties
4548
networks:
4649
- app-network
4750

0 commit comments

Comments
 (0)