1
- name : Deploy to AWS EC2 using Docker
1
+ name : Deploy to Ubuntu Server using Docker
2
2
3
3
on :
4
4
push :
7
7
8
8
env :
9
9
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 }}
13
13
14
14
jobs :
15
15
build-and-push-docker :
16
-
17
16
runs-on : ubuntu-latest
18
17
19
18
steps :
20
19
- name : Checkout
21
20
uses : actions/checkout@v3
22
- with :
23
- token : ${{ secrets.SUBMODULE_TOKEN }}
24
- submodules : true
25
21
26
- - name : Set up JDK 17
22
+ - name : Set up JDK 21
27
23
uses : actions/setup-java@v3
28
24
with :
29
- java-version : ' 17 '
25
+ java-version : ' 21 '
30
26
distribution : ' temurin'
31
27
32
28
- name : Grant execute permission for gradlew
33
29
run : chmod +x ./gradlew
34
30
35
31
- 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
40
33
41
34
- name : Build the Docker image
42
35
run : docker build . --file Dockerfile --tag ${{ env.DOCKER_IMAGE_NAME }}:latest
43
36
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 }}
47
42
48
43
- name : Push the Docker image
49
44
run : docker push ${{ env.DOCKER_IMAGE_NAME }}:latest
50
45
51
-
52
-
53
- deploy-to-ec2 :
54
-
46
+ deploy-to-ubuntu-server :
55
47
needs : build-and-push-docker
56
48
runs-on : ubuntu-latest
57
-
49
+
58
50
steps :
59
- - name : Deploy to EC2
51
+ - name : Deploy to Ubuntu Server
60
52
uses : appleboy/ssh-action@master
61
53
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
65
58
script : |
66
59
LOG_DIR="/home/ubuntu/app-logs"
67
60
mkdir -p $LOG_DIR
68
61
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")
69
71
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
-
78
72
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
81
90
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