✅ 이전 포스팅
2024.11.01 - [Java/쇼핑몰] - 쇼핑몰 만들기 - 1 [AWS EC2로 배포 서버 만들기]
이전 글에서는 클라우드 서버로 AWS를 선택한 뒤 EC2 인스턴스를 생성하는 것을 알아보았다.
이번 포스팅에서는 ec2에 docker-compose를 이용해 was, db, redis를 배포하는 방법을 알아본다.
생성한 ec2 인스턴스에 ssh로 접근하는 방법은 별도로 설명하지 않고 진행합니다.
✅ Docker 및 Docker-compose 설치
🟨 Docker
아래에 작성한 명령어를 차례대로 입력하면 된다.
1️⃣ Ubuntu 패키지 업데이트
sudo apt-get update
2️⃣ 필요한 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
3️⃣ Docker 공식 GPG키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4️⃣ Docker 공식 apt 저장소 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5️⃣ Ubuntu 패키지 업데이트
sudo apt-get update
6️⃣ Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
7️⃣ 설치 확인
sudo systemctl status docker
🟨 Docker-Compose
Docker-Compose를 설치하기 전에 Docker를 먼저 설치하여 패키지들을 업데이트하고 GPG키와 레포를
만들고 와야 한다.
1️⃣ Docker-Compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/2.29.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
위 명령어에서 "2.29.5"라고 되어 있는 부분을 원하는 버전으로 변경하여 입력하면 된다.
https://github.com/docker/compose/releases
최신 버전은 위 주소에서 확인할 수 있다.
2️⃣ 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
3️⃣ 링크 설정
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4️⃣ 버전 확인
docker-compose --version
✅ Docker-compose 실행
🟨 docker-compose.yml 작성
docker-compose는 docker-compose.yml 파일을 작성함으로 모든 준비가 마무리 된다.
파일의 위치는 어디든 상관없으나 나는 ~/compose/docker-compose.yml로 지정하였다.
version: '3.8'
services:
redis:
image: redis
container_name: docker_redis
ports:
- "6379:6379"
environment:
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
postgres:
image: postgres
container_name: docker_postgres
environment:
- POSTGRES_USER=${DB_USER_NAME}
- POSTGRES_PASSWORD=${DB_USER_PASSWORD}
- POSTGRES_DB=shop
- TZ=Asia/Seoul
ports:
- "5432:5432"
volumes:
- db_data:/var/lib/postgresql/data
shop_was:
image: rlaalsrl9569/shop_was:${SHOP_WAS_TAG}
container_name: docker_shop_was
depends_on:
- postgres
- redis
ports:
- "8080:8080"
environment:
- DB_URL=${DB_URL}
- DB_USER_NAME=${DB_USER_NAME}
- DB_USER_PASSWORD=${DB_USER_PASSWORD}
- LOCAL_DB_URL=${LOCAL_DB_URL}
- LOCAL_DB_USER_NAME=${LOCAL_DB_USER_NAME}
- LOCAL_DB_USER_PASSWORD=${LOCAL_DB_USER_PASSWORD}
- JWT_KEY=${JWT_KEY}
- A_EX_TIME=${A_EX_TIME}
- R_EX_TIME=${R_EX_TIME}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- SHOP_WAS_TAG=${SHOP_WAS_TAG}
volumes:
db_data:
서버에 .env 파일을 가지고 있다면 docker-compose.yml에서 환경변수를 위와 같이 넣어줄 수 있다.
내용이 복잡해 보이지만 Docker를 설치하여 이미지를 이용해 컨테이너를 만들어 본 사람이라면
각 내용들이 무엇을 뜻하는지 알 수 있을 것 같다.
🟨 docker-compose 실행
sudo docker-compose up -d
위 명령어를 통해 docker-compose를 실행시키면 was, db, redis를 한 번에 구동시킬 수 있다.
위 사진처럼 컨테이너가 같이 생성되어 동작하는 것을 볼 수 있다.
✅ 마무리
기존에 Docker를 이용해 여러 번 서비스를 올려봤지만 항상 개별적으로 컨트롤 해왔었는데
Docker-Compose를 이용하니 엄청 손쉽게 여러 컨테이너를 한 번에 컨트롤 할 수 있어서 신기했다.
다음 포스팅은 GitHub Actions를 통해 프로젝트 빌드부터 ec2 배포까지 CI/CD 하는 것을 작성하도록 하겠다.
https://github.com/sideProject-org/shop-back
'Java > 쇼핑몰' 카테고리의 다른 글
쇼핑몰 - 6 [Spring Security + JWT + OAuth2 + Redis] (2) | 2024.12.02 |
---|---|
쇼핑몰 - 5 [spring security + JWT + Redis 로그인] (0) | 2024.11.19 |
쇼핑몰 - 4 [회원 가입 구현] (0) | 2024.11.12 |
쇼핑몰 - 3 [GitHub Actions를 통한 CI/CD] (3) | 2024.11.06 |
쇼핑몰 만들기 - 1 [AWS EC2로 배포 서버 만들기] (3) | 2024.11.01 |