Django + uWSGI 通过 Ubuntu 11.10 上的 NGINX

Posted

技术标签:

【中文标题】Django + uWSGI 通过 Ubuntu 11.10 上的 NGINX【英文标题】:Django + uWSGI via NGINX on Ubuntu 11.10 【发布时间】:2012-05-14 07:02:11 【问题描述】:

我正在尝试部署一个 django 项目。我尝试了很多教程,但没有运气。我使用新的干净的 Ubuntu 11.10。我已经完成了

apt-get install nginx
apt-get install uwsgi
service nginx start

我已经创建了文件夹/deploy/project1 并将manage.py 和其他文件放在那里。

我当前的/deploy/project1/project1/wsgi.py 包含:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project1.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

那么,您能告诉我如何正确地为domain.com 部署我的django 应用程序吗?

我还通过 pip 和 easy_install 安装了 Django

我应该在/etc/nginx/sites-enabled/default 中添加什么。

【问题讨论】:

【参考方案1】:

不要忘记 Debian、Ubuntu 及其衍生产品的 uwsgi 软件包不需要安装其 Python 插件 — uwsgi-plugin-python,因为 uWSGI 不一定只使用 Python(有 Lua、Erlang 和其他语言的插件)。但是,Django 需要 Python 插件。安装它:

sudo apt install uwsgi-plugin-python

与 PIP 的安装不同,您应该在应用配置中明确提及 uwsgi 的插件,方法是在其中添加 plugins = python 行(如果您使用 Python),如下所示:

[uwsgi]
plugins = python
uwsgi-socket = /var/sockets/django.sock
chmod-socket = 660
chdir = /home/v/django
module = project.wsgi

除非您这样做,否则将没有可用的 Python 特定选项。而 Debian 的/Ubuntu 的 uWSGI 将对此保持沉默!

【讨论】:

plugin = python,我想。你不会相信有多少地方根本忽略了这个问题。我正在将一个 python 应用程序从 1 个服务器(它正在 100% 工作)迁移到另一个托管在不同位置的服务器,虽然我显然已经做了这么多年,而且很久以前,我完全忘记了它。在查找有关 uwsgi python 应用程序 ini 文件的信息时,大多数地方都会告诉您完全删除“插件”行,没有提到要检查以确保系统上安装了 uwsgi-plugin-python 来自man uwsgi:--plugins — load uWSGI plugins; --plugin — load uWSGI plugins,所以这两个参数实际上是同义词。【参考方案2】:

假设您已经安装了所有要求并且您正在使用 aptitude 包,那么您不需要 wsgi.py。所有配置都在 uwsgi ini/xml/yaml 文件中。 (采用您喜欢的格式)。

这是 nginx 的 example.com 文件的最小示例(/etc/nginx/sites-available/examplecom 用于 ubuntu 11.10)

server 
    listen      80;
    server_name example.com;
    access_log  /var/log/nginx/projectname.log;
    location /media 
        alias /vagrant/test/projectname/media/;
    
    location /static 
        alias /vagrant/test/projectname/static/;
    
    location / 
        uwsgi_pass unix:///run/uwsgi/projectname/socket;
        include uwsgi_params;
    

创建指向 /etc/nginx/sites-enabled 的符号链接

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

sudo /usr/sbin/nxensite examplecom

你已经完成了 NGINX。

转到 /etc/uwsgi/apps-available 并创建您的 ini 文件

sudo vim /etc/uwsgi/apps-available/projectname.ini

[uwsgi]
virtualenv=/home/vagrant/.virtualenvs/projectenv
thread=3
master=1
env = DJANGO_SETTINGS_MODULE=projectname.settings
module = django.core.handlers.wsgi:WSGIHandler()
chdir = /path/to/my/django/project
socket = /run/uwsgi/projectname/socket
logto = /var/log/uwsgi/projectname.log

将您的 ini 指向 /etc/uwsgi/apps-enabled/projectname.ini

sudo ln -s /etc/uwsgi/apps-available/projectname.ini /etc/uwsgi/apps-enabled/projectname.ini

有关详细信息,请参阅系统上的以下任何文件:

/etc/uwsgi/apps-available/README
/etc/uwsgi/apps-enabled/README
/usr/share/doc/uwsgi/README.Debian.gz
/etc/default/uwsgi

你已经完成了。现在可以重启 nginx & uwsgi

sudo service nginx restart
sudo service uwsgi restart

干杯!

【讨论】:

感谢您的出色回答。我添加了一些 ubuntu 特定项目的编辑(nxensite,/etc/uwsgi/apps-* 的自述文件)。 你为什么使用:uwsgi_pass unix:/// 和 3 个斜杠?使用 3 个或 1 个前导斜杠有什么不同吗?? 没有区别,1 或 3 个前导斜杠代表您的 unix 套接字的完整路径。

以上是关于Django + uWSGI 通过 Ubuntu 11.10 上的 NGINX的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu12上部署Django1.8.4+uwsgi+nginx超级详细流程配置到云服务器

Ubuntu18部署uwsgi+flask应用

通过Nginx部署Django(基于ubuntu)

Nginx、uwsgi、django、ubuntu 16 带有静态文件的问题

Python 关于在ubuntu部署Django项目

ubuntu 16 安装django nginx uWSGI