Skip to content

[feat] 여행 일정 생성 요청 DTO 수정 #7

[feat] 여행 일정 생성 요청 DTO 수정

[feat] 여행 일정 생성 요청 DTO 수정 #7

Workflow file for this run

name: Deploy to EC2
on:
push:
branches:
- main # 메인 브랜치 푸시 시 실행
jobs:
build-and-deploy:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_database
MYSQL_USER: test_user
MYSQL_PASSWORD: test_password
steps:
# 1. 소스코드 체크아웃
- name: Checkout code
uses: actions/checkout@v2
# 2. JDK 설정 (Java 17 설치)
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# 3. Gradle 빌드
- name: Build application
env:
APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }}
TEST_APPLICATION_PROPERTIES: ${{ secrets.TEST_APPLICATION_PROPERTIES }}
run: |
# src/main/resources 및 src/test/resources 디렉토리 생성
mkdir -p src/main/resources src/test/resources
# application.properties 파일 생성
echo "$APPLICATION_PROPERTIES" > src/main/resources/application.properties
echo "$TEST_APPLICATION_PROPERTIES" > src/test/resources/application.properties
# 권한 설정
chmod 600 src/main/resources/application.properties
chmod 600 src/test/resources/application.properties
# gradlew 실행 권한 부여
chmod +x ./gradlew
# Gradle 빌드 실행
./gradlew clean build
# JAR 파일 위치 확인
echo "JAR file generated in:"
ls build/libs/
# 빌드 성공 후 application.properties 삭제
rm -f src/main/resources/application.properties
rm -f src/test/resources/application.properties
# 빌드된 JAR 파일을 Docker 빌드 컨텍스트로 복사
cp build/libs/*SNAPSHOT.jar .
# 4. Docker 이미지 빌드 및 푸시
- name: Build and Push Docker Image
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
echo "Building Docker Image..."
# Docker 이미지 빌드
docker build -t teniuscom/plango-backend:latest .
# Docker 이미지 확인 (빌드된 이미지 확인)
docker images
# Docker Hub 로그인
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
# 태그 확인 및 푸시
docker push teniuscom/plango-backend:latest
# 5. docker-compose.yml 및 환경 파일 EC2로 전송
- name: Upload Docker Compose to EC2
env:
EC2_PRIVATE_KEY: ${{ secrets.EC2_PRIVATE_KEY }}
EC2_USER: ${{ secrets.EC2_USER }}
EC2_HOST: ${{ secrets.EC2_HOST }}
MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }}
MYSQL_USER: ${{ secrets.MYSQL_USER }}
MYSQL_PASSWORD: ${{ secrets.MYSQL_PASSWORD }}
run: |
echo "${{ secrets.EC2_PRIVATE_KEY }}" > private_key.pem
chmod 600 private_key.pem
# 환경 변수 파일 생성
echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" > .env
echo "MYSQL_USER=${MYSQL_USER}" >> .env
echo "MYSQL_PASSWORD=${MYSQL_PASSWORD}" >> .env
# Docker Compose 및 .env 파일 전송
scp -i private_key.pem -o StrictHostKeyChecking=no docker-compose.yml $EC2_USER@$EC2_HOST:/home/ubuntu/plango
scp -i private_key.pem -o StrictHostKeyChecking=no .env $EC2_USER@$EC2_HOST:/home/ubuntu/plango
# 6. EC2에서 Docker Compose 실행
- name: Deploy on EC2
env:
EC2_PRIVATE_KEY: ${{ secrets.EC2_PRIVATE_KEY }}
EC2_USER: ${{ secrets.EC2_USER }}
EC2_HOST: ${{ secrets.EC2_HOST }}
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
# EC2 key pair 준비
echo "${{ secrets.EC2_PRIVATE_KEY }}" > private_key.pem
chmod 600 private_key.pem
# SSH로 EC2 접속 및 Docker Compose 실행
ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USER@$EC2_HOST << EOF
cd /home/ubuntu/plango
# Docker 서비스 상태 확인 및 실행
if ! systemctl is-active --quiet docker; then
echo "Docker service is not running. Starting Docker..."
sudo systemctl start docker
else
echo "Docker service is already running."
fi
# Docker Hub 로그인
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
# Docker 이미지 Pull
docker-compose pull
# 기존 컨테이너 중지 및 삭제
docker-compose down || true
# 새 컨테이너 실행
docker-compose up -d
echo "Application deployed successfully!"
EOF