首页 > 解决方案 > Docker-compose 与 Django、Redis、Gunicorn、Uvicorn、Nginx:我的 Nginx 工作正常吗?

问题描述

我正在尝试使用 docker-compose 来设置以下内容:
容器 1:gunicorn 服务 django WSGI + uvicorn 服务 django ASGI(用于 websockets)
容器 2:redis 服务器用于 websockets
容器 3:nginx 服务器来处理 HTTP/websocket 请求和分别将它们引导到 WSGI/ASGI

但是,在 docker-compose up 之后,我的 nginx 服务器似乎无法正常工作。
我可以运行应用程序堆栈,而 redis/django 之间的通信没有问题,但我看不到我的 ngnix 在任何地方工作。
我的问题是:
1)我怎么知道我的 nginx 服务器正在工作?(即请求不是直接发送到 gunicorn/uvicorn 而是通过 nginx)
2)这是正确的设置吗?

这是我的 docker-compose.yml:

version: '3.1'
services:
  web_app_server:
    restart: always
    build: .
    container_name: web_app_server
    ports:
      - "8007:8765"
      - "8000:8000"

  redis_server:
    restart: always
    image: redis
    ports:
      - "6379:6379"

  nginx:
    image: nginx:1.13
    ports:
      - 1337:80
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
    depends_on:  # <-- wait for djangoapp to be "ready" before starting this service
      - web_app_server

在 Dockerfile 的末尾,用于在 docker-compose 中构建 web_app_server,我有

CMD ./dockerfile_start.sh

其中 dockerfile_start.sh 包含:

killall gunicorn
killall uvicorn
./gunicorn_wsgi.sh &
P1=$!
./uvicorn_asgi.sh &
P2=$!
wait $P1 $P2

使用 gunicorn_wsgi.sh:

gunicorn locallibrary.wsgi:application --bind 0.0.0.0:8765

和 uvicorn_asgi.sh

uvicorn locallibrary.asgi:application --reload --host 0.0.0.0 --port 8000

我的 nginx 配置文件 ./config/nginx/conf.d:/etc/nginx/conf.d:

upstream django_app {
    server web_app_server:8765;
}

upstream socker_server {
    server web_app_server:8000;
}

server {
    listen 80;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
            root /home/nlp_app/NLP_Toolkit_App/src/Django/locallibrary;
    }

    location / {
            include proxy_params;
            proxy_pass http://django_app;
    }

    location /2/ {
        proxy_pass http://socker_server;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
    }
}

这是 docker-compose up 后的打印输出:

Creating nlp_toolkit_app_redis_server_1_c545837e3c21 ... done
Creating web_app_server                              ... done
Creating nlp_toolkit_app_nginx_1_c5c6fdde67ba        ... done
Attaching to web_app_server, nlp_toolkit_app_nginx_1_46069f8268c6, nlp_toolkit_app_redis_server_1_58ff0cf70dd9
web_app_server    | ./dockerfile_start.sh: 1: ./dockerfile_start.sh: killall: not found
web_app_server    | ./dockerfile_start.sh: 2: ./dockerfile_start.sh: killall: not found
web_app_server    | INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
web_app_server    | INFO:     Started reloader process [10] using statreload
web_app_server    | [2020-05-11 11:36:02 +0000] [9] [INFO] Starting gunicorn 20.0.4
redis_server_1_58ff0cf70dd9 | 1:C 11 May 2020 11:36:02.774 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_server_1_58ff0cf70dd9 | 1:C 11 May 2020 11:36:02.774 # Redis version=6.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_server_1_58ff0cf70dd9 | 1:C 11 May 2020 11:36:02.774 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_app_server    | [2020-05-11 11:36:02 +0000] [9] [INFO] Listening at: http://0.0.0.0:8765 (9)
web_app_server    | [2020-05-11 11:36:02 +0000] [9] [INFO] Using worker: sync
redis_server_1_58ff0cf70dd9 | 1:M 11 May 2020 11:36:02.775 * Running mode=standalone, port=6379.
redis_server_1_58ff0cf70dd9 | 1:M 11 May 2020 11:36:02.775 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_server_1_58ff0cf70dd9 | 1:M 11 May 2020 11:36:02.775 # Server initialized
redis_server_1_58ff0cf70dd9 | 1:M 11 May 2020 11:36:02.775 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_server_1_58ff0cf70dd9 | 1:M 11 May 2020 11:36:02.775 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_server_1_58ff0cf70dd9 | 1:M 11 May 2020 11:36:02.776 * Ready to accept connections
web_app_server    | [2020-05-11 11:36:02 +0000] [15] [INFO] Booting worker with pid: 15
web_app_server    | /usr/local/lib/python3.6/dist-packages/librosa/util/decorators.py:9: NumbaDeprecationWarning: An import was requested from a module that has moved location.
web_app_server    | Import of 'jit' requested from: 'numba.decorators', please update to use 'numba.core.decorators' or pin to Numba version 0.48.0. This alias will not be present in Numba version 0.50.0.
web_app_server    |   from numba.decorators import jit as optional_jit
web_app_server    | INFO:     generated new fontManager
web_app_server    | INFO:     Better speed can be achieved with apex installed from https://www.github.com/nvidia/apex .
web_app_server    | INFO:     PyTorch version 1.4.0 available.
web_app_server    | INFO:     PyTorch version 1.4.0 available.
web_app_server    | INFO:     Better speed can be achieved with apex installed from https://www.github.com/nvidia/apex .
web_app_server    | INFO:     PyTorch version 1.4.0 available.
web_app_server    | INFO:     Better speed can be achieved with apex installed from https://www.github.com/nvidia/apex .
web_app_server    | INFO:     Better speed can be achieved with apex installed from https://www.github.com/nvidia/apex .
web_app_server    | INFO:     Started server process [12]
web_app_server    | INFO:     Waiting for application startup.
web_app_server    | INFO:     ASGI 'lifespan' protocol appears unsupported.
web_app_server    | INFO:     Application startup complete.

提前感谢您的帮助。

标签: djangonginxdocker-composegunicornuvicorn

解决方案


推荐阅读