-
Notifications
You must be signed in to change notification settings - Fork 3
138 lines (115 loc) · 6.27 KB
/
deploy.yml
File metadata and controls
138 lines (115 loc) · 6.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: Deploy Spring Boot and React Apps
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_ACCESS_TOKEN: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Set up for Spring Boot app
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'temurin'
- name: Build Spring Boot app with Gradle
run: ./gradlew build -Dspring.profiles.active=prod
# Build Docker image for Spring Boot app
- name: Build Docker image for Spring Boot app
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:backend-latest -f Dockerfile .
# Set up for React app
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '20'
- name: Install dependencies for React app
run: cd web-ide-front && npm install
- name: Generate Environment Variables File for Production
run: |
touch web-ide-front/.env
echo VITE_YORKIE_API_KEY=${{ secrets.VITE_YORKIE_API_KEY }} >> web-ide-front/.env
echo VITE_SERVER_BASE_URL=${{ secrets.VITE_SERVER_BASE_URL }} >> web-ide-front/.env
echo VITE_SERVER_WS_BASE_URL=${{ secrets.VITE_SERVER_WS_BASE_URL }} >> web-ide-front/.env
cat web-ide-front/.env
- name: Build React app
run: cd web-ide-front && npm run build
# Build Docker image for React app
- name: Build Docker image for React app
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:frontend-latest -f web-ide-front/Dockerfile .
# Docker login
- name: Docker Login
run: echo ${{ secrets.DOCKERHUB_ACCESS_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
# Push Docker images
- name: Push Docker image for Spring Boot app
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:backend-latest
- name: Push Docker image for React app
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:frontend-latest
# Set up SSH key
- name: Add SSH Key
uses: webfactory/ssh-agent@v0.5.3
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
# Create environment variables file
- name: Create environment variables file
run: |
echo SPRING_DATASOURCE_URL=${{ secrets.PROD_DB_URL }} > env.list
echo SPRING_DATASOURCE_USERNAME=${{ secrets.PROD_DB_USERNAME }} >> env.list
echo SPRING_DATASOURCE_PASSWORD=${{ secrets.PROD_DB_PASSWORD }} >> env.list
echo SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.mariadb.jdbc.Driver >> env.list
echo SPRING_JPA_HIBERNATE_DDL_AUTO=create >> env.list
echo SPRING_JPA_SHOW_SQL=true >> env.list
echo SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MariaDBDialect >> env.list
echo SPRING_JPA_PROPERTIES_HIBERNATE_FORMAT_SQL=true >> env.list
echo SPRING_JPA_PROPERTIES_HIBERNATE_HIGHLIGHT_SQL=true >> env.list
echo SPRING_JPA_PROPERTIES_HIBERNATE_USE_SQL_COMMENTS=true >> env.list
echo SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }} >> env.list
echo SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }} >> env.list
echo SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }} >> env.list
echo SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }} >> env.list
echo SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }} >> env.list
echo SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }} >> env.list
echo SPRING_CLOUD_AWS_S3_BUCKET_NAME=${{ secrets.PROD_S3_BUCKET_NAME }} >> env.list
echo SPRING_CLOUD_AWS_STACK_AUTO=false >> env.list
echo SPRING_CLOUD_AWS_REGION_STATIC=ap-northeast-2 >> env.list
echo SPRING_CLOUD_AWS_CREDENTIALS_ACCESS_KEY=${{ secrets.PROD_AWS_ACCESS_KEY }} >> env.list
echo SPRING_CLOUD_AWS_CREDENTIALS_SECRET_KEY=${{ secrets.PROD_AWS_SECRET_KEY }} >> env.list
echo SPRING_PROFILES_ACTIVE=prod >> env.list
echo SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT=3000 >> env.list
echo SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE=10 >> env.list
echo SPRING_CONFIG_LOCATION=/config/application-prod.yml >> env.list
# Transfer files to EC2
- name: Transfer files to EC2
run: |
scp -o StrictHostKeyChecking=no src/main/resources/application-prod.yml ubuntu@${{ secrets.EC2_PUBLIC_IP }}:/home/ubuntu/application-prod.yml
scp -o StrictHostKeyChecking=no env.list ubuntu@${{ secrets.EC2_PUBLIC_IP }}:/home/ubuntu/env.list
# Deploy to EC2
- name: Deploy to EC2
run: |
ssh -o StrictHostKeyChecking=no ubuntu@${{ secrets.EC2_PUBLIC_IP }} << 'EOF'
sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:backend-latest
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:frontend-latest
if [ $(sudo docker ps -a -q -f name=spring-app) ]; then
sudo docker stop spring-app
sudo docker rm spring-app
fi
if [ $(sudo docker ps -a -q -f name=react-app) ]; then
sudo docker stop react-app
sudo docker rm react-app
fi
sudo docker run -d --name spring-app \
--env-file /home/ubuntu/env.list \
-v /home/ubuntu/application-prod.yml:/config/application-prod.yml \
-p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:backend-latest
sudo docker run -d --name react-app \
-p 80:80 ${{ secrets.DOCKERHUB_USERNAME }}/webide3ever:frontend-latest
sudo docker exec spring-app printenv | grep SPRING
sudo docker logs spring-app
sudo docker logs react-app
EOF