su-tudy 님의 블로그

#9 실전 배포 — 클라우드 서버 & Docker & Django 본문

리눅스/Linux 실습

#9 실전 배포 — 클라우드 서버 & Docker & Django

su-tudy 2026. 4. 23. 18:13

 

📌 실전 서버 배포 흐름 맛보기

 

1-8편까지는 내 PC 위에 VirtualBox로 만든 가상환경에서 실습했다. 외부에서 접속할 수 없는 완전한 로컬 환경이었다.

이번 편은 그다음 단계로, 실제 인터넷에서 접속 가능한 서버에 서비스를 올리는 흐름을 맛보기로 살펴보는 내용이다. 클라우드 서버를 빌려 공인 IP를 얻고, Docker로 서비스를 실행하고, 도메인을 연결해 서비스가 외부에서 접속되기까지의 전체 과정을 가볍게 알아본다.

※ 이 편은 직접 실습한 내용이 아니며, 수업 내용을 바탕으로 실제 서버 배포의 흐름과 개념을 중심으로 정리했다.

 


📌 미리 알아두면 좋은 개념

 

❑ 로컬 환경 VS 클라우드 환경 

   1-8편 (로컬)       9편 (클라우드)   
VirtualBox 가상환경 실제 클라우드 서버
공인 IP 없고 내 PC만 접속 가능. 포트포워딩으로 내부 통신만 가능 공인 IP 보유. 전 세계 어디서나 접속 가능. 도메인 연결 가능

 

❑ 실전 배포 환경 관련 개념

  • 공인 IP : 인터넷에서 직접 접근 가능한 IP 주소. 클라우스 서버를 생성하면 하나 할당된다.
  • ACG (방화벽) : 네이버 클라우드의 방화벽 설정. 허용할 포트를 여기서 열어줘야 외부에서 접근 가능하다.
  • Nginx Proxy Manager : GUI로 리버스 프록시를 관리하는 Docker 컨테이너. 도메인별로 어떤 서비스로 연결할지 설정한다.
  • 리버스 프록시 : 외부 요청을 받아 내부 서비스로 전달하는 중간 서버. 하나의 서버에서 여러 도메인을 처리한다.
  • Django : Python 기반 웹 프레임워크. Docker 컨테이너 안에서 실행한다.
  • 172.17.0.1 : Docker 컨테이너에서 호스트 서버에 접근할 때 쓰는 기본 게이트웨이 IP. 127.0.0.1이 아니다.
💡 컨테이너 입장에서 127.0.0.1은 자기 자신을 가리키기 때문에, Docker 컨테이너 안에서 호스트의 MariaDB에 접속하려면 127.0.0.1이 아니라 172.17.0.1을 사용해야 한다.

 


📌 전체 배포 흐름 살펴보기

 

❑ 전체 흐름

클라우드 서버 준비
Dccker 설치
MariaDB 컨테이너
Nginx Proxy Manager
Django 앱
도메인 연결

 

❑ 클라우드 서버 준비

네이버 클라우드 플랫폼에서 서버를 생성하면 공인 IP가 할당된다. ACG(방화벽)에서 아래 포트를 열어줘야 외부 접속이 가능하다.

ACG에서 열어야 할 포트

80          →   HTTP (웹 서비스)
81          →   Nginx Proxy Manager 관리 페이지
443        →   HTTPS
2226      →   SSH (보안을 위해 기본 22번 대신 사용)
💡 기본 22번 포트는 자동화된 해킹 시도(브루트포스)가 끊임없이 들어온다. SSH 포트 번호를 바꾸는 것만으로도 대부분의 자동화 공격을 차단할 수 있다.

 

❑ Docker + MariaDB 컨테이너

8편에서 로컬에 설치했던 것과 동일하게 Docker로 MariaDB를 띄운다. 옵션 하나가 다른데, --restart=always 대신 --restart unless-stopped를 사용한다.

# 날짜 동기화 (Docker 작업 전 필수)
sudo date -s "YYYY-MM-DD HH:MM:SS"

# MariaDB 컨테이너 실행
docker run \
  --name mariadb__1 \
  -d \
  --restart unless-stopped \
  -e MARIADB_ROOT_PASSWORD=korea1231 \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v /docker_projects/mariadb__1/conf.d:/etc/mysql/conf.d \
  -v /docker_projects/mariadb__1/mysql:/var/lib/mysql \
  mariadb:latest
💡 날짜가 맞지 않으면 SSL 인증서, 토큰 인증 등이 실패할 수 있기 때문에 날짜 동기화는 Docker 작업 전 필수이다.
💡 --restart unless-stopped는 내가 직접 stop하지 않는 한 항상 재시작 한다. --restart=always와 달리 수동으로 멈춘 경우엔 재시작하지 않는다.

 

❑ Nginx Proxy Manager 설치

docker-compose로 Nginx Proxy Manager 컨테이너를 띄운다. 설치 후 공인IP:81로 접속하면 GUI 관리 화면이 나온다.

  1. docker-compose.yml 파일 생성
    • docker-compose로 Nginx Proxy Manager 컨테이너를 띄운 후 DB_MYSQL_HOST를 172.17.0.1로 지저해 호스트의 MariaDB와 연결한다.
  2. 관리 페이지 접속
    • 설치 후 공인IP:81로 접속. 초기 계정 : admin@example.com/ changeme → 로그인 후 즉시 비밀번호 변경 필수
  3.  Proxy Host 추가
    • Hosts Proxy Hosts Add Proxy Host에서 도메인과 내부 서비스 IP:포트를 연결한다.
💡 Nginx Proxy Manager의 핵심은 Prorxy Host 설정이다. 도메인 → 내부 서비스(IP:포트)로 연결을 GUI에서 클릭 몇 번으로 설정 할 수 있다. Advanced 탭에서 커스텀 nginx 설정도 직접 입력할 수 있다.

 

❑ Django 앱 컨테이너 세팅

Python 컨테이너를 띄우고 내부에서 Django를 설치한 뒤 프로젝트를 생성하는 흐름이다.

  1. Python 컨테이너 실행 및 접속
    • docker run으로 Python 컨테이너를 띄우고 docker exec -it python1 bash로 내부에 접속한다. Ubuntu 기반이라 apt-get install...으로 패키지를 설치한다.
  2. Django 및 mysqlclient 설치
    • pip install Django mysqlclient로 Django와 MariaDB 연결 드라이버를 함께 설치한다.
  3. Django 프로젝트 생성 및 실행
    • django-admin startproject base.으로 프로젝트를 생성하고 settings.py의 ALLOWED_HOSTS에 IP를 추가한 뒤 python manage.py runserver 0.0.0.0:8000으로 시작한다.
  4. MariaDB 연결 및 마이그레이션
    • settings.py DATABASES 설정에서 HOST를 172.17.0.1로 지정하고 python manage.py migrate로 초기 DB 테이블을 생성한다.
settings.py DATABASES 핵심 설정

'ENGINE': 'django.db.backends.mysql',
'HOST': '172.17.0.1',                                         # 컨테이너 → 호스트 MariaDB
'PORT': '3306',

 

❑ 도메인 연결

도메인을 구매(iwantmyname 등)하고 DNS 설정(dnszi 등)에서 공인 IP를 연결하면 도메인으로 서버에 접속할 수 있다. Nginx Proxy Manager에서 해당 도메인을 Proxy Host로 등록하면 도메인 → 내부 서비스 연결이 완성된다.

도메인 구매
DNS에 공인 IP 등록
Nginx Proxy Manager에 Proxy Host 추가
도메인으로 접속 성공

 


📌 핵심 명령어 스케치

 

# 날짜 동기화
sudo date -s "YYYY-MM-DD HH:MM:SS"

# 컨테이너 내부 접속
docker exec -it 컨테이너명 bash

# Docker Compose로 컨테이너 일괄 실행
docker-compose up -d

# Django 프로젝트 생성
django-admin startproject base .

# Django 서버 실행 (외부 접속 허용)
python manage.py runserver 0.0.0.0:8000

# Django DB 마이그레이션
python manage.py migrate

 


📌 시리즈 완주 🎉

 

가상환경 구축부터 실전 배포 흐름까지, 리눅스 서버 운영의 전 과정을 정리했다. 로컬 가상환경에서 시작해 리눅스 기초 설정부터 웹 서비스 운영, Docker, 배포 흐름까지 이어지는 과정이다.