1- name : Deploy to AWS EC2 using Docker
1+ name : Deploy to Ubuntu Server using Docker
22
33on :
44 push :
77
88env :
99 DOCKER_IMAGE_NAME : kanepark/app
10- EC2_HOST : ec2-3-35-214-67.ap-northeast-2.compute.amazonaws.com
11- EC2_SSH_USER : ubuntu
12- PRIVATE_KEY : ${{ secrets.EC2_SSH_PRIVATE_KEY }}
10+ SERVER_HOST : 211.117.197.184
11+ SERVER_SSH_USER : parkhaein
12+ PRIVATE_KEY : ${{ secrets.SSH_PRIVATE_KEY }}
1313
1414jobs :
1515 build-and-push-docker :
16-
1716 runs-on : ubuntu-latest
1817
1918 steps :
2019 - name : Checkout
2120 uses : actions/checkout@v3
22- with :
23- token : ${{ secrets.SUBMODULE_TOKEN }}
24- submodules : true
2521
26- - name : Set up JDK 17
22+ - name : Set up JDK 21
2723 uses : actions/setup-java@v3
2824 with :
29- java-version : ' 17 '
25+ java-version : ' 21 '
3026 distribution : ' temurin'
3127
3228 - name : Grant execute permission for gradlew
3329 run : chmod +x ./gradlew
3430
3531 - name : Build with Gradle
36- env :
37- JASYPT_PASSWORD : ${{ secrets.JASYPT_PASSWORD }} # GitHub Secrets에서 비밀번호 가져오기
38- run : ./gradlew build -Djasypt.encryptor.password=${{ secrets.JASYPT_PASSWORD }} --info
39-
32+ run : ./gradlew clean build --info
4033
4134 - name : Build the Docker image
4235 run : docker build . --file Dockerfile --tag ${{ env.DOCKER_IMAGE_NAME }}:latest
4336
44-
45- - name : Login to Docker Hub using Access Token
46- run : echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
37+ - name : Login to Docker Hub
38+ uses : docker/login-action@v2
39+ with :
40+ username : ${{ secrets.KANE_DOCKER_USERNAME }}
41+ password : ${{ secrets.KANE_DOCKER_HUB_TOKEN }}
4742
4843 - name : Push the Docker image
4944 run : docker push ${{ env.DOCKER_IMAGE_NAME }}:latest
5045
51-
52-
53- deploy-to-ec2 :
54-
46+ deploy-to-ubuntu-server :
5547 needs : build-and-push-docker
5648 runs-on : ubuntu-latest
57-
49+
5850 steps :
59- - name : Deploy to EC2
51+ - name : Deploy to Ubuntu Server
6052 uses : appleboy/ssh-action@master
6153 with :
62- host : ${{ env.EC2_HOST }}
63- username : ${{ env.EC2_SSH_USER }}
64- key : ${{ env.PRIVATE_KEY }}
54+ host : ${{ env.SERVER_HOST }}
55+ username : ${{ env.SERVER_SSH_USER }}
56+ key : ${{ secrets.SSH_PRIVATE_KEY }}
57+ port : 234
6558 script : |
6659 LOG_DIR="/home/ubuntu/app-logs"
6760 mkdir -p $LOG_DIR
6861 touch $LOG_DIR/app.log
62+
63+ # sudo 명령어에 비밀번호 자동 입력
64+ echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker container prune -f
65+ echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker image prune -af
66+ echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker volume prune -f
67+ echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker system prune -af --volumes
68+
69+ # 기존 컨테이너 종료 (종료를 기다림)
70+ CONTAINER_ID=$(sudo docker ps -q --filter "publish=80")
6971
70-
71- sudo docker container prune -f
72- sudo docker image prune -af
73- sudo docker volume prune -f
74- sudo docker system prune -af --volumes
75-
76- CONTAINER_ID=$(sudo docker ps -q --filter "publish=80-8080")
77-
7872 if [ ! -z "$CONTAINER_ID" ]; then
79- sudo docker stop $CONTAINER_ID
80- sudo docker rm $CONTAINER_ID
73+ echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker stop $CONTAINER_ID
74+ echo "컨테이너 종료 대기 중..."
75+
76+ # 컨테이너 종료 상태를 기다림
77+ while true; do
78+ # 컨테이너 상태 확인
79+ CONTAINER_STATUS=$(sudo docker inspect --format '{{.State.Status}}' $CONTAINER_ID)
80+
81+ # 종료된 상태이면 루프 종료
82+ if [ "$CONTAINER_STATUS" == "exited" ]; then
83+ echo "컨테이너 종료 완료"
84+ break
85+ fi
86+
87+ # 1초 대기 후 다시 확인
88+ sleep 1
89+ done
8190 fi
82-
83- sudo docker pull ${{ env.DOCKER_HUB }} kanepark/app:latest
84- # sudo docker run --name container1 -d -p 80:8080 -e TZ=Asia/Seoul ${{ env.DOCKER_HUB }} kanepark/app:latest
85- sudo docker run --name container1 -d -p 80:8080 -e TZ=Asia/Seoul \
86- -v $LOG_DIR/app.log:/app/logs/app.log ${{ env.DOCKER_IMAGE_NAME }}:latest
91+
92+
93+ # Docker 이미지 업데이트 및 컨테이너 실행
94+ echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker pull ${{ env.DOCKER_IMAGE_NAME }}:latest
95+ echo "${{ secrets.SUDO_PASSWORD }}" | sudo -S docker run --name mindsync-be-container -d -p 80:8080 -e TZ=Asia/Seoul \
96+ -v $LOG_DIR/app.log:/app/logs/app.log ${{ env.DOCKER_IMAGE_NAME }}:latest
0 commit comments