Git Actions -> S3 -> CodeDeploy -> Ec2 인스턴스 자동 실행
ec2 인스턴스에서 자바 명령어로 프로젝트를 수동 실행하면 아무 문제 없이 ${JWT_SECRET_KEY} 환경변수 적용이 잘 되나, 자동 배포를 통해 프로젝트가 실행되면 ${JWT_SECRET_KEY}의 환경변수가 적용이 안되는 상황!
2023-03-26 08:15:27.630 ERROR 25432 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
io.jsonwebtoken.security.WeakKeyException:
The specified key byte array is 136 bits which is not secure enough for any JWT HMAC-SHA algorithm.
The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HMAC-SHA algorithms MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size).
Consider using the io.jsonwebtoken.security.Keys#secretKeyFor(SignatureAlgorithm) method to create a key guaranteed to be secure enough for your preferred HMAC-SHA algorithm.
See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.
-> " jsonwebtoken이 136bits로 256bits보다 짧아서 Exception이 발생한다."
현재의 사용자
-> ubuntu
env 명령어로 환경변수 설정이 되어 있는지 확인하기
-> 되어있음.
${JWT_SECRET_KEY} 의 길이 확인하기
-> 256bits 이상임.
권한 문제인지 확인해보기
-> 필요한 권한 다 주어져있음.
사용자를 root로 돌려서 환경변수 조회하기
-> echo $JWT_SECRET_KEY
-> 되어 있음.
Git Actions 과정에서 환경변수가 적용이 안되는 것인가?
-> Git Actions를 설정하는 .github/workflows/.yml 파일에 환경변수 적용해보기 + Github에 secretKey 등록하기
-> 안됨.
=> Git Actions의 문제가 아님.
배포 관련 쉘 스크립트의 문제인가?
-> 아님.
root 사용자로 돌려서 ps -ef
명령어를 실행해 실행 중인 프로세스를 확인해보니
⭐️ codeDeploy가 root에서 실행되고 있었다. ⭐️
그런데 root에서 JWT_SECRET_KEY를 echo 명령어로 조회했을 때 떴다!
-> 뭐지?
-> 기존 사용자 = ubuntu, ubuntu에서 sudo로 환경변수를 설정했기 때문에 root에서도 환경변수가 적용은 안되어도 ubuntu에서 설정한 것이 넘어와 검색은 되었던 것 같다.
그래서 root의 .bashrc, .profile 모두 확인해보았다.
-> 환경변수 설정이 안되어있었다.
export JWT_SECRET_KET = " "
source ./bashrc
vi ./bashrc
🌈 전역으로 환경변수 설정하기
.bashrc 파일은 사용자마다 하나씩 있으며 사용자에 따라 설정값이 다 다르다!
때문에 ubuntu에서 설정을 해줬어도 root는 엄연히 다른 사용자이기 때문에 설정이 안되는 것이다.
때문에 ec2 인스턴스에서 수동으로 java -jar
를 수동으로 실행했을 때는 ubuntu에 환경변수 적용이 되어 있기 때문에 되었던 것이고, 자동 배포를 할 경우에는 root에서 배포가 되는데 root에 설정이 안되어있기 때문에 환경변수 적용이 안되었던 것이다.
👉🏻 root에서
vi /etc/environment
export JWT_SECRET_KEY=""
source /etc/environment
저장 후 확인해보니! 됐다!!!!!!
자동 배포를 해도 백그라운드에서도 잘 돌아간다!!
험난한 여정이었다..........