部署Django项目Nginx + uwsgi

记录一下使用Nginx + uwsgi部署Django项目

关于域名和端口

在这个教程中,我们将假设你的域名为 example.com 。用你自己的FQDN或者IP地址来代替。

从头到尾,我们将使用8000端口作为web服务器的公开端口,就像Django runserver默认的那样。当然,你可以使用任何你想要的端口,但是我已经选了这个,因此,它不会与web服务器可能已经选择的任何端口冲突。

基本的uWSGI安装和配置

把uWSGI安装到你的virtualenv中

pip install uwsgi

当然,有其他安装uWSGI的方式,但这种方式如其他方式一样棒。记住,你将需要安装Python开发包。对于Debian,或者Debian衍生系统,例如Ubuntu,你需要安装的是 pythonX.Y-dev ,其中,X.Y是你Python的版本。

基础测试

创建一个名为 test.py 文件:

# test.py
def application(env, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])
    return [b"Hello World"]             # python3
    # return ["Hello World"]           # python2

运行uWSGI:

uwsgi --http :8000 --wsgi-file test.py

选项表示:

  • http :8000       -->  使用http协议,端口8000
  • wsgi-file test.py   --> 加载指定的文件,test.py

当浏览器访问8000端口时,这将直接提供一个’hello world’消息。 访问:

http://example.com:8000

来看一看。如果是这样,那么意味着以下的组件栈正常:

the web client <-> uWSGI <-> Python

测试你的Django项目

现在,我们想让uWSGI做同样的事,但是返回一个Django站点而不是 test.py 模块。

如果你还没有这样做,那么请确保你的 mysite 项目实际上正常工作:

python manage.py runserver 0.0.0.0:8000

而如果正常,则使用uWSGI来运行它:

uwsgi --http :8000 --module mysite.wsgi     # mysite.wsgi 就是你项目下的wsgi文件,例如 app01.wsgi

将你的浏览器指向该服务器;如果站点出现,那么意味着uWSGI可以为你虚拟环境中的Django应用服务,而这个栈工作正常:

现在,通常我们不会让浏览器直接与uWSGI通信。那是web服务器的工作,这是个穿针引线的活。

使用Nginx

安装nginx

ubuntu:

sudo apt-get install nginx
sudo /etc/init.d/nginx start    # start nginx

现在,通过在一个web浏览器上通过端口80访问它,来检查nginx是否正常 - 你应该会从nginx获得一个消息:”Welcome to nginx!”. 那意味着整个栈的这些模块都能一起正常工作:

如果有其他的东东已经提供端口80的服务了,并且你想要在那里使用nginx,那么你将必须重新配置nginx来提供另一个端口的服务。但是,在这个教程中,我们将使用端口8000。

为你的站点配置nginx

一、创建uwsgi_params文件

你会需要 uwsgi_params 文件,可用在uWSGI发行版本的 nginx 目录下,或者从https://github.com/nginx/nginx/blob/master/conf/uwsgi_params 找到。

将其拷贝到你的项目目录中。一会儿,我们将告诉nginx引用它。

二、设置nginx.conf配置文件,这里是自定义配置文件

现在,创建一个名为mysite_nginx.conf的文件,然后将这个写入到它里面:

# the upstream component nginx needs to connect to
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock;   # 这里是通过socket方式访问django项目,也是我们的最终目的。mysite.sock文件会自动创建,我们只需要指定前面的路径到我们项目即可
    server 127.0.0.1:8001;          # for a web port socket (we‘ll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name .example.com;      # IP地址或者域名
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /path/to/your/mysite/media;  # your Django project‘s media files - amend as required
    }

    location /static {
        alias /path/to/your/mysite/static; # your Django project‘s static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;     # 指定django
        include     /path/to/your/mysite/uwsgi_params;   # 这里是我们刚刚第一步创建的uwsgi_params文件,指定路径
    }
}

mysite_nginx.conf

这个配置文件告诉nginx提供来自文件系统的媒体和静态文件。

将这个文件链接到/etc/nginx/sites-enabled,然后告诉Nginx使用我们创建的配置文件:

sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

配置完后重启nginx

/usr/local/nginx/sbin/nginx -t             # 检查配置
/usr/local/nginx/sbin/nginx -s reload  # 重新加载重启

三、使用Unix socket而不是端口

目前,我们使用了一个TCP端口socket,因为它简单些,但事实上,使用Unix socket会比端口更好 - 开销更少。

编辑 mysite_nginx.conf, 修改它以匹配:

server unix:///path/to/your/mysite/mysite.sock;    # 指定到我们的项目目录下即可,mysite.sock会自动创建
# server 127.0.0.1:8001; # for a web port socket (we‘ll use this first) 这里是使用http的,注销掉

然后重启nginx.

再次运行uWSGI:

uwsgi --socket mysite.sock --wsgi-file test.py

在浏览器中尝试访问http://example.com:8000/。

使用uwsgi和nginx运行Django应用

在配置nginx.conf配置文件后,我们就可以进行下一步对django项目的操作了:

在项目目录下创建一个uwsgi.ini文件,然后添加下面配置:

[uwsgi]

# Django-related settings
chdir           = /path/to/your/project       # 项目路径

# Django‘s wsgi file
module          = project.wsgi                  # 项目app下的wsgi.py文件,如app01.wsgi

# process-related settings
master          = true

# maximum number of worker processes
processes       = 10

# the socket (use the full path to be safe
socket          = /path/to/your/project/mysite.sock      # 前面路径指定到项目
chmod-socket    = 664                                            # 权限

# clear environment on exit
vacuum          = true

uwsgi.ini

然后使用这个文件运行uswgi:

uwsgi --ini uwsgi.ini       # 指定到uwsgi.ini的路径

再次,测试Django站点是否如预期工作。

原文地址:https://www.cnblogs.com/ray-h/p/10868674.html

时间: 2024-10-07 09:10:16

部署Django项目Nginx + uwsgi的相关文章

centos7下部署Django(nginx+uWSGI+Python3+Django)

部署代码后uWSGI需要重新启动,关闭系统防火墙或者开放端口 系统版本:CentOS7.0 Python版本:Python3.6.3 Django版本:2.0.5 uWSGI版本:2.0.17 nginx版本1.4.4 1.安装需要的依赖 ```shell yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel yum install libxml* yum -y

基于nginx和uWSGI在Ubuntu系统上部署Django项目

1. nginx1.1 安装sudo apt-get install nginx1.2启动.停止和重启sudo /etc/init.d/nginx startsudo /etc/init.d/nginx stopsudo /etc/init.d/nginx restart或者sudo service nginx startsudo service nginx stopsudo service nginx restart2. uWSGI安装用python的pip安装最简单:apt-get inst

结合Nginx+Uwsgi部署Django项目

大致想法以及背景: 刚开始创建Django项目,可以通过runserver命令更方便地调试程序,但是如果当一个项目完成了之后,需要部署到真正的环境,就需要考虑其稳定性.之前在写毕设的时候,写过一个自动化运维监控的项目,部署在自己的阿里云服务器上.那时候没啥经验,直接一个(pyhon runserver 0.0.0.0:8888 &)让项目在后台自己跑.所以对一些项目挂掉,数据库连接失败等问题不能够及时定位解决.所以现在花点时间结合Nginx+Uwsgi部署自己的项目,利用Nginx处理静态资源请

使用Nginx+uWSGI部署Django项目

1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi ln -s /usr/local/python3/bin/uwsgi /usr/local/bin/uwsgi #建立软链接 uwsgi --version #检查安装成功 3.基于uwsgi+django项目部署 django项目目录结构(orange_manage为app): uwsgi --ht

Nginx部署Django项目报错 KeyError: &#39;REQUEST_METHOD&#39;

这个问题是应为Nginx的配置文件有问题: 要使用uwsgi启动Django的话要有以下配置: upstream djangos14{ # nginx负载均衡配置: server 10.0.0.10:9999; #server 10.0.0.11:80; } server { listen 80; server_name www.s14hanju.com; location / { # 要使用uwsgi,代理就不要用proxy_pass了,要使用uwsgi_pass: uwsgi_pass dj

Linux 下部署Django项目

Linux 下部署Django项目 说明:本文所使用的环境为CentOS 6+Python2.7+Django1.11 安装Django.Nginx和uWSGI 1.确定已经安装了2.7版本的Python: 2.安装python-devel yum install python-devel 3.安装uwsgi pip install uwsgi 测试uwsgi是否能正常工作 1.新建一个index.py: # index.py def application(env, start_respons

docker部署django项目、mysql主从搭建、django实现读写分离

目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dockerfile 2 mysql主从搭建 3 django实现读写分离 我们使用python镜像源构建的出的容器,是一个纯净的debian系统下的python环境,在容器内部要想安装vim.nginx等,就不能使用yum install ...了,需要使用apt-get源.首先更新apt-get源,使用

centos6.5+Django+mysql+nginx+uwsgi

1.nginx的安装.这里采用nginx-1.6.0, 建立一个shell脚本然后执行. #!/bin/bash nginx_version="nginx-1.6.0" yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel cd soft tar zxvf $nginx_version".tar.gz" cd $nginx_version ./configure --error-log-pa

教你在裸机centos7系统中部署django项目

概要 本文用一台安装了centos7.5系统的裸奔的Linux机器(当然是虚拟机)详细讲解部署django项目的过程. 配置yum源 至于什么是yum源大家请自行百度,本人想用阿里云的yum源,因此需要在裸机上配置一下: 进入yum源的目录 cd /etc/yum.repos.d/ 查看yum源文件 ls -l 配置阿里云yum源 1.好习惯,备份yum源 mkdir repo_bak mv *.repo repo_bak/ 2.下载阿里云repo文件 wget http://mirrors.a