thxstore는 아래와 같은 환경에서 실행 중입니다.
- Created on 17:39 p.m. May 18, 2021
- OS : Ubuntu 20.04 LTS (GNU/Linux 4.15.0-72-generic x86_64)
- Cpu 모델 : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
- Total Memory: 16396056 kB
- 물리 cpu 개수 : 4 cpu당 물리 코어 : 4 논리 코어 수 : 32
- jenkins 2.3
- blueocean : 지속적 배포와 관리 할 수 있는 UI를 지원합니다.
- docker
- Backend와 Frontend를 컨테이너화합니다.
- docker-compose - jenkins
- DB 서버 : aws s3
- 파일 서버 : aws rds
- WebRTC : openVidu 2.17
최종 빌드와 배포를 위해 jenkins 단계는 제외하고 실행합니다.
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
frontend와 backend는 각 도커로 서버를 띄우고 있습니다.
# 필수 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# GPG Key 인증
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# docker repository 등록
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
# 시스템 부팅시 도커 시작
sudo systemctl enable docker && service docker start
# 도커 확인
sudo service docker status
- 도커 컨테이너 보는 법
- sudo docker ps -a
- 도커 컨테이너 삭제
- sudo docker rm <container_id>
- 도커 이미지 보는 법
- sudo docker images
- 도커 이미지 삭제
- sudo docker rmi <image_id>
- 강제 옵션 -f (삭제가 안될 때,)
- ex) docker rmi -f <image_id>
- 도커 로그 확인
- docker logs <image_id> : 도커가 꺼져있어도(컨테이너가) 최종적으로 실행된 기록을 가지고 있습니다(오류 잡을 때, 매우 유용)
같은 Docker Host내에서 실행중인 Container간 연결할 수 있도록 돕는 논리적 네트워크같은 개념입니다. 서로 간 통신을 가능하게 합니다. nginx를 통한 front, backend 통신을 위해 설정합니다.
sudo docker network create thxstorecicdnetwork
frontend에서는 ssl이 적용되어 있기 때문에 HTTPS 인증을 받아야합니다.
sudo apt-get install letsencrypt
# 만약 nginx를 사용중이면 중지
sudo systemctl stop nginx
# 인증서 발급
sudo letsencrypt certonly --standalone -d www제외한 도메인 이름
# 이메일 쓰고 Agree
# 뉴스레터 no
# 키가 발급되는데 이 두 가지를 써야합니다. 밑의 경로에 각각 하나씩 있습니다.
ssl_certificate /etc/letsencrypt/live/도메인이름/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인이름/privkey.pem;
실행 중인 도커 중, 이름이나 포트가 겹칠 위험이 있기 때문에 중지를 시킵니다.
# 도커 시작 전, 기존에 실행중인 도커를 멈추고 제거하는 작업.
docker ps -f name=frontend -q | xargs --no-run-if-empty docker container stop
docker ps -f name=backend -q | xargs --no-run-if-empty docker container stop
# 컨테이너 제거
docker container ls -a -f name=frontend -q | xargs -r docker container rm
docker container ls -a -f name=backend -q | xargs -r docker container rm'
# 도커 이미지 제거
docker images -f dangling=true && docker rmi $(docker images -f dangling=true -q)
docker build -t frontend:latest ./frontend
docker run -d --name frontend -p 80:80 -p 443:443 -v /etc/letsencrypt/live/도메인이름/:/var/jenkins_home/workspace/thxstore-jenkins-cicd/sslkey/ -v /etc/localtime:/etc/localtime:ro --network thxstorecicdnetwork frontend:latest
- 여기서 /etc/letsencrypt/live/도메인이름/ 경로는 SSL 인증 키가 있는 위치입니다. vue.js 빌드와 nginx가 시작됩니다.
docker build -t backend:latest ./backend
docker run -d --name backend --network thxstorecicdnetwork backend:latest
- springboot Gradle Multi Module을 시작합니다.
리겠습니다.