[문제] ChatGPT에게 질문을 하는 API를 사용하면 401 Error가 떴다. 문제는 local에서 했을 때는 아무 문제가 없었는데 배포한 뒤에 발생한 문제였다.
[해결] 환경변수가 설정이 되어 있지 않아서 발생
- local에서는 .env 파일에 저장하고 process.env.{변수명} 이런 식으로 사용했다. 그치만 .env는 gitignore로 처리했기 때문에 jenkins가 github에서 파일을 가져오면 env 파일에 담긴 환경변수들이 없다는 뜻이 된다.
① EC2 서버에 env 파일을 설정
- 이 방법 같은 경우에는, jenkins 안의 docker에서 이미지가 빌드되고 사용되기 때문에 아무런 연관성이 없어 실패했다.
② .env 파일을 그냥 git에다가 같이 업로드
- 일단 임시방편으로 사용하기 위해서 gitignore을 하지 않고 업로드했다. 그치만 되지 않았다...
찾아보니 pubilc으로 되어있는 git repo에 API KEY가 노출될 경우 openai 자체에서 그 KEY를 삭제해버리는 것이었다!!!!
참고한 사이트에서도 메일에 와있다길래 나도 보니 메일에 한가득 와있었음..
그래서 .env 파일을 git에다가 업로드를 하거나 해당 함수에 바로 입력해주는 방법은 사용할 수가 없었다.
③ Dockerfile ENV 설정
- ENV {변수명} {값} : 이와 같은 방식으로 해주었다.
- 여기에서도 2번과 마찬가지로 dockerfile은 github에 업로드가 되기 때문에 외부에 노출이 되었다 판단하여 KEY를 삭제하는 문제가 발생한다.
④ Jenkins 환경변수 설정 후 script 수정
- Jenkin-pipeline의 설정 > General > 이 빌드는 매개변수가 있습니다 선택 > 매개변수 입력
- OPENAI_ORGANIZATION은 String Parameter로, OPENAI_API_KEY는 Password Parameter로 설정하였다.
- 후자를 String으로 처리해도 되는건지는 모르겠다,,!
- script 수정
stage('Pull') {
steps {
git url: "${GIT_URL}", branch: "dev", poll: true, changelog: true
sh 'touch .env'
sh 'echo -e "OPENAI_ORGANIZATION=\'${OPENAI_ORGANIZATION}\'\nOPENAI_API_KEY=\'${OPENAI_API_KEY}\'\nACCESS_TOKEN_SECRET_KEY=\'${ACCESS_TOKEN_SECRET_KEY}\'" > .env'
}
}
- git pull을 해오는 과정에서 .env 파일을 추가해주니 정상적으로 동작함!!!!!
외부에 KEY 값이 노출되면 값을 삭제해버리는게 신기하기도 하면서 만들 때 알려줬으면 좋았을 것 같다...
암튼 해결했으니 됐지 뭐!!!
* 외부 노출 시 KEY 삭제됨을 알게 된 사이트
[참고] https://minny-it.tistory.com/11
* Script 수정에 참고한 사이트
[참고] https://chanhyukpark-tech.github.io/reactjs/react-jenkins-build-environment-variables-copy/
'[프로젝트] 냥냥곰펭' 카테고리의 다른 글
[BE] 5. 회원 정보에 들어갈 프로필 사진 API 만들기 (AWS / multerS3) (0) | 2023.07.29 |
---|---|
[BE] 4. HTTPS 적용하기 (0) | 2023.07.29 |
[BE] CI/CD / 배포 / webhook (0) | 2023.07.14 |
[BE] CI/CD 도전! (0) | 2023.07.14 |
[BE] Docker 용량 문제 (0) | 2023.07.12 |