145145# sudo docker logs spring-boot-app
146146# EOF
147147
148+ # name: Deploy Spring Boot APP to Amazon Linux 2023
149+ #
150+ # on:
151+ # push:
152+ # branches:
153+ # - main
154+ #
155+ # jobs:
156+ # deploy:
157+ # runs-on: ubuntu-latest
158+ #
159+ # steps:
160+ # - name: Checkout repository
161+ # uses: actions/checkout@v3
162+ #
163+ # - name: Set up JDK 21
164+ # uses: actions/setup-java@v2
165+ # with:
166+ # java-version: '21'
167+ # distribution: 'temurin'
168+ #
169+ # - name: Build Spring Boot app with Gradle
170+ # run: ./gradlew build -Dspring.profiles.active=common,prod
171+ #
172+ # - name: Build Docker image
173+ # run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/boardbuddy:backend-latest -f Dockerfile .
174+ #
175+ # - name: Docker Login
176+ # run: echo ${{ secrets.DOCKERHUB_ACCESS_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
177+ #
178+ # - name: Push Docker image
179+ # run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/boardbuddy:backend-latest
180+ #
181+ # - name: Add SSH Key
182+ # uses: webfactory/ssh-agent@v0.5.3
183+ # with:
184+ # ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
185+ #
186+ # - name: Create Spring APP environment variables file
187+ # run: |
188+ # cat > env.list <<EOF
189+ # APP_IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/boardbuddy:backend-latest
190+ #
191+ # PROD_DB_NAME=${{ secrets.PROD_DB_NAME }}
192+ # PROD_DB_USERNAME=${{ secrets.PROD_DB_USERNAME }}
193+ # PROD_DB_PASSWORD=${{ secrets.PROD_DB_PASSWORD }}
194+ # PROD_DB_ROOT_PASSWORD=${{ secrets.PROD_DB_ROOT_PASSWORD }}
195+ # PROD_DB_URL=jdbc:mariadb://mariadb:3306/${{ secrets.PROD_DB_NAME }}?useUnicode=true&characterEncoding=utf8mb4
196+ #
197+ # PROD_REDIS_HOST=redis
198+ # PROD_REDIS_PORT=${{ secrets.PROD_REDIS_PORT }}
199+ # PROD_REDIS_PASSWORD=${{ secrets.PROD_REDIS_PASSWORD }}
200+ #
201+ #
202+ # SPRING_CLOUD_AWS_S3_BUCKET_NAME=${{ secrets.PROD_S3_BUCKET_NAME }}
203+ # SPRING_CLOUD_AWS_S3_BUCKET_REGION=${{ secrets.PROD_S3_BUCKET_REGION }}
204+ #
205+ # SPRING_COOL_SMS_API_KEY=${{ secrets.PROD_SMS_API_KEY }}
206+ # SPRING_COOL_SMS_API_SECRET=${{ secrets.PROD_SMS_API_SECRET }}
207+ # SPRING_COOL_SMS_SENDER_NUMBER=${{ secrets.PROD_SMS_SENDER_NUMBER }}
208+ #
209+ # SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }}
210+ # SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }}
211+ # SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}
212+ # SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}
213+ # SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
214+ # SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
215+ #
216+ # SPRING_CLOUD_AWS_CLOUD_FRONT_DOMAIN=${{ secrets.PROD_CLOUD_FRONT_DOMAIN }}
217+ # SPRING_CLOUD_AWS_CLOUD_FRONT_KEY_PAIR_ID=${{ secrets.PROD_CLOUD_FRONT_KEY_PAIR_ID }}
218+ # SPRING_CLOUD_AWS_CLOUD_FRONT_URL_EXPIRATION_MINUTES=${{ secrets.PROD_CLOUD_FRONT_URL_EXPIRATION_MINUTES }}
219+ # SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_REGION=${{ secrets.PROD_CLOUD_FRONT_SECRET_REGION }}
220+ # SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_NAME=${{ secrets.PROD_CLOUD_FRONT_SECRET_NAME }}
221+ # SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_KEY_VALUE_NAME=${{ secrets.PROD_CLOUD_FRONT_SECRET_KEY_VALUE_NAME }}
222+ #
223+ # SPRING_PROFILES_ACTIVE=common,prod
224+ # EOF
225+ #
226+ # - name: Create nginx environment variables file
227+ # run: |
228+ # cat > nginx.env.list <<EOF
229+ # NGINX_SSL_CERT_PATH=${{ secrets.NGINX_SSL_CERT_PATH }}
230+ # NGINX_SSL_KEY_PATH=${{ secrets.NGINX_SSL_KEY_PATH }}
231+ # EOF
232+ #
233+ # - name: Render nginx config
234+ # run: |
235+ # set -o allexport
236+ # source nginx.env.list
237+ # envsubst '${NGINX_SSL_CERT_PATH} ${NGINX_SSL_KEY_PATH}' < nginx.template.conf > default.conf
238+ #
239+ # - name: Transfer files to EC2
240+ # run: |
241+ # scp -o StrictHostKeyChecking=no src/main/resources/application-common.yml ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/application-common.yml
242+ # scp -o StrictHostKeyChecking=no src/main/resources/application-prod.yml ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/application-prod.yml
243+ # scp -o StrictHostKeyChecking=no env.list ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/env.list
244+ # scp -o StrictHostKeyChecking=no docker-compose.prod.yml ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/docker-compose.yml
245+ # scp -o StrictHostKeyChecking=no default.conf ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/default.conf
246+ #
247+ # - name: Deploy to EC2
248+ # run: |
249+ # ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 ec2-user@${{ secrets.EC2_PUBLIC_IP }} << 'EOF'
250+ # set -e
251+ #
252+ # cd /home/ec2-user
253+ #
254+ # sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
255+ # sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/boardbuddy:backend-latest
256+ #
257+ # sudo docker compose --env-file /home/ec2-user/env.list -f /home/ec2-user/docker-compose.yml up -d --remove-orphans
258+ #
259+ # sudo mv /home/ec2-user/default.conf /etc/nginx/conf.d/default.conf
260+ # sudo nginx -t
261+ # sudo systemctl restart nginx
262+ #
263+ # sudo dnf install -y certbot python3-certbot-nginx
264+ # sudo certbot renew --nginx --quiet || true
265+ #
266+ # sudo docker compose --env-file /home/ec2-user/env.list -f /home/ec2-user/docker-compose.yml ps
267+ # sudo docker compose --env-file /home/ec2-user/env.list -f /home/ec2-user/docker-compose.yml logs spring-boot-app --tail=200
268+ # EOF
269+
148270name : Deploy Spring Boot APP to Amazon Linux 2023
149271
150272on :
@@ -185,20 +307,18 @@ jobs:
185307
186308 - name : Create Spring APP environment variables file
187309 run : |
188- cat > env.list <<EOF
189- APP_IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/boardbuddy:backend-latest
190-
191- PROD_DB_NAME=${{ secrets.PROD_DB_NAME }}
192- PROD_DB_USERNAME=${{ secrets.PROD_DB_USERNAME }}
193- PROD_DB_PASSWORD=${{ secrets.PROD_DB_PASSWORD }}
194- PROD_DB_ROOT_PASSWORD=${{ secrets.PROD_DB_ROOT_PASSWORD }}
195- PROD_DB_URL=jdbc:mariadb://mariadb:3306/${{ secrets.PROD_DB_NAME }}?useUnicode=true&characterEncoding=utf8mb4
196-
197- PROD_REDIS_HOST=redis
198- PROD_REDIS_PORT=${{ secrets.PROD_REDIS_PORT }}
199- PROD_REDIS_PASSWORD=${{ secrets.PROD_REDIS_PASSWORD }}
200-
201-
310+ cat > .env <<EOF
311+ APP_IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/boardbuddy:backend-latest
312+ PROD_DB_NAME=${{ secrets.PROD_DB_NAME }}
313+ PROD_DB_USERNAME=${{ secrets.PROD_DB_USERNAME }}
314+ PROD_DB_PASSWORD=${{ secrets.PROD_DB_PASSWORD }}
315+ PROD_DB_ROOT_PASSWORD=${{ secrets.PROD_DB_ROOT_PASSWORD }}
316+ PROD_DB_URL=jdbc:mariadb://mariadb:3306/${{ secrets.PROD_DB_NAME }}?useUnicode=true&characterEncoding=utf8mb4
317+
318+ PROD_REDIS_HOST=redis
319+ PROD_REDIS_PORT=${{ secrets.PROD_REDIS_PORT }}
320+ PROD_REDIS_PASSWORD=${{ secrets.PROD_REDIS_PASSWORD }}
321+
202322 SPRING_CLOUD_AWS_S3_BUCKET_NAME=${{ secrets.PROD_S3_BUCKET_NAME }}
203323 SPRING_CLOUD_AWS_S3_BUCKET_REGION=${{ secrets.PROD_S3_BUCKET_REGION }}
204324
@@ -212,15 +332,15 @@ jobs:
212332 SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}
213333 SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
214334 SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
215-
216- SPRING_CLOUD_AWS_CLOUD_FRONT_DOMAIN=${{ secrets.PROD_CLOUD_FRONT_DOMAIN }}
217- SPRING_CLOUD_AWS_CLOUD_FRONT_KEY_PAIR_ID=${{ secrets.PROD_CLOUD_FRONT_KEY_PAIR_ID }}
218- SPRING_CLOUD_AWS_CLOUD_FRONT_URL_EXPIRATION_MINUTES=${{ secrets.PROD_CLOUD_FRONT_URL_EXPIRATION_MINUTES }}
219- SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_REGION=${{ secrets.PROD_CLOUD_FRONT_SECRET_REGION }}
220- SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_NAME=${{ secrets.PROD_CLOUD_FRONT_SECRET_NAME }}
221- SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_KEY_VALUE_NAME=${{ secrets.PROD_CLOUD_FRONT_SECRET_KEY_VALUE_NAME }}
222-
223- SPRING_PROFILES_ACTIVE=common,prod
335+
336+ SPRING_CLOUD_AWS_CLOUD_FRONT_DOMAIN=${{ secrets.PROD_CLOUD_FRONT_DOMAIN }}
337+ SPRING_CLOUD_AWS_CLOUD_FRONT_KEY_PAIR_ID=${{ secrets.PROD_CLOUD_FRONT_KEY_PAIR_ID }}
338+ SPRING_CLOUD_AWS_CLOUD_FRONT_URL_EXPIRATION_MINUTES=${{ secrets.PROD_CLOUD_FRONT_URL_EXPIRATION_MINUTES }}
339+ SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_REGION=${{ secrets.PROD_CLOUD_FRONT_SECRET_REGION }}
340+ SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_NAME=${{ secrets.PROD_CLOUD_FRONT_SECRET_NAME }}
341+ SPRING_CLOUD_AWS_CLOUD_FRONT_SECRET_KEY_VALUE_NAME=${{ secrets.PROD_CLOUD_FRONT_SECRET_KEY_VALUE_NAME }}
342+
343+ SPRING_PROFILES_ACTIVE=common,prod
224344 EOF
225345
226346 - name : Create nginx environment variables file
@@ -240,7 +360,7 @@ jobs:
240360 run : |
241361 scp -o StrictHostKeyChecking=no src/main/resources/application-common.yml ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/application-common.yml
242362 scp -o StrictHostKeyChecking=no src/main/resources/application-prod.yml ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/application-prod.yml
243- scp -o StrictHostKeyChecking=no env.list ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/env.list
363+ scp -o StrictHostKeyChecking=no .env ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/.env
244364 scp -o StrictHostKeyChecking=no docker-compose.prod.yml ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/docker-compose.yml
245365 scp -o StrictHostKeyChecking=no default.conf ec2-user@${{ secrets.EC2_PUBLIC_IP }}:/home/ec2-user/default.conf
246366
@@ -251,10 +371,10 @@ jobs:
251371
252372 cd /home/ec2-user
253373
254- sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
374+ sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin <<< ' ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}'
255375 sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/boardbuddy:backend-latest
256376
257- sudo docker compose --env-file /home/ec2-user/env.list - f /home/ec2-user/docker-compose.yml up -d --remove-orphans
377+ sudo docker compose -f /home/ec2-user/docker-compose.yml up -d --remove-orphans
258378
259379 sudo mv /home/ec2-user/default.conf /etc/nginx/conf.d/default.conf
260380 sudo nginx -t
@@ -263,6 +383,6 @@ jobs:
263383 sudo dnf install -y certbot python3-certbot-nginx
264384 sudo certbot renew --nginx --quiet || true
265385
266- sudo docker compose --env-file /home/ec2-user/env.list - f /home/ec2-user/docker-compose.yml ps
267- sudo docker compose --env-file /home/ec2-user/env.list - f /home/ec2-user/docker-compose.yml logs spring-boot-app --tail=200
386+ sudo docker compose -f /home/ec2-user/docker-compose.yml ps
387+ sudo docker compose -f /home/ec2-user/docker-compose.yml logs spring-boot-app --tail=200
268388 EOF
0 commit comments