部署django项目nginx+uwsgi(代码片段)

ray-h ray-h     2022-12-10     468

关键词:

记录一下使用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
View Code

现在,通过在一个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 (well 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 projects media files - amend as required
    

    location /static 
        alias /path/to/your/mysite/static; # your Django projects 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       # 项目路径

# Djangos 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站点是否如预期工作。




django项目分布式部署【uwsgi+nginx】

参考技术A使用USGI配置Django项目的多进程部署,使用NGINX进行静态文件的部署和负载均衡的配置 查看详情

瞬间心情愉悦,头发都少掉了几根!---django+uwsgi+nginx项目部署超详细步骤(代码片段)

...,头发都少掉了几根!---Django+uwsgi+Nginx项目部署超详细步骤先决条件步骤本地运行测试上传服务器环境安装准备django程序完美解决!瞬间心情愉悦,头发都少掉了几根!—Django+uwsgi+Nginx项目部署超... 查看详情

nginx+uwsgi02---django部署(代码片段)

1.文件结构myweb/├──manage.py├──myweb/│├──__init__.py│├──settings.py│├──urls.py│└──wsgi.py└──myweb_uwsgi.ini  在我们通过Django创建myweb项目时,在子目录myweb下已经帮我们生成的wsgi.py文件。所以,我们只需要再... 查看详情

django线上部署代码修改失效问题(代码片段)

记一次django项目的线上部署维护问题,django+nginx关于nginx反向代理服务器的介绍这里有一篇博客介绍的比较好:nginx的相关介绍以及当一次客户端请求发出后,uwsig以及uWSGI,Nginx之间的大致流程:uWSGI、WSGI和uwsgi一、问题描述在将... 查看详情

ubuntu环境下部署django+uwsgi+nginx总结(代码片段)

...ommit‘$gitpulloriginmaster--allow-unrelated-histories$gitpushoriginmaster部署项目到服务器安装python安装好项目用到的python。$sudoaptinstallpython$sudoaptinstallpython-pip$pipinstall--upgradepip安装virtualenv以及virutalenvwrapper,并创建虚拟环境。$pipinstallvirtualenv... 查看详情

项目部署(代码片段)

...Web服务器与Web框架之间一种简单而通用的接口2、单项目部署(nginx+uwsgi+django)1、确保Django 查看详情

线上项目部署(代码片段)

 wusir部署博客地址孙铭浩博客地址  孙铭浩踩过的坑centos7下部署django项目 我们项目部署需要用到uwsgi,它可以开启多进程,启动多个uwsgi实例,然后让nginx来做静态文件处理,以及负载均衡和反向代理.启动多个uwsgi通过ng... 查看详情

django-nginx与uwsgi项目部署

uwsgi是提供动态服务的nginx反向代理 在项目中创建一个settings.py的副本。我这里重命名为copy_settings.py,将配置文件中的DEBUG=False 修改项目下wsgi.py的启动配置文件名称  环境配置:  第一步:在Linux系统中创建一个... 查看详情

nginx+uwsgi部署django(代码片段)

1.安装nginxyuminstall-ynginx(需要epel源)2.安装环境#可以考虑使用虚拟化环境,本处不再使用3.安装uwsgiyumgroupinstall"Developmenttools"yuminstallzlib-develbzip2-develpcre-developenssl-develncurses-develsqlite-develreadline-develtk-de 查看详情

django部署——uwsgi+nginx(超详细)

...个小网站,只能在自己本地跑一跑!这怎么行?听说可以部署在云服务器上,这样别人就可以访问了!从哪儿开始?就从Django开始吧!老规矩,按步骤:这里不讲Django项目实施过程,假设你已经写了一个Django项目,并且在本地127.0... 查看详情

在阿里云服务器使用nginx+uwsgi+venv部署django项目

参考技术A1.首先先把项目上传到阿里云服务器2.需要安装python3.0以上版本(centeros7自带2.75版本)3.在此不介绍如何安装python高版本和虚拟环境4.在项目根目录创建虚拟环境,就像你在Pycharm里一样然后启动虚拟环境5.在虚拟环境下... 查看详情

django项目部署

1.布署前需要关闭调试、允许任何机器访问,在setting文件中设置DEBUG=FalseALLOW_HOSTS=[‘*‘,]2.安装uWSGIpipinstalluwsgi3.配置uWSGI,在项目目录下创建uwsgi.ini文件,与manage.py同级[uwsgi]#使用nginx连接时使用#socket=127.0.0.1:8080#直接做web服务器使... 查看详情

django项目部署上线

...统,python环境采用的是python3,django环境采用1.11一、自带的部署功能数据库迁移:如果django项目中的数据是在本地的mysql中,需要将它的数据迁移到远程连接 查看详情

项目部署nginx+uwsgi(代码片段)

1.项目部署的相关概念关于部署流程,主要包含以下两个方面:部署方案、部署环境:1.1部署方案1.分析项目的产品需求文档,定好部署方案的方向2.分析项目开发文档,按照功能边界,设计部署的结点3.分析项目功能软件,合理... 查看详情

uwsgi+nginx反向代理项目部署

...静态文件访问。①首先在linux下创建一个专门用于存放要部署的项目的文件夹django_worker。②先在其中创建虚拟环境创建虚拟环境的命令:virtualenvdjango_lib。相当于拷贝了一份纯净的python环境。③进入虚拟环境source./django_lib/bin/activ... 查看详情

django+vue前后端分离项目部署

...onf”配置文件如下:1、第一行主要就是给nginx加权限,vue部署后使用history路由时会去掉地址后面的‘#’号,打包部署后不加权限会有bug。2、如配置所示,有两个Server,分别部署了前端服务,和后端服务,值得注意的是两个Server... 查看详情

centos7部署django项目(代码片段)

uwsgiPython环境搭建【略】uwsgi模块的安装:pip3installuwsgiuwsgi配置文件编写:uwsgi配置文件格式可以是xml也可以是ini文件,这里使用ini文件在django项目的根目录新建一个uwsgi.ini文件,写入以下内容[uwsgi]http=:8000#绑定端口chdir=/home/trunk/#... 查看详情

ubuntu下django部署nginx+uwsgi(代码片段)

不知道大家有没有这种感受:在安装软件和配置环境的时候希望有份详细的文档教你一步步地安装和配置,并且在安装的过程中一次性成功完成,没有任何错误。但是很多时候文档十分详细,安装过程就会出现很... 查看详情