💡 준비사항
1. 실습용 데이터 서버가 하나라서 deleteAll()이 들어가는 테스트 코드는 주석처리하였다.
2..mvn
이하,.idea
이하,target
이하,hello.iml
,help.md
를 제외한 나머지를 git에 올린다. (🚫에러)
3. 서버에 올리기 전에 로컬에서 packaging 테스트, 그리고 테스트코드, 환경변수, 디렉토리 등이 로컬과 분리되어 있는지 확인한다.
[순서]
1. EC2 인스턴스 생성 & Docker 설치
2. Maven 설치하기
3. git clone & maven packaging
4. 도커 빌드 & 실행
5. 확인하기
이전 블로그 포스팅 참고
[AWS, Docker] aws ec2 instance에 docker 설치하기
나머지 설정은 동일하며, 보안 그룹에서 8080포트를 열어 준다.
Ubuntu에서는 패키지 설치를 위해서 보편적으로 apt (Advance Packaging Tools) 명령어를 사용한다. apt는 기존의 apt-get, apt-cache 등의 통합으로 나온 패키지 매니징 툴이다.
apt update
apt install maven
apt update
: 설치 가능한 패키지 리스트를 최신화apt upgrade
: 실제 업데이트apt install
: 패키지 설치apt remove
: 패키지 삭제루트 또는 적당한 디렉토리에 프로젝트 깃을 클론한다.
git clone https://github.com/coastby/springboot-hospital-api.git
도커 컨테이너를 빌드하기 위해서는 .jar
파일이 있어야 한다.
프로젝트를 패키징하면 (maven을 빌드하면) target 폴더 안에 .jar
파일이 생성된다.
vim Dockerfile
아래 내용 작성하기
FROM openjdk:11-jdk-slim
VOLUME /tmp
ADD /target/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
그냥 mvn package
를 하게되면 현재 프로젝트의 테스트코드는 독립적이지 않아 서버 상에서 통과하지 못하여 빌드를 실패한다. 참고 - 🚫에러
그래서 임시방편으로 테스트를 스킵하고 메이븐을 빌드한다.
mvn -DskipTests=true package
#프로젝트 폴더의 root directory 에서 실행
docker build -t springboot-jdbc-template .
생성되었는지 확인한다.
docker images #실행되기 전 확인가능
docker ps #실행된 후 확인가능 (run을 해야 실행된다.)
-p 8080:8080
: 호스트의 포트를 사용하기 위해 포트포워딩을 해주어야 한다.-e
: yml 파일에는 로컬로 데이터소스 url이 설정되어 있어서 환경변수 데이터베이스가 있는 서버의 주소를 넘겨준다.docker run -p 8080:8080 -e SPRING_DATASOURCE_URL=jdbc:mysql://[ec2도메인주소]:3306/likelion -e SPRING_PROFILES_ACTIVE=aws springboot-jdbc-template
SPRING_PROFILES_ACTIVE
미니 프로젝트가 아닌 이상 대부분 기업용 서비스는 개발 (dev), 테스트 (test), 운영 (prod) 등으로 구동 환경을 세분화하여 서비스를 관리한다. 이런 식별 키워드를 Profile
이라고 부른다. Profile을 저장함으로서 데이터베이스 접속 계정 및 옵션, 리소스, 로그 관리 정책 등을 profile 단위로 구분하여 효과적으로 관리할 수 있다. 스프링 부트는 직관적이고 편리한 profile 관리 방법을 제공한다.
SPRING_PROFILES_ACTIVE
이다.application-{profile}.properties # 파일명 형식
application-dev.properties # 예시)
http://[DNS주소]:8080/swagger-ui/