Docker와 Nginx로 멀티 사이트 운영하기
여러 개의 웹사이트를 운영해야 하는데, 도메인은 하나만 가지고 있다면?
걱정 마세요! Docker와 Nginx를 사용하면 하나의 도메인으로 여러 웹사이트를 효율적으로 운영할 수 있습니다.
이 글에서는 Docker와 Nginx를 활용하여 멀티 사이트를 구축하는 방법을 자세히 알아보겠습니다.
1. 왜 Docker와 Nginx를 사용해야 할까요?
Docker와 Nginx는 멀티 사이트 운영에 최적화된 조합입니다. 각각의 장점을 살펴보겠습니다.
- Docker: 애플리케이션을 컨테이너로 격리하여 실행 환경을 일관성 있게 유지합니다.
- Nginx: 고성능 웹 서버이자 리버스 프록시로, 트래픽을 효율적으로 분산하고 SSL/TLS 암호화를 처리합니다.
Docker를 사용하면 각 웹사이트를 독립적인 컨테이너에서 실행할 수 있으며, Nginx는 이러한 컨테이너로 트래픽을 라우팅하여 하나의 도메인으로 여러 웹사이트를 서비스할 수 있도록 합니다.
2. Docker 환경 설정
먼저 Docker 환경을 설정해야 합니다. Docker가 설치되어 있지 않다면, Docker 공식 웹사이트에서 설치 가이드를 참조하여 설치하세요.
2.1. 웹사이트 컨테이너 생성 (예시: 두 개의 웹사이트)
각 웹사이트를 위한 Docker 컨테이너를 생성합니다. 여기서는 간단한 HTML 파일을 제공하는 두 개의 웹사이트를 예시로 사용합니다.
웹사이트 1 (site1):
# site1/index.html
<!DOCTYPE html>
<html>
<head>
<title>Site 1</title>
</head>
<body>
<h1>Welcome to Site 1</h1>
</body>
</html>
웹사이트 2 (site2):
# site2/index.html
<!DOCTYPE html>
<html>
<head>
<title>Site 2</title>
</head>
<body>
<h1>Welcome to Site 2</h1>
</body>
</html>
각 웹사이트의 Dockerfile을 작성합니다. 각 웹사이트의 루트 디렉토리에 Dockerfile을 생성합니다.
site1/Dockerfile:
FROM nginx:latest
COPY index.html /usr/share/nginx/html
site2/Dockerfile:
FROM nginx:latest
COPY index.html /usr/share/nginx/html
각 Dockerfile을 빌드하여 이미지를 생성합니다.
docker build -t site1 . # site1 디렉토리에서 실행
docker build -t site2 . # site2 디렉토리에서 실행
생성된 이미지를 기반으로 컨테이너를 실행합니다.
docker run -d --name site1_container -p 8001:80 site1
docker run -d --name site2_container -p 8002:80 site2
3. Nginx 설정: 리버스 프록시 및 가상 호스트
Nginx 설정을 통해 각 웹사이트로 트래픽을 라우팅합니다. Nginx 컨테이너를 생성하고, 설정 파일을 작성합니다.
3.1. Nginx 컨테이너 생성
Nginx 컨테이너를 위한 Dockerfile을 작성합니다.
# nginx/Dockerfile
FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf
Nginx 설정을 위한 파일을 생성합니다.
# nginx/nginx.conf
server {
listen 80;
server_name yourdomain.com; # 실제 도메인으로 변경
location / {
proxy_pass http://site1_container:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /site2/ {
proxy_pass http://site2_container:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Dockerfile을 빌드하고 컨테이너를 실행합니다.
docker build -t nginx . # nginx 디렉토리에서 실행
docker run -d --name nginx_container -p 80:80 --network host nginx
위 설정에서 yourdomain.com을 실제 도메인으로 변경하고, /site2/와 같은 경로를 사용하여 두 번째 웹사이트에 접근하도록 설정했습니다. proxy_pass는 트래픽을 해당 컨테이너로 전달합니다.
4. DNS 설정
도메인 DNS 설정을 통해 Nginx 컨테이너의 IP 주소를 가리키도록 설정합니다. 도메인 등록 기관에서 A 레코드를 추가하여 Nginx 컨테이너가 실행되는 서버의 IP 주소를 지정합니다.
5. SSL/TLS 설정 (HTTPS)
보안을 위해 SSL/TLS를 설정하여 HTTPS를 사용합니다. Let's Encrypt와 같은 서비스를 사용하여 SSL 인증서를 발급받고, Nginx 설정에 추가합니다.
Nginx 설정 (HTTPS):
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
location / {
proxy_pass http://site1_container:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /site2/ {
proxy_pass http://site2_container:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
6. 배포 및 관리 팁
- Docker Compose: Docker Compose를 사용하여 여러 컨테이너를 쉽게 관리하고 배포할 수 있습니다.
- 자동화: CI/CD 파이프라인을 구축하여 자동 배포를 구현합니다.
- 모니터링: Prometheus와 Grafana를 사용하여 컨테이너 및 서버의 성능을 모니터링합니다.
- 로그 관리: ELK 스택(Elasticsearch, Logstash, Kibana) 또는 Fluentd를 사용하여 로그를 수집하고 분석합니다.
7. 결론
Docker와 Nginx를 활용하면 하나의 도메인으로 여러 웹사이트를 효율적으로 운영할 수 있습니다.
이 가이드를 통해 멀티 사이트 구축의 기본을 이해하고, 실제 환경에 적용해 보세요.
Docker의 유연성과 Nginx의 강력한 성능을 통해 웹사이트 운영의 효율성을 높일 수 있습니다.
'Tech Story' 카테고리의 다른 글
[Python] System에 반복 및 예약 실행 설정 (Scheduler) (0) | 2025.07.02 |
---|---|
[Flutter] Dialog 에서 setState() 사용하기 (0) | 2025.07.02 |
[AI] 속행이독 원행이중 (速行而獨 遠行而衆) (1) | 2025.06.27 |
[AI] 업무 자동화 툴 선택의 기준 (5) | 2025.06.27 |
[AI] 프롬프트 엔지니어링 (3) | 2025.06.27 |