서버 환경
Amazin EC2 FreeTier Ubuntu t2.micro
백엔드 구조도
위와 같이 각각의 독립된 환경에서 컨테이너로 관리하기로 하였다. (추후 확장성 고려)
Docker 설치
순서대로 입력
시스템 패키지 업데이트
sudo apt update
패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Docker 공식 GPG키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Docker 공식 apt 저장소 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
시스템 패키지 업데이트
sudo apt update
Docker 설치
sudo apt install docker-ce
Docker 버전 확인
sudo docker --version
유저 권한 부여
초기 설정으로는 root이외엔 docker 명령어를 실행할 수 없다. 아래의 명령으로 권한을 부여하자. (도커 그룹에 유저 추가)
sudo usermod -aG docker ${USER}
컨테이너 실행
GUI 기반의 Docker 도구 Portainer
볼륨 디렉터리 생성
Portainer 설치전 각종 설정값, 데이터들을 저장, 접근하기 위한 디렉터리를 정의한다. (위치는 마음대로, 필자는 홈 디렉터리)
sudo mkdir portainer/data
Portainer 실행 명령
docker run --name portainer -p 9000:9000 -d --restart always -v /home/ubuntu/portainer/data:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
옵션
--name portainer : 컨테이너 이름
-p 9000:9000 : 포트포워딩
-d : 백그라운드 실행
--restart always : docker 데몬 재시작시 항상 실행
-v : 볼륨 마운트
접속
서버 IP:포트 번호로 접속해보자
Ex) http://x.x.x.x:9000
최초 접속시 계정 생성을 해야한다. (그냥 ID, PW 만들어 주면 됨)
만든 계정으로 로그인한 화면
MySQL
Docker Volume 만들기
이번에는 볼륨 설정을 위의 Portainer와는 다르게 Docker 기능을 사용해보겠다.
docker volume create 볼륨이름
MySQL Image Pull & Run
도커 로그인(최초 한번)
docker login
Pull Image
docker pull mysql
MySQL 실행 명령
docker run -d --name mysql -p 3306:3306 -v checkIn-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=비번 mysql
MySQL 실행 시 Root 계정의 버밀번호를 설정해 주어야 한다.
-e 옵션을 통해서 환경변수를 MYSQL_ROOT_PASSWORD를 지정해주자.
Nginx
볼륨 디렉터리 생성
sudo mkdir nginx/logs
Nginx Image Pull & Run
Pull Image
docker pull nginx
Nginx 실행 명령
docker run --name nginx -d -p 80:80 -v /home/ubuntu/nginx/logs:/var/log/nginx nginx
위와같이 볼륨 설정을 해주면 서버에서 바로 로그를 확인할 수 있다.
성공적으로 실행됐다면 서버 IP로 접속할 시 Welcome to nginx! 페이지를 마주할 수 있을 것이다.
WAS(Web Application Server)
필자는 Github Actions를 통해서 CD환경을 구축하였다.
여기서 중요한 점 바로 Nginx 프록시 서버 설정을 해줘야 한다.
다시 Nginx로 돌아가서 설정파일을 작성해주자
server {
listen 80;
server_name _;
location / {
proxy_set_header Host $host;
proxy_pass http://172.17.0.5:8080/; //Docker 내부 IP
}
}
루트(/)로 들어오면 WAS로 서버로 연결해주는 설정이다.
이때 중요한 점은 같은 네트워크 안에 속해있어야 한다.
그리고 가동중이던 nginx를 중지하고 재실행 해준다.
docker stop nginx
docker rm nginx
docker run --name nginx -d -p 80:80 -v /home/ubuntu/nginx/logs:/var/log/nginx -v /home/ubuntu/nginx.conf:/etc/nginx/conf.d/default.conf nginx
설정파일 볼륨을 추가로 명시해 주었다.
이로써 Web Server부터 WAS까지 하나의 웹서비스를 구축했다고 할 수 있다 !
'Server & Infra' 카테고리의 다른 글
[Redis] Redis Master-Slave 구축하기 (0) | 2023.07.23 |
---|---|
[JMeter] Apache JMeter를 이용한 간단한 성능 테스트 (1) | 2023.02.26 |