@@ -250,8 +250,10 @@ jobs:
250250 echo "===== 기존 컨테이너 종료 & 제거 ====="
251251 docker stop app1 2>/dev/null || true
252252 docker rm app1 2>/dev/null || true
253- # EC2 내부에서 prod.env 파일 생성
254- cat > /home/ec2-user/prod.env << 'EOF'
253+
254+ # EC2 내부에서 prod.env 파일 생성 (기존 파일 있으면 덮어쓰기)
255+ mkdir -p /home/ec2-user/configs
256+ cat > /home/ec2-user/configs/prod.env << 'EOF'
255257 SPRING_PROFILES_ACTIVE=prod
256258
257259 CUSTOM_JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
@@ -261,7 +263,8 @@ jobs:
261263 PROD_DATASOURCE_DRIVER=com.mysql.cj.jdbc.Driver
262264 PROD_DATASOURCE_USERNAME=root
263265 PROD_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }}
264- PROD_JPA_HIBERNATE_DDL_AUTO=update
266+ # 추후 validate 변경
267+ PROD_JPA_HIBERNATE_DDL_AUTO=update
265268
266269 PROD_REDIS_HOST=redis_1
267270 PROD_REDIS_PORT=6379
@@ -272,23 +275,26 @@ jobs:
272275 send_email_password=${{ secrets.EMAIL_PASSWORD }}
273276 EOF
274277
278+ # 파일 권한 최소화
279+ chmod 600 /home/ec2-user/configs/prod.env
280+
275281 # EC2에서 GHCR 로그인
276282 echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
277283
278284 # 최신 이미지 pull & 컨테이너 실행
279285 docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest
280- docker stop app1 2>/dev/null || true
281- docker rm app1 2>/dev/null || true
282- docker run --env-file /home/ec2-user/prod.env \
286+
287+ echo "===== 새로운 컨테이너 실행 ====="
288+ docker run --env-file /home/ec2-user/configs/ prod.env \
283289 -d --name app1 \
284290 --network common \
291+ --restart unless-stopped \
285292 -p 8080:8080 \
286293 ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest
287294 echo "===== 새 컨테이너 로그 출력 ====="
288295 sleep 5
289296 docker logs --tail=100 app1 || true
290297
291298 echo "===== 배포 완료 ====="
292- # dangling image 정리 + .env 삭제
299+ # dangling image 정리
293300 docker rmi $(docker images -f "dangling=true" -q) || true
294- rm -f /home/ec2-user/prod.env
0 commit comments