배포 전 로컬 환경에서 모든 profile로 다 실행해볼 것
application.yml을 아래와 같이 나누었다.
application.yml 파일은 딱 {프로필 지정, 포함되는 프로필 명시, 프로필 그룹 정의} 3개의 역할을 하도록 했다.
spring:
profiles:
active: dev
include:
- secret
- common
group:
prod:
dev:
local:
- default profile = dev
- default properties = secret, common
- defined profiles : prod, dev, local
기본 profile을 dev로 지정하고 빌드 테스트 다 진행하고 나서 갑자기 ec2에 오리고 prod로 실행했는데, 실행이 안됐다.
여러가지 시도 끝에 application-prod.yml 대신 application-prd.yml 을 사용하니까 됐다?
심지어 파일 복사한것도 아니고 이름만 prd 로바꾸고 prd로 실행했더니 됐다. 원인을 정말 알고싶어요...
기억하기 위해 간단하게 ec2+rds(mysql)+springboot+git 배포 과정 적어놓기
배포 프로세스
1. aws ec2 생성 및 시작 + rds 생성후 ec2와 연결 or public access 가능하게 하기(로컬에서 rds 테스트용)
2. 스프링부트 프로젝트에서 application-prod.yml 파일 내 설정
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://{rds 엔드포인트}:3306/lv5?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username: {rds mysql admin 계정}
password: {rds admin 비밀번호}
이후 로컬환경에서 prod 프로필로 실행을해보자(안돌아가는 경우가 있었음)
3. ec2에서 git clone 하기
ec2 에 연결한 후 ssh key 생성
cd ~/.ssh
ssh-keygen {깃헙 메일}
ssh-keygen lyulbyung@gmail.com
cat ~/.ssh/id_rsa.pub
이후 cat 명령에 의해 출력된 public key 깃허브에 등록
4. git clone 후 repo에 없는 파일 밀어넣기
나의 경우는 local, prod, secret property 가 git에 포함되어있지 않다. 이를 ec2 안에 있는 내 프로젝트에 추가한 다음 빌드해야한다.
ec2 keypair가 존재하는 디렉토리로 이동한 후 아래 명령어 실행
scp -i "my_key_0.pem" {복사할 파일} {접속 유저명, 보통 ubuntu}@{DNS}:~{내 프로젝트 경로상 필요한 곳}
application-secret.yml 등의 파일을 이렇게 집어 넣고,
5. build and run
build.gradle이 있는 경로, 즉 프로젝트 최상위 디렉토리로 이동한 후 빌드하
만약 통과하지 못하는 테스트코드가 있지만 빌드하는 경우 -x test옵션을 줘야함
./gradlew build -x test
정상적으로 빌드했다면 /build/libs 에 있는 jar파일을 실행할 수 있다.
java -jar build/libs/your-application.jar
profile 지정은아래와 같이 할 수 있음.