在nGINX上部署Django app

时间:2012-09-08 10:07:21

标签: python django web-services nginx uwsgi

我想在nGINX服务器上部署Django应用程序。我正在使用uWSGI。我查了许多教程,但都没有用。 Django应用程序作为独立应用程序运行完美。在nGINX上运行相同应用的最简单方法是什么?

我被困在这里想要一个解决方案..: - (

我的www文件夹位于/usr/share/nginx/www

我的网站启用了n conf.d,所有内容都在/etc/nginx/

我确实安装了uWSGI,但找不到任何名为uwsgi的文件夹 app-installed 文件夹/文件

4 个答案:

答案 0 :(得分:12)

创建dJango应用程序后。只需按照以下步骤操作:

第1步。在Django项目目录中创建一个说uwsgi.ini的文件。即除了manage.py

[uwsgi]
# set the http port
http = :<port_no>

# change to django project directory
chdir = <project directory>

# add /var/www to the pythonpath, in this way we can use the project.app format
pythonpath = /var/www

# set the project settings name
env = DJANGO_SETTINGS_MODULE=<project_name>.settings

# load django
module = django.core.handlers.wsgi:WSGIHandler()

第2步。 / etc / nginx / sites-available 下添加.conf文件

server {
listen 84;
server_name example.com;
access_log /var/log/nginx/sample_project.access.log;
error_log /var/log/nginx/sample_project.error.log;

# https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production
location /static/ { # STATIC_URL
    alias /home/www/myhostname.com/static/; # STATIC_ROOT
    expires 30d;
                  }

       }

第3步。在nginx.conf中,将请求传递给Django应用程序

在服务器{}块下,

location /yourapp {
           include uwsgi_params;
           uwsgi_pass <your app address, eg.localhost>:<portno>;
                   }

第4步。运行uwsgi.ini

> uwsgi --ini uwsgi.ini

现在对你的nGINX的任何请求都会通过uwsgi将请求传递给你的Django App ..享受:)

答案 1 :(得分:1)

除非你需要坚持使用uWSGI,否则最简单的方法(效率非常高)将是Gunicorn。他们有很好的文档,而且部署起来非常快捷。

我的网站很少(包括制作)和类似的东西:

website_gunicorn.conf.py(放在任何你喜欢的地方):

import multiprocessing
daemon = False
bind = "unix:/tmp/gunicorn.sock"
workers = multiprocessing.cpu_count() * 2 + 1
timeout = 60

相应的NGINX配置(部分,包含在主配置中):

upstream gunicorn {
    server unix:/tmp/gunicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name example.com;
    access_log /var/log/access.log combined;
    error_log /var/log/error.log error;

    keepalive_timeout 5;

    # path for static files
    root /path/to/your/static/files;

    location @django {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_ignore_client_abort off;
        proxy_buffering off;
        proxy_redirect off;
        proxy_pass   http://gunicorn;
        proxy_read_timeout 60;
    }         

    location / {
        try_files $uri @django;
    }
}

然后你应该能够这样开始(当然在安装了Gunicorn之后 - pip install gunicorn):

gunicorn_django -c /path/to/website_gunicorn.conf.py

和NGINX应连接到套接字并为网站提供服务(静态文件将由NGINX直接提供,为您节省一些内存)。

有关详细信息,请参阅deploymentconfiguration上的Gunicorn文档。 请注意,我在Gunicorn配置中有daemon=False。这是因为我使用Supervisor来控制它。你可能想也可能不想摆脱那条线。

答案 2 :(得分:1)

尽量远离与发行版有关的声音,他们可以轻易地将你推向错误的方向。

点击此处的快速入门:

http://projects.unbit.it/uwsgi/wiki/Quickstart

(以下,我的意思是'理解'不要复制和粘贴;)

从一个简单的配置开始,其中nginx将所有请求转发给uWSGI。

提供静态文件是另一回事,它不依赖于应用程序服务器,因此您可以关注官方Django文档。

答案 3 :(得分:0)

步骤1。在系统中安装Nginx。

sudo apt-get install nginx

第2步。在Django项目中编辑您的setting.py文件

ALLOWED_HOSTS = []

ALLOWED_HOSTS = ['*']

第3步。安装gunicorn

pip3安装gunicorn

第4步。创建一个.service文件并编写一些自己的配置

    sudo vi /etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=<your project root directory>
ExecStart=<path of your project>/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:<path of your wsgi file>/restapi.sock rest_Api.wsgi:application
[Install]
WantedBy=multi-user.target

第5步。运行给定命令

  sudo systemctl enable gunicorn

  sudo systemctl start gunicorn

第6步。在可用站点内创建文件

 sudo vi /etc/nginx/sites-available/gunicorn

第7步。在上面的文件(即gunicorn)中写出Give配置

server {
    listen <port on which you want to configure>;
    server_name <ip address> or <name of the server>;

    location = /favicon.ico { access_log off; log_not_found off; }
    location <path of your static directory> {
        root <path of your root project>;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:<path of your restapi.sock file>/restapi.sock;
    }
}

第8步。现在注释默认文件中的所有行。

    sudo vi /etc/nginx/sites-available/default

STEP 9。运行以下命令进行测试

  sudo ln -s /etc/nginx/sites-available/gunicorn1 /etc/nginx/sites-enabled/

  sudo nginx -t

步骤10 。重新启动Nginx服务器

   sudo systemctl restart nginx