3편<em>Django</em>Docker<em>Compose</em>배포<em>구성</em>(Nginx<em>+</em>.png

2편 Docker 설치 방법 총정리 (윈도우 / 리눅스 / 시놀로지 NAS)

이전 글에서 Docker 설치를 완료했다면 이제 실제 서버 구조를 만들어야 합니다.

이번 글 핵심 목표
  • Django + PostgreSQL + Nginx 구성
  • docker-compose로 한 번에 실행
  • 실전 배포 구조 이해



프로젝트 구조 만들기

아래와 같은 구조로 폴더를 구성합니다.


project/
│
├── docker-compose.yml
├── Dockerfile
├── nginx/
│   └── default.conf
│
├── app/
│   ├── manage.py
│   └── myproject/
│
└── requirements.txt

1️⃣ Dockerfile 작성

Dockerfile이란?
Docker 컨테이너 안에서 실행될 환경을 정의하는 파일입니다.
쉽게 말하면 “서버를 자동으로 설치하는 설치 설명서”라고 보면 됩니다.

FROM python:3.11

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
설정 설명
  • FROM python:3.11 → Python 실행 환경 생성
  • WORKDIR /app → 작업 디렉토리 설정
  • COPY requirements.txt → 필요한 라이브러리 복사
  • RUN pip install → 패키지 설치
  • CMD gunicorn → Django 서버 실행

2️⃣ requirements.txt

Django 프로젝트 실행에 필요한 Python 라이브러리를 정의하는 파일입니다.

Django
gunicorn
psycopg2-binary
라이브러리 설명
  • Django → 웹 프레임워크
  • gunicorn → Django 실행 서버 (WAS)
  • psycopg2-binary → PostgreSQL 연결 라이브러리

3️⃣ docker-compose.yml

docker-compose란?
여러 개의 컨테이너를 한 번에 실행하고 관리할 수 있는 도구입니다.
Django + DB + Nginx를 동시에 실행할 때 필수입니다.

version: '3'

services:
  web:
    build: .
    command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - .:/app
    depends_on:
      - db

  db:
    image: postgres:15
    restart: always
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data/

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - web

volumes:
  postgres_data:
설정 설명
  • web → Django 서버 컨테이너
  • db → PostgreSQL 데이터베이스
  • nginx → 웹 서버 (외부 접속 담당)
  • depends_on → 실행 순서 지정
  • volumes → 데이터 영구 저장

4️⃣ Nginx 설정

Nginx 역할
사용자의 요청을 받아 Django 서버로 전달하는 “중간 관리자” 역할을 합니다.
또한 CSS, JS 같은 정적 파일을 빠르게 처리합니다.

server {
    listen 80;

    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /static/ {
        alias /app/static/;
    }
}
설정 설명
  • proxy_pass → Django 서버로 요청 전달
  • web:8000 → Docker 내부 서비스 주소
  • /static/ → 정적 파일 처리 경로

5️⃣ Django DB 설정

Django가 PostgreSQL 데이터베이스와 연결하기 위한 설정입니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': 5432,
    }
}
설정 설명
  • ENGINE → 사용할 DB 종류
  • HOST = db → docker-compose 서비스 이름
  • PORT → PostgreSQL 기본 포트

6️⃣ 실행 방법


docker-compose up --build
처음 실행 시에는 반드시 --build 옵션을 사용해야 합니다.


docker compose -f docker-compose.yml up --build

.yml 파일명으로 실행 시키기 위해서는 -f 옵션을 넣어서 사용해야 합니다.




함께 보면 좋은 글 + 추천 유틸리티


마무리

이 단계까지 완료하면 로컬 환경에서 실제 서버와 동일한 구조를 구성한 상태입니다.

이제 단순 개발이 아니라 실제 서비스 운영 가능한 환경입니다.

다음 글에서는 Django production 설정과 static 처리까지 이어서 진행합니다.