이제 서비스 배포해보자.
이제까지 했던 과정을 한번에 정리하기 위해 서비스 배포는 글을 마지막에 작성하려고 했다.
크게 보면 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을 해주었다.
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 접속]
참고 링크
1) 인증서 생성
Let's Encrypt에서 인증서 생성하기
형식 (Template)
certbot certonly --manual -d *.[도메인] -d [도메인] --preferred-challenges dns-01 --server <https://acme-v02.api.letsencrypt.org/directory>
nslookup으로 확인하기 - 이 절차를 하고 Enter를 입력하는 과정으로 넘어가야 함
nslookup -query=txt _acme-challenge.p2kcloud.com
다음 폴더에 있다고 한다.
/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
3) SpringBoot 세팅
docker-compose.yml 코드 수정 (application 부분 수정함)
application:
container_name: springboot
build: .
ports:
- 80:8080
- 443:443
depends_on:
- db
4) TEST 하기
일단 적용은 잘된 것 같다.
- localhost에서 test를 하니까 도메인이 안맞아서 생기는 오류 같다. (도메인은 www.p2kcloud.com인데, localhost로 접속하니까 생긴 것 같음)
EC2에서 test할 때는 인증서를 .gitignore에서 숨김 처리를 했기 때문에 우선적으로 EC2로 인증서를 보내야한다. (scp -i)
+) 도메인 설정
p2kcloud.com으로 ec2의 ip로 A 레코드 유형의 레코드 생성한다.
www.p2kcloud.com으로 p2kcloud.com을 CNAME 레코드 유형 타입의 레코드 생성한다.
'💻 개발 > 졸업과제' 카테고리의 다른 글
졸업과제 수상 및 회고 (0) | 2023.11.13 |
---|---|
kubernetes server에서 flask 서버로 정보 전송 (0) | 2023.10.19 |
kubernetes 사용하기 (2) (with nCloud) (0) | 2023.10.04 |
kubernetes 사용하기 (with nCloud) (0) | 2023.10.04 |
Kubernetes Service 사용해보기 (0) | 2023.09.10 |