본문 바로가기
개발/졸업과제

서비스 배포하기

by 컴쏘 2023. 10. 19.

이제 서비스 배포해보자. 

 

이제까지 했던 과정을 한번에 정리하기 위해 서비스 배포는 글을 마지막에 작성하려고 했다. 

 

크게 보면 3가지로 구성되어있다. 

  • SpringBoot & MariaDB 
  • Flask 
  • https 접속 

[SpringBoot & MariaDB] 

 

0) code 작성하기

  • application yml 파일 분리하기 
  • docker-compose 파일 작성하기 (springboot, mariadb) 
  • Dockerfile 작성하기 

1) EC2 구축 

ubuntu 22.04 / t2.micro / EBS 10GiB

 

t2.micro로는 RAM이 작기 때문에 memory를 늘리기 위해 swap을 해주었다. 

memory swap
memory swap

 

2) JDK 17 설치 

# Install JDK 17
sudo apt update
sudo apt install openjdk-17-jdk

 

3) EC2에 Docker 설치 

다음으로는 SpringBoot 와 MariaDB를 Container 형태로 관리하기 위해 EC2에 Docker를 설치하였다. 

# Install Docker
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# Check Docker Install
sudo systemctl status docker

 

 

4) EC2에 Docker Compose 설치 

# Install docker-compose 
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# Check docker-compose install with version 
docker-compose --version

 

5) 실행하기 

# Run SpringBoot Application
cd webpage
chmod +x gradlew
./gradlew clean build
docker-compose up -d --build

 

 

[Flask] 

 

1) nCloud Server 생성 

4EA, 8GiB

 

2) Server에 Docker 설치 

 

3) 필요한 환경 구축 및 실행 

# Install pip
sudo apt update
sudo apt install python3-pip

# Install Flask
pip install flask

# Install pycrypto
pip install pycrypto

# Download Base Docker Image
docker pull registry.p2kcloud.com/base/1/kasmweb:v1

# Run Flask Application
python3 app_v8.py

 

[HTTPS 접속] 

 

참고 링크 

https://velog.io/@boo105/SpringBoot%EC%97%90-SSL-%EC%9D%B8%EC%A6%9D%EC%84%9C%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90

 

1) 인증서 생성 

Let's Encrypt에서 인증서 생성하기 

 

형식 (Template)

certbot certonly --manual -d *.[도메인] -d [도메인] --preferred-challenges dns-01 --server <https://acme-v02.api.letsencrypt.org/directory>

 

AWS에 레코드 등록

 

nslookup으로 확인하기 - 이 절차를 하고 Enter를 입력하는 과정으로 넘어가야 함

nslookup -query=txt _acme-challenge.p2kcloud.com

 

nslookup
Enter 치니 성공함 (다음 단계로 넘어가기)

 

다음 폴더에 있다고 한다. 

/etc/letsencrypt/live/p2kcloud.com/

 

생성 확인

 

 

2) ssl 인증서 spring boot에서 필요한 형식 (PKCS12로 변환)

 

90일 동안만 사용 가능하다. 

 

위에서 다운받은 인증서 로컬로 이동시켜준다. 

cp fullchain.pem /mnt/c/Users/jpark/Desktop/
cp privkey.pem /mnt/c/Users/jpark/Desktop/

 

옮기기

p12로 바꿔준다. 

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name ttp -CAfile chain.pem -caname root

 

p12 변환

 

3) SpringBoot 세팅 

 

.gitignore 설정
.gitignore 설정
resources 폴더 안에 넣어주기

 

docker-compose.yml 코드 수정 (application 부분 수정함)

  application:
    container_name: springboot
    build: .
    ports:
      - 80:8080
      - 443:443
    depends_on:
      - db

 

4) TEST 하기 

 

localhost에서 test

 

일단 적용은 잘된 것 같다.

  • localhost에서 test를 하니까 도메인이 안맞아서 생기는 오류 같다. (도메인은 www.p2kcloud.com인데, localhost로 접속하니까 생긴 것 같음)

localhost에서 test

 

 

EC2에서 test할 때는 인증서를 .gitignore에서 숨김 처리를 했기 때문에 우선적으로 EC2로 인증서를 보내야한다. (scp -i)

 

인증서 확인

 

적용 확인

 

+) 도메인 설정  

 

p2kcloud.com으로 ec2의 ip로 A 레코드 유형의 레코드 생성한다. 

 

www.p2kcloud.com으로 p2kcloud.com을 CNAME 레코드 유형 타입의 레코드 생성한다.