본문 바로가기
TIL

[240117] ec2 서버 실행

by 진진리 2024. 1. 17.
728x90

ec2 서버에서 ci/cd로 올린 docker 이미지를 pull 받아 제대로 실행되는지 확인해보고자 한다.

그 전에 ec2 서버에 docker와 redis를 설치하였다.

 

환경변수 설정

일단 첫 번째로 발생한 문제는 환경변수를 설정해줘야 한다는 것이었다.

ci/cd에서는 깃허브의 secrets에 환경변수 값을 넣어둔 application-prod.yml 파일을 올려둔 후 prod 환경에서 프로그램을 실행하였다.

하지만 ec2에서 실행하니 다시 환경변수를 넣어주는 방법에 대해 고민하게 되었다.

 

그래서 해결한 방법은 환경변수를 저장한 [프로젝트명].env 파일을 ec2 서버에 저장하여 docker image를 실행할 때 설정해주는 것이었다.

 

1. ec2서버의 ./[프로젝트명].env 파일을 생성한다.

2. 해당 파일에 다음과 같이 환경변수 값을 넣어 저장해준다.

DB_PASSWORD=DB비밀번호
DB_URL=DB주소
DB_USERNAME=DB사용자명
JWT_SECRET_KEY=JWT의KEY값

 

3. docker image를 실행할 때 [프로젝트명].env 파일을 환경 파일로 설정해준다.

sudo docker run -i -t --env-file ./[프로젝트명].env [도커이미지명]

 

 

DB 오류

그렇게 ec2서버에서 도커 이미지를 실행하자 이번에는 DB에서 오류가 발생하였다.

hikaripool-1 - exception during pool initialization 
communications link failure

 

해당 프로젝트에 연결되어 있는 DB는 AWS의 RDB였는데 보안 관련 오류라고 생각이 들어서

RDB에 들어가서 '연결된 컴퓨팅 리소스'에 EC2 서버를 연결해주었다.

그러자 프로그램이 잘 실행되었다.

 

'사이트에 연결할 수 없음' 오류

도커 컨테이너를 실행 시킨 후 public ip 주소를 통해 접속해도 사이트에 연결할 수 없음 오류가 발생하였다.

ec2의 보안 그룹에 들어가서 인바운드 규칙을 추가해도 변하지 않았다.

검색해보니 8080 포트가 열려있는지 확인하라고 해서 netstat-ntl 명령어로 확인해보았는데 8080 포트가 열려 있지 않았다.

 

시간이 좀 지난 뒤에 다시 해보니까 ip주소로 접속이 되었고 8080 포트도 연결되어 있었다.