nginx и django настройка для docker -композиция - PullRequest
1 голос
/ 23 марта 2020

У меня есть настройки с nginx и django (с именем python container).

Я могу получить доступ к верхней странице с помощью localhost:8000, однако я не могу получить файл stati c и не используйте API localhost:8000/api/items

Я новичок для nginx и django, поэтому все еще не могу понять. 1013 *

для stati c file

django ->8000 -> nginx

это правильно ??? или где я должен исправить ??

Это настройки ниже.

docker-composer.yml

version: '3'
services:
  python:
    container_name: python
    build: ./python
    command: uwsgi --socket :8001 --module myapp.wsgi --py-autoreload 1 --logto /tmp/mylog.log

    expose:
      - "8001"
  nginx:
    image: nginx:1.13
    container_name: nginx
    ports:
      - "8000:8000"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
      - ./nginx/static:/static
    depends_on:
      - python

app_nginx.conf

upstream django {
    ip_hash;
    server python:8001;
}

server {
    listen      8000;
    server_name 127.0.0.1;
    charset     utf-8;

    location /static {
        alias /static;
    }

    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }
}

server_tokens off;

uwsgi_prams

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;

1 Ответ

1 голос
/ 23 марта 2020

Stati c файлы генерируются по django команде управления collectstatic.

При запуске в контейнере django - эти файлы будут созданы и представлены только в контейнере django. Таким образом, STATIC_ROOT должен использоваться совместно с nginx - то есть одним общим docker томом, смонтированным как в django контейнер STATIC_ROOT, так и в nginx контейнер stati c путь к файлам.

This команда может использоваться как часть сценария entrypoint контейнера django для автоматического запуска при каждом запуске.

  python:
    volumes:
      - static-volume:/app/static

  nginx:
    volumes:
      - static-volume:/static

volumes:
  static-volume:

Или могут быть созданы файлы * stati c и предоставлены nginx /static другим способом, т.е. как артефакт при сборке / развертывании ci.


Или вы можете использовать whitenoise и заставить django обслуживать его stati c файлы (но не мультимедийные файлы).

Кроме того, файлы могут храниться (и распространяться) в облаке, как Amazon S3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...