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超级详细流程配置到云服务器