오티스의개발일기

무중단 배포 (9) [ Github Actions 설정 편 ] spring boot + mysql + docker + github actions 본문

개발/spring boot

무중단 배포 (9) [ Github Actions 설정 편 ] spring boot + mysql + docker + github actions

안되면 될때까지.. 2025. 1. 20. 10:04
728x90

 

이번시간에는

Github Action을 사용한 무중단 배포를 하기위해

설정을 하고 배포까지하여 마무리하는 방법을 보여드리겠습니다.

배포하고 마무리하는 글은 다음글에서 이어서 이야기하겠습니다.

 

 

 

목차

1. 프로젝트 생성 

2. SQL 설정

3. git 생성

4. aws EC2 생성

5. aws ssh 설정 및 필수 라이브러리 설치

6. docker 를 이용한 nginx 설정

7. docker 를 이용한 mysql 설정

8. spring boot HealthcheckController 작업 및 yml + Dockerfile 작업

9. Github Actions 설정 😀

10. 최종 배포

 

 

전체 코드는  여기에 올라와있습니다.

https://github.com/1domybest/Spring_none_stop_deploy

 

GitHub - 1domybest/Spring_none_stop_deploy

Contribute to 1domybest/Spring_none_stop_deploy development by creating an account on GitHub.

github.com

 

 

 

1. 자신의 레파지토리로 접속

 

 

2.Settings 클릭

 

 

 

3. 왼쪽 목록중 Security → Secrets and variables → Actions 클릭

 

 

 

4. New repository secret 클릭

 

 

 

 

이제 여기 Name과 Secret을 만들건데 아래는 만들 목록을 적어보겠습니다

마지막은 방법이 좀 다르니 꼭 제대로 읽고

Name값을 아래와 같이 똑같이 적어주셔야합니다.

1. 도커 로그인 토큰

Name : DOCKERHUB_TOKEN
Secret: dckr_pat_IB5IEr6xRugDkJ18gfmZd7eK_b8

2. 도커 허브 유저이름

Name : DOCKERHUB_USERNAME
Secret: otisaws

3. EC2 SSH 시크릿키
Name : EC2_SSH_KEY
Secret: 
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAogEW0Le9equBvTtHtbb/mLQkOhoAceT922OGReM2VoqgBMFL
Mv5bXZ9DNs0kjkwpAX7HT63dVF4v/+gfYbMbsnxgp8RnRWivBg93zh09wxCSwzHc
yC6WFE3VgOj16p7SvGKoUVMkJLAg7fEoDBULgECT2TIbYDAxeaVtFcQRHVCPaUD4
zOqtnFKvvkPVvF9jlsN064IuyoH3U8mx6Nie5lCpx0PT1evihZH8wYKu26N/kcNT
/zpLUGS0FbQWsQ4908ZjD5YTIAQG7djxNSilLBnjoB7ctJEVOvOaU+BpJqJgHgz9
X2zQ1ggBkGBxZuq2a/mKnQWYfUpR+jE/mQKtzQIDAQABAoIBAAJj77k+rM4Nj8mC
AWnd/GF9bvdogM8taM1+53FKi/e07e2ECJ8E/8Ye3ngFiN+MoiJCg6BaWWSwSxcE
jsn7QZJdoXN4Q2nTxJlbSxJAfjPNn8y/hJlzjoVYLKlNRquikktzTTZ9+o+MBcBd
CZE8EkJfMY9H3P2LWH+KAFUM4o/DJYe2uwbnJP0/KPJ1LoLGsuekz9+FV0L5ftAH
qll9gwZC7hexrpTdB+8TelpfoGbnqb7nSGwsUirLotSyxdp3hQtW5jEr1UuheQey
k0i11SQFDlECUSjCW4//ZtPWM0g0tnXRNm3qUaSYsFNcTMfM13taps7c0f0asimv
C1ClU0UCgYEA0AIgD5tqSn2RnoRCId8KfOC4FhJAO0sN3U6JeZgpdXWBNg4f/7G+
7npdbhW7h7g4z5p/Hbv2AWMrorQywNiQgi1NItscyNhxmLznuoaGeo8OfcCk0yQT
PxZBzOwODPuR2W4Lmc1Z+e385IJoL/oIS5OkSOaRfUW+bWNyMh4C+fMCgYEAx2HD
ytiBNb8lFhfSUreu/vnkUUJNIK8rnsdw1LuspJpi0QKIFz1tmkUS0nuZ8UGUV+xn
ma7RTZol11CqwLxUkEVUk5QJcqlSMHZoWY0+7gcm12147xITU8yL/coIEe88S8aY
OS3OH/781p8k9WtlYx2omw61iRo+hOskcm1T6T8CgYA/xFcF0dQ878/Dc7I+Zfz2
GYH1qjSsuK6QaLI2Z5JWIuawppXish/hRfv8coch7TTlV+yeNfANrtRCtdFVU07B
yZd7Fwb0/32boFW91d3GFrMPlA4zeDy6O12Cr98C1eB5coX16YEq4G2FtACyrIj8
ek+D1cNGTyo4qKLqgE7TRwKBgGKYHdH5Liv90cETFpaA7rB3skfcmXdIKDHkPg90
nvLmxWbF8bZMUh6veZdMN9vtqgWwiaqdoDLXv06yPT4B429UWXaBBgsFX/dHFmLy
TeQ29SYipGLUdWpDBBcECOmVfCOcmTntRLjdxvn6yLPz37cbu3yx0WNy7uebv/I1
zgDRAoGAP49Ouf3aQEUEHzDAlrd3HtPjykD0pQ9i7KVa/e+lpVnqhec45NIqjki5
ifHXQ5DTXJcOY8MYyjCs27HyOidD0v/gM8I4Vg+Ndgv8+xnTIt7f25Wojqc+UZlQ
5F+GzAjdXDLfkztqw0tcvZIfEE9sQAnIeAy3pMCtarTULjcMdl0=
-----END RSA PRIVATE KEY-----

4. EC2 퍼블릭 IP : 

Name: SPRING_BOOT_DOCKER_ID
Secret: 3.107.148.204

5. application-secret.yml 
Name: APPLICATION_SECRET
Secret: 아래글을 확인해주세요

마지막 application-secret.yml 은 좀 다른방법으로 키를 넣어야합니다.

일단 부가설명을 하자면

spring boot에서 사용한 application-secret.yml 은 추후에 workflow CICD.yml에서

사요할 예정인데 저희가 깃의 시크릿기능을 사용하여 코드를 넣게되면

값을 가져올떄 정확히 내가 적은값을 볼수가 없게됩니다

그렇기떄문에 application-secret.yml 에있는 코드전체를 복사한후에

base64로 인코딩한 값을 여기 시크릿에 저장하고

사용시에는 CICD기능을 통해 base64 기반으로 반대로 디코딩을 해서 사용할 예정입니다.

일단 application-secret.yml에있는 코드를 복사해봅니다.

application-secret.yml

spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: jdbc:mysql://localhost:3306/springboot_noneStop_deploy?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

server:
  port: 8080
  serverAddress: localhost

serverName: local_server

---

spring:
  config:
    activate:
      on-profile: blue
  datasource:
    url: jdbc:mysql://172.31.42.71:3306/springboot_noneStop_deploy?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

server:
  port: 8080
  serverAddress: 172.31.42.71

serverName: blue_server

---

spring:
  config:
    activate:
      on-profile: green
  datasource:
    url: jdbc:mysql://172.31.42.71:3306/springboot_noneStop_deploy?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

server:
  port: 8081
  serverAddress: 172.31.42.71

serverName: green_server
---

 

 

2.https://www.convertstring.com/ko/EncodeDecode/Base64Encode
로 접속해서 인코딩 진행

 

Base64로 인코딩 - 온라인 Base64로 인코더

 

www.convertstring.com

 

 

 

아래 인코딩된값을 복사후에 시크릿에 저장

 

 

 

 

여기까지 되었으면 CICD를 만들기위한 준비가 완료되었습니다

다음편에서 무중단 배포를 완료하는 글을 작성해보겠습니다

 

 

다음글

최종 배포

 

spring boot + mysql + docker + github actions 무중단 배포 (10) [ 최종 배포 편 ]

무중단 배포를 위한 Github Action CICD 제작이번시간에는최종적으로 CICD를 작성하고 배포하는것까지 제작해보겠습니다. 목차1. 프로젝트 생성 2. SQL 설정3. git 생성4. aws EC2 생성5. aws ssh 설정 및 필

otis.tistory.com

 

 

 

728x90
Comments