Docker×DjangoRestFramework로 API 개발

신졸 유루유루 어드벤트 캘린더 16일 담당입니다!
올해도 반월이되었습니다.

소개


  • 쓰기
  • Docker와 Django, Django-rest-api를 사용해 본 이야기


  • 쓰지 않는 것
  • Docker 환경 구축
  • DjangoRestFramework를 사용한


  • 구현 환경
  • macOS Catalina 10.15.1
  • Docker desktop 2.1.6.0
  • Docker Compose 1.25.0


  • 이번에 사용하는 것



    장고



    장고의 공식 문서

    Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to It's free and open source.

    즉, 파이썬으로 웹 페이지를 만들 수있는 프레임 워크입니다.

    DjangoRestFramework



    장고를 사용하여 웹 api를 만드는 데 도움이되는 프레임 워크
    공식 사이트

    이것으로 기뻤다.




    위와 같은 콘솔을 사용하여 상태를 파악할 수 있으므로 결과를 보면서 만들 수 있습니다.

    조속히 실천



    이번 구현은 이쪽 장고 REST Framework를 사용하여 폭속으로 API 구현 의 기사를 참고로 작성했습니다
    또한 소스 코드는 github 여기에 있습니다.
    ファイル構成
    .
    ├── django_project
    │   ├── blog
    │   │   ├── __pycache__
    │   │   └── migrations
    │   │       └── __pycache__
    │   └── django_rest_test
    │       └── __pycache__
    ├── nginx
    │   └── conf
    ├── python
    └── static
    
    

    API 작성 (이번에는 여기 기사의 것을 사용하였습니다)



    docker-compose.yml 만들기



    docker-compose.yml
    version: '3'
    
    services: 
      nginx:
        image: nginx
        container_name: api.nginx
        ports: 
          - "80:80"
        volumes: 
          - ./nginx/conf:/etc/nginx/conf.d
          - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
          - ./static:/static
        depends_on: 
          - python
    
      python:
        build: ./python
        container_name: api.python
        command: uwsgi --socket :8001 --module django_rest_test.wsgi
        volumes: 
          - ./django_project:/code
          - ./static:/static
        expose: 
          - "8001"
    

    Docker-compose가 이렇게 작성했습니다.
    세세한 부분은 별도로 쓰지만,
    nginx와 python을 depends_on을 사용하여 python이 시작된 후 시작하도록합니다.
    (uwsgi 관계)

    nginx config 파일 만들기



    앞에서 설명한 python command uwsgi --socket :8001 --module django_rest_test.wsgi
    에서처럼 8001번 포트를 사용하여 상호작용

    nginx/conf/api.conf
    upstream django {
        ip_hash;
        server python:8001;
    }
    
    # configuration of the server
    server {
        # the port your site will be served on
        listen      80;
        # the domain name it will serve for
        server_name 127.0.0.1;
        charset     utf-8;
    
        # max upload size
        client_max_body_size 75M;
    
        location /static {    
            alias /static; 
        }
    
        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass  django;
            include     /etc/nginx/uwsgi_params;
        }
    }
    
    

    uwsgi_params
    uwsgi_param  QUERY_STRING       $query_string;
    uwsgi_param  REQUEST_METHOD     $request_method;
    uwsgi_param  CONTENT_TYPE       $content_type;
    uwsgi_param  CONTENT_LENGTH     $content_length;
    
    uwsgi_param  REQUEST_URI        $request_uri;
    uwsgi_param  PATH_INFO          $document_uri;
    uwsgi_param  DOCUMENT_ROOT      $document_root;
    uwsgi_param  SERVER_PROTOCOL    $server_protocol;
    uwsgi_param  REQUEST_SCHEME     $scheme;
    uwsgi_param  HTTPS              $https if_not_empty;
    
    uwsgi_param  REMOTE_ADDR        $remote_addr;
    uwsgi_param  REMOTE_PORT        $remote_port;
    uwsgi_param  SERVER_PORT        $server_port;
    uwsgi_param  SERVER_NAME        $server_name;
    

    아래는/python/Dockerfile입니다.
    From python:3.6
    
    RUN mkdir /code
    WORKDIR /code
    ADD requirements.txt /code/
    RUN pip install -r requirements.txt
    ADD . /code/
    

    RUN pip install -r requirements.txt
    에서 requirements.txt에 작성된 라이브러리를 pip를 사용하여 설치할 수 있습니다.

    python/requirements.txt
    Django==2.1
    uwsgi==2.0.17.1
    djangorestframework==3.9.4
    django-filter==2
    

    장고의 정적 파일 만들기



    API를 실행하기 위해 정적 파일을 생성하는 명령 사용
    오류가 없으면./static 아래에 파일이 만들어집니다.
    docker-compose run python ./manage.py collect static
    

    마지막으로 파일을 만들면
    docker-compose up -d
    

    문제없이 움직이면 localhost/api에 연결합시다.

    사이고에게



    이번에는 Docker를 사용하여 DjangoRestFramefork를 시작했습니다.
    처음 썼기 때문에 읽기가 어렵거나 잘못된 부분이 많을 수 있습니다.
    (부드럽게 지적해 주시면 기쁩니다)

    좋은 웹페이지 즐겨찾기