【问题标题】:Django Deployment with nginx - gunicorn from another server使用 nginx 的 Django 部署 - 来自另一台服务器的 gunicorn
【发布时间】:2018-10-08 06:56:11
【问题描述】:

我正在尝试通过不同的应用服务器部署我的Django ProjectApache2Nginx/gunicorn,...

它适用于Apache2Nginx,但我想将这些应用程序服务器与我的Django Projet 分离。我想要一个这样的环境:

  • 服务器 1 (172.30.10.92):Django 项目和 wsgi
  • 服务器 2 (172.30.10.93):Nginx/gunicorn

为什么?因为以后我会有一些 Django 应用程序,但我想只使用一个应用程序服务器。

我认为我的配置文件语法有误。

我在 /etc/nginx/sites-available/DatasystemsCORE.conf 中有

server {
    listen 8000;
    server_name 172.30.10.92; 

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

    location /static/ {
            root http://172.30.10.92:/var/www/html/;
    }

    location / {
            include proxy_params;
            proxy_pass http://172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock;
    }
}

server_name : 是来自 Django 服务器还是 nginx 服务器的 IP 地址?我认为这是第一个,但我不确定。

proxy_pass :我认为我的路径有问题

然后,我正在执行这个命令:

gunicorn --daemon --workers 3 --bind 172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock 172.30.10.92:/var/www/html/DatasystemsCORE/DatasystemsCORE.wsgi

还有一次,我觉得有语法问题,因为我收到了502 Bad Request

如何从远程 Django 服务器添加 IP 地址?

谢谢!

【问题讨论】:

    标签: django nginx gunicorn


    【解决方案1】:

    我找到了如何解决我的问题,并制作了一个教程(基于我的案例),以帮助所有想要做同样事情的人。

    我的文件在那里:Download tutorial file

    但这是用英文写的相同教程。

    我的 Django IP 服务器:172.30.10.92

    我的 Nginx IP 服务器:172.30.10.93

    1- 安装和配置wsgi(位于Django服务器上)

    WSGI 是使用 Django 项目创建的文件。

    文件位于/path/to/your/project/Myproject/wsgi.py

    我们必须像这样编辑这个文件:

    import os
    from django.core.wsgi import get_wsgi_application
    
    import sys sys.path.append('/var/www/html/Myproject')
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Myproject.settings")
    application = get_wsgi_application()
    

    2- 安装和配置 gunicorn/supervisor(位于 Django 服务器上)

    为了安装 gunicorn/supervisor,你必须在你的 shell 中执行:

    pip install gunicorn
    pip install supervisor
    

    然后,您必须在/etc/supervisor/conf.d/Myproject.conf 中创建一个新文件,如下所示:

    [program:Myproject]
    command = /home/valentin/.virtualenvs/MyprojectEnv/bin/gunicorn Myproject.wsgi:application --name "Myproject" --workers=4 --bind=0.0.0.0:8080 -- user="valentin" --group="valentin" ; Command to start app
    user = username #You have to replace by your username
    stdout_logfile = /var/log/supervisor/supervisor.log
    redirect_stderr = true
    log
    environment=LANG=fr_FR.UTF-8,LC_ALL=fr_FR.UTF-8
    

    我指定了 8080 端口,这是我的应用程序服务器和我的 Web 服务器之间的通信端口。

    3- 编辑 nginx 服务器上的 hosts 文件(位于 nginx 服务器上)

    您必须编辑位于/etc/hosts 的主机文件并在您的 Django 服务器中添加一个新条目:

    127.0.0.1 localhost 
    127.0.1.1 valentin 
    172.30.10.92 Myproject
    
    # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    

    4- nginx 存储库中的新配置文件(位于 nginx 服务器上)

    这个新文件应该放在/etc/nginx/sites-available/Myproject.conf

     server {
        listen 8080;
        server_name Myproject;
    
        root /var/www/html/Myproject/;
    
        location /static/ {
            root /var/www/html/;
        }
    
        location / {
            include proxy_params;
            proxy_pass http://172.30.10.92:8080;
            }       
    }
    

    IP 地址对应于我的 Django 服务器地址。我指定了监听端口(8080),我的 Django 项目和静态目录的路径。

    然后,您必须创建一个指向启用站点的符号链接。

    操作完成后,重启nginx服务:

    sudo service nginx restart
    

    5- 允许 Django 中的 nginx IP 地址(位于 Django 服务器上)

    您必须编辑您的 settings.py 文件以允许 ALLOWED_HOSTS 中的 nginx IP 地址:

    ALLOWED_HOSTS = ['localhost', '172.30.10.93', '127.0.0.1', '[::1]']
    

    6- 最后执行 gunicorn(位于 Django 服务器上)

    最后,你必须启动 gunicorn。您应该在您的 Django 根项目中并执行:

    gunicorn Myproject.wsgi:application --bind 172.30.10.92:8080
    

    现在,在您的浏览器中,尝试使用端口连接到您的 nginx 服务器:

    http://172.30.10.93:8080
    

    有效!

    PS : 本教程适合我,如果它不适合你,可能是我遗漏了什么,或者你可能没有完全像我一样;)

    【讨论】:

      【解决方案2】:

      您尝试做的事情没有任何意义。您当然可以在单独的服务器上使用单个 nginx,但 gunicorn 是应用程序服务器,属于应用程序。

      没有“Django 服务器”,所以你的第一个问题是无关紧要的。 gunicorn 需要服务于端口,而不是套接字,并且 nginx proxy_pass 将指向该端口。

      【讨论】:

      • 好的,所以我必须将 gunicorn 配置到我的“Django 服务器”中(“Django 服务器”是指带有我的 Django 应用程序的虚拟机)。但是我可以在另一台服务器上安装和配置 nginx 吗?嗯我没有找到根据这个配置知道的例子,所以这对我来说是一个但不清楚。
      • 是的,nginx 可以转发到运行在单独服务器上的 gunicorn,但正如我所说,它需要通过 IP/端口而不是通过套接字。
      • 好的,我必须看看如何配置我的/etc/nginx/sites-available/DatasystemsCORE.conf 文件以使用 IP 端口。比我假设我只需要启动将连接到 gunicorn 的 nginx,然后是 gunicorn 到 wsgi,最后是 wsgi 到我的 Django 应用程序?
      猜你喜欢
      • 2016-10-27
      • 1970-01-01
      • 2020-12-26
      • 2019-11-02
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2015-06-02
      • 2013-12-08
      相关资源
      最近更新 更多