자동 배포를 위해 github action + code deploy + nginx 로 특정 action마다 자동배포가 되게 설정해보았다.

https://github.com/Jionee/autodeploy_practice

BUT, 문제가 발생한다. 배포를 위해 github에 올린다면 모두가 우리의 secret 정보를 볼 수 있고 그러면 보안에 심각한 위협이 된다는 것!

데이터베이스의 엔드포인트, username, password 등이 그 타깃이 될 수 있다.

따라서 이를 어떻게 숨길 수 있는지에 대해 살펴 보겠다.

간단히 말하면

  1. application.yml의 profile을 사용하기
    1. 기존 application-어쩌구.yml 들은 .gitignore에 추가
  2. github action의 secret 사용하기
    1. github secret에 등록하기
    2. CI.yml에서 echo를 통해 application-어쩌구.yml에 시크릿 값 넣기

1. application.yml의 profile 사용하기

//설명
* dev 개발시에는 testdb(h2)를 사용한다. + common,secret(기타 공통으로 숨겨야 할 내용) 
* prod 배포시에는 proddb(mysql)을 사용한다. + common,secret(기타 공통으로 숨겨야 할 내용) 

나의 경우는 총 4가지를 사용하였다.

#profile의 그룹을 설정한다. 예를 들면 dev로 run 환경을 설정하면 testdb, common, secret이 실행된다.
spring:
  profiles:
    group:
      "local": "testdb,common,secret"
      "dev":  "testdb,common,secret"
      "prod": "proddb,common,secret"

---

#공통적으로 설정되어야 할 내용들을 작성한다.
spring:
  config:
    activate:
      on-profile: "common"
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        show_sql: true
        format_sql: true
logging:
  level:
    org:
      hibernate:
        type:
          descriptor:
            sql: trace
spring.config.activate.on-profile="proddb"
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/각자db이름?validationQuery="select 1"
spring.datasource.username=각자유저네임
spring.datasource.password=각자비밀번호어쩌구
spring.config.activate.on-profile = "testdb"
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url= jdbc:h2:tcp://localhost/~/각자db이름
spring.datasource.username=각자유저네임
spring.datasource.password=각자비밀번호어쩌구