簡體   English   中英

docker-compose 的 nginx 和 django 設置

[英]nginx and django setting for docker-compose

我有nginxdjango (命名為 python 容器)的設置。

我可以使用localhost:8000訪問查看首頁,但是我無法獲取靜態文件,也無法使用 API localhost:8000/api/items

我是 nginx 和 django 的新手,所以仍然很困惑。

我正在計划這樣的設置

普通文件browser ->8000 -> nginx -> 8001 ->django

對於靜態文件

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;

靜態文件是在 Django 管理命令collectstatic上生成的。

如果在 django 容器中運行 - 這些文件將僅在 django 容器中生成並存在。 因此, STATIC_ROOT應該與 nginx 共享 - 即一個常見的STATIC_ROOT卷安裝到 django 容器STATIC_ROOT和 nginx 容器靜態文件路徑。

此命令可用作 django 容器的entrypoint腳本的一部分,在每次啟動時自動運行。

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

  nginx:
    volumes:
      - static-volume:/static

volumes:
  static-volume:

或者可以通過其他方式生成靜態文件並提供給 nginx /static ,即作為 ci 構建/部署期間的工件。


或者您可以使用whitenoise並使 django 為其靜態文件(但不是媒體文件)提供服務。

此外,文件可以存儲(和分發)在像 Amazon S3 這樣的雲中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM