초학자가 Docker를 사용하여 Django+gunicorn+nginx+PostgreSQL 환경 구축

Dockerfile 만들기



Dockerfile
FROM python:3.7

RUN apt-get update && apt-get install -y \
    nano
WORKDIR  /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt

RUN mkdir -p /var/run/gunicorn
#CMD ["gunicorn", "conf.wsgi", "--bind=unix:/var/run/gunicorn/gunicorn.sock"]

requirements.txt 만들기



requirements.txt
Django
psycopg2
gunicorn

docker-compose.yml 만들기



※일부 수정했습니다・・・.

docker-compose.yml
version: '3'

volumes:
  gunicorn:
    driver: local
  dbdata:

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: django
    ports:
      - '8000:8000'
    volumes:
      - './web:/code'
      #- './web/static:/static' # 不要だったかもしれません。。。
      - gunicorn:/var/run/gunicorn
    tty: true
    stdin_open: true

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - '80:80'
    volumes:
      - './nginx/conf:/etc/nginx/conf.d'
      - './web/static:/static'
      - gunicorn:/var/run/gunicorn
    depends_on:
      - web

  db:
    image: postgres
    container_name: db
    ports:
      - "2345:5432"
    volumes:
      - "dbdata:/var/lib/postgresql/data"
    environment:
        - 'POSTGRES_DB=postgres'
        - 'POSTGRES_USER=postgres'
        - 'POSTGRES_PASSWORD=***'
        - 'POSTGRES_HOST_AUTH_METHOD=trust'

디렉토리 만들기



구성
.
├── Dockerifle
├── requirements.txt
├── docker-compose.yml
├── nginx
│   └── conf.d    # gunicornの設定ファイルを格納するため
└── web           # djangoプロジェクトを格納するため

gunicorn 설정 파일 만들기



구성
.
├── docker-compose.yml
├── Dockerifle
├── requirements.txt
├── nginx
│   └── conf
│       └── gunicorn.conf    # コレを作成
└── web       

gunicorn.conf의 내용은 이런 느낌입니다.

gunicorn.conf
upstream gunicorn-django {
    server unix:///var/run/gunicorn/gunicorn.sock;
}

server {
    listen 80;
    server_name localhost;

    location /static {
        alias /static/;
    }

    location / {
        try_files $uri @gunicorn;
    }

    location @gunicorn {
        proxy_pass http://gunicorn-django;
    }
}

docker-compose로 이미지를 빌드하고 컨테이너를 시작합니다.


$ docker-compose up -d

$ docker-compose ps 로 컨테이너가 모두 Up 되어 있는지 확인합니다.

장고 프로젝트 만들기



우선 장고 컨테이너에 들어갑니다.
$ docker-compose exec web bash

django 프로젝트를 만듭니다.
$ django-admin startproject conf .

settings.py 변경



방금 만든 django 프로젝트에서 settings.py의 ALLOWED_HOSTS를 변경합니다. 우선 어떤 서버 주소로부터의 액세스도 수리하기로 합니다만, 필요에 따라서 변경하는 것이 좋다고 생각합니다. . .

settings.py
ALLOWED_HOSTS = ['*']

이탈로 컨테이너에서 빠져 나갑니다. 그리고 일단 컨테이너를 내립니다. stop도 좋을지도 모릅니다.
$ docker-compose down

그런 다음 Dockerfile에 추가합니다.

Dockerfile
# 末尾に追加
CMD ["gunicorn", "conf.wsgi", "--bind=unix:/var/run/gunicorn/gunicorn.sock"]

다시 Docker를 업시킵니다.
$ docker-compose up --build -d

$ docker-compose ps에서 컨테이너가 Up인지 확인한 후 브라우저에서 localhost : 80에 액세스하여 로켓이 날아가는지 확인하십시오.

좋은 웹페이지 즐겨찾기