TIL(20240816) [QA환경 프로비저닝]
현재 main을 통해 CI/CD 파이프라인을 구축해서 배포하는 상태인데, 사용자 테스트 기간이라 EC2환경에서 테스트를 해보고 싶었지만 미루다 미루다 도저히 안되서 이제는 해야겠다고 싶어서 팀원들에게 현재 배포되고 있는 환경에서 테스트를 진행해도 될지 아니면 로컬에서만 진행한 테스트로 마무리를 할지 의논했었다.
하지만 실제 배포되는 환경에서 테스트를 해보는게 좋지 않느냐는 대다수의 반응이었다. 그래서 팀원들의 협력으로 dev브랜치를 QA 목적으로 인스턴스 하나를 더 생성하기로 했다.
💡 QA?
- 테스트 및 품질 보증을 위해 특별히 이 새 인스턴스를 사용하는 경우 “QA 환경 프로비저닝” 또는 “QA 인스턴스 설정”이라고도 할 수 있습니다. 이 설정은 프로덕션 환경을 변경하기 전에 애플리케이션이나 시스템이 예상대로 작동하는지 확인하는 데 도움이 됩니다.
일단 생성한 인스턴스에 도커에 관한 설치를 진행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 생성한 EC2환경에서 해당 명령어 진행
# 시스템 업데이트
sudo apt update
# HTTPS를 통해 리포지토리를 사용할 수 있도록 패키지 설치
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Docker의 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Docker 리포지토리 추가
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 패키지 목록 업데이트
sudo apt update
# Docker 설치
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Docker 서비스 시작 및 부팅 시 자동 시작 설정
sudo systemctl start docker
sudo systemctl enable docker
# 현재 사용자를 docker 그룹에 추가 (sudo 없이 docker 명령어 실행 가능)
sudo usermod -aG docker $USER
sudo usermod -aG docker ubuntu
# Docker Compose 최신 버전 다운로드
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
# 설치 확인
docker-compose --version
docker login
username 도커허브 이름
password 도커허브 비밀번호
배포를 담당햇던 팀원분의 주도하에 진행하다 보니 조금 뒤죽박죽 된 부분도 있는 것 같다. 그래도 앞으로를 위해 기록과 메모를 해두면 좋을 것 같아 TIL 정리하려고 한다.
그다음 로컬로 돌아와서 우리의 백엔드와 프론트엔드 프로젝트 이미지를 생성해주고 말아올리는 과정
나는 로컬에 환경변수 설정을 하지않아서 명령어가 인식이 되지 않았다. 환경변수 편집 path에서 C:\Users\myNAME\desktop\bodProject 추가 해주었다.
1
2
3
4
5
6
7
#도커 이미지 생성
docker build -t backend:latest .
docker push backend:latest
docker login
# 이미지 말아올리기
docker tag backend:latest (myhubName)/backend:latest
docker push (myhubName)/backend:latest
위 처럼 허브에 올려주었다면.. Ec2에서 당겨와야 한다.
1
2
3
4
5
6
7
8
9
10
11
// 생성한 인스턴스로 돌아가기
docker pull (myhubName)/backend:latest
docker images //이미지 생성됫는지 확인
vim docker-compose.yml
열려있는 yml파일 확인 lsof | grep docker-compose.yml
(삭제) rm .docker-compose.yml.swp
nano docker-compose.yml
cat docker-compose.yml (yml 그냥 보기)
docker log 컨테이너_id : 컨테이너의 로그를 확인하는 데 사용(어플리케이션 로그 확인)
docker system prune -a : Docker 시스템에서 사용되지 않는 데이터(중지된 컨테이너, 사용되지 않는 네트워크, 빌드 캐시 등)를 제거합니다.
yml 파일을 설정해준 다음
**줄간격 주의
1
2
3
docker-compose up -d : 컨테이너를 백그라운드에서 실행
docker-compose down : 실행 중인 컨테이너를 중지하고 제거
그런 다음 혹시나 인스턴스를 중지하였을 때에도 IP주소가 변경되지 않도록 탄력적 IP 설정을 해주었고, 인바운드 규칙에 대한 IP설정(포트범위, 소스유형, 보안그룹)을 마무리로 해주었다.
CORS 문제가 또 발생했는데 프론트쪽 nginx에 servername을 탄력적IP주소로 변경하고 백엔드쪽 webconfig쪽 AllowedOrigin에 프론트엔드 IP주소를 설정해주니 해결
그리고 여기서 주의할 점은 변경사항을 다시 github에 push하고 docker-compose up을 할때 꼭 이미지를 한번 더 확인하길 바란다. 변경되지 않은 이미지를 계속 up해주고 있어서 변경사항이 반영이 안되었는데, 컨테이너를 잠시 중단한 후에 (compose down) docker system prune -a 해당 명령어를 사용해서 삭제한 후 다시 compose up하니 변경사항이 반영되어서 해결…ㅎㅎㅎ
처음에는 정말 이해하기 힘들고 뭐가 뭔지도 모르겠지만 계속 반복해서 하다 보니 어느새 나의 것이 되가고 ‘이해할 수 있을까? ‘했던 때가 사라지고 어느새 손가락은 명령어를 치고 있었다.
수 많은 시행착오가 지금의 나를 만들어준다는 것을 😅