AWS EC2 인스턴스에 정적 HTML 웹페이지를 Docker와 Nginx를 이용해 배포하는 방법을 아주 쉽게 정리했습니다.
별도의 도메인 없이도 탄력 IP만 있다면 바로 접속 가능합니다.
✅ 전제 조건
• EC2 인스턴스 생성 및 탄력 IP 연결 완료
• 보안 그룹에서 HTTP(80포트) 허용
• Docker 설치 완료
• /home/ubuntu/my_html/ 폴더에 다음과 같은 HTML 관련 파일이 존재
index.html
style.css
script.js
images/
🚀 Docker + Nginx로 배포하기 (볼륨 마운트 방식)
1. 컨테이너 실행
docker run -d -p 80:80 \
-v /home/ubuntu/my_html:/usr/share/nginx/html \
--name test-nginx nginx:alpine
옵션의미
-d | 백그라운드 실행 (detached mode) |
-p 80:80 | EC2의 80번 포트를 컨테이너의 80번 포트와 연결 |
-v /home/ubuntu/my_html:/usr/share/nginx/html | EC2의 HTML 폴더를 Nginx 기본 루트에 마운트 |
--name test-nginx | 컨테이너 이름 지정 |
nginx:alpine | 가볍고 빠른 Nginx 이미지 사용 |
2. 접속 확인
브라우저에서 http://<탄력 IP 주소>로 접속
→ 정상적으로 HTML 웹사이트가 뜨면 성공!
⚠️ 접속이 안 될 때 확인할 점
문제해결 방법
403/404 에러 | index.html 위치 확인, 퍼미션 확인 |
사이트 안 뜸 | EC2 인스턴스의 보안 그룹에서 80포트 열려있는지 확인 |
퍼미션 문제 | chmod -R 755 /home/ubuntu/mbti 실행 |
🔧 Nginx 설정 커스터마이징이란?
기본 Nginx 설정은 /usr/share/nginx/html/index.html을 자동으로 서빙합니다.
커스터마이징이 필요한 경우 예시:
• 특정 경로에 다른 폴더 연결 (/blog, /images)
• CORS 설정 추가
• 404 페이지 커스텀
• 백엔드 API 리버스 프록시 연결
• HTTPS 설정 (Let’s Encrypt)
👉 하지만 지금은 단순 정적 HTML 페이지이므로 필요 없음.
⚙️ Docker Compose는 무엇인가?
docker run 명령어 대신 docker-compose.yml 파일로 여러 컨테이너를 한번에 관리할 수 있는 도구입니다.
예시 상황:
• Nginx + Flask + DB 같이 다중 컨테이너 구성
• 환경변수/포트/볼륨 설정을 깔끔하게 관리
• CI/CD, 협업 환경 등 유지보수 필요 시
예시 파일:
version: '3'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./mbti:/usr/share/nginx/html
container_name: mbti-nginx
👉 하지만 지금처럼 간단한 정적 사이트 배포에는 필수 아님.
✅ 결론
지금처럼 정적 사이트 배포하는 경우라면?
🔧 Nginx 설정 커스터마이징 | ❌ 필요 없음 | 기본 설정으로 충분히 작동 |
⚙️ Docker Compose | ❌ 필요 없음 | 컨테이너 하나, 명령어도 짧고 간단함 |
지금처럼 단순한 개인용 정적 페이지는
✅ docker run 명령어 하나면 충분히 배포 가능!
📌 마무리
이제 여러분도 도메인 없이, AWS EC2와 Docker + Nginx만으로
HTML 웹사이트를 쉽고 빠르게 배포할 수 있습니다!
차후 다음 내용도 포스팅 해볼 예정입니다.
• HTTPS 적용 (Let’s Encrypt + Certbot)
• Nginx 설정 커스터마이징 실습
• Docker Compose 실전 적용