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

printfnothing printfnothing     2022-12-02     607

关键词:

不知道大家有没有这种感受:在安装软件和配置环境的时候希望有份详细的文档教你一步步地安装和配置,并且在安装的过程中一次性成功完成,没有任何错误。

但是很多时候文档十分详细,安装过程就会出现很多问题,一样的过程,不同的环境可能就会出错。今天,我捣鼓了下在阿里云服务器和本地虚拟机环境下帮Django配置nginx+uwsgi,期间碰到过的问题现已解决(stackoverflow大法好),下面我说下配置过程,过程中碰到的问题,我会详细的指出,希望能给像我一样初次接触Django+nginx+uwsgi的新手提供点帮助。

在云服务器和本地虚拟机上的操作环境都是Ubuntu,我的Django1.8.11安装过程基本没什么问题,也是参照网上大神们的安装教程的,这里就不说了,主要说下nginx和uwsgi。

1.安装和配置nginx

(1)安装:sudo apt-get install nginx

(2)启动nginx:sudo /etc/init.d/nginx start

    关闭nginx:sudo /etc/init.d/nginx stop

    重启nginx:sudo /etc/init.d/nginx restart

成功启动后的nginx,默认监听80端口,因此在你的浏览器中输入nginx所在环境IP:80应该会看到

这一步注意事项:若你没有使用sudo并且不是在root下启动nginx,也就是单纯的/etc/init.d/nginx start,系统可能不会提示权限不够,会让你误以为nginx已经开启,我在这里就犯过错,而且是在后面配置uwsgi时候才发现的,当时还以为是uwsgi的配置出错了呢。

2.安装和配置uwsgi

uwsgi容易出错的地方比较多。

(1)安装uwsgi:sudo apt-get install uwsgi  成功后使用uwsgi --help看能否出现帮助信息

(2)配置uwsgi:uwsgi是个网关,连接你的nginx服务器和Django服务器,所以要分别配置两次。

首先在nginx上配置uwsgi

打开nginx的配置文件:这里要说明下,我在网上看教程时候说默认配置文件是/etc/nginx/nginx.conf,nginx.conf是配置文件不假,但是其内容跟nginx的版本有关,老版本的内容好像是(节选部分)

server 
    listen       80;    
    server_name  localhost;

    #charset koi8-r; 

    #access_log  logs/host.access.log  main;

    location / 
        root   html;
        index  index.html index.htm;
    


我用的是新版本1.4.6,部分内容是:

http 
	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

        ...................

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;

跟老版本的不太一样,我没有找到'server'的字段,后来读了下‘http’中代码,发现默认的server配置在/etc/nginx/sites-enabled/default

server 
	listen 80 default_server;
	listen [::]:80 default_server ipv6only=on;

	root /usr/share/nginx/html;
	index index.html index.htm;

	# Make site accessible from http://localhost/
	server_name localhost;

	location / 
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ =404;
                include uwsgi_params;
          uwsgi_pass 127.0.0.1:8000;
               # Uncomment to enable naxsi on this location
		# include /etc/nginx/naxsi.rules
	


nginx配置文件中的'server'字段与后面配置uwsgi息息相关,所以无论新老版本都必须找到它,然后在其中加入上面所示的两句话,include uwsgi_params;uwsgi_pass 127.0.0.1:8000;ip和port是你Django服务器的ip和port。这样就完成了nginx到uwsgi的配置。

再看Django配置uwsgi:

假设你的Django 工程在文件夹  /abc/djpy下,工程名叫做test。

这样在新建项目的时候在/abc/djpy/test/test下会自动生成wsgi.py;

你需要在/abc/djpy/test/下新建个myuwsgi.ini(uwsgi的初始配置文件),内容可以这么写:

[uwsgi]

# Django-related settings

socket = 127.0.0.1:8000

# the base directory (full path)
chdir           = /abc/djpy/test

# Django s wsgi file
module          = test.wsgi

plugins=python
# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

socket字段是你的django服务器的ip和port,chdir字段是你工程的绝对路径,module就是自动生成的wsgi,master是否开启主进程,processes是子进程数量,plugins是插件,一般django都是写python或者python3,vacuum是否在退出时清楚环境变量。

然后保存文件,执行sudo uwsgi --ini myuwsgi.ini

然后在浏览器中输入nginx服务器ip和端口号,出现下图表示成功:


如果你在执行sudo uwsgi --ini myuwsgi.ini的过程中出现WARNING,很可能导致配置失败,我遇到过的WARNING有:

原因:uwsgi缺少http请求处理插件,解决办法:sudo apt-get install uwsgi-plugin-python

如果你没遇到WARNING,却在连接服务器的时候出现'invalid request block size:'的错误

原因可能是将myuwsgi.ini中的socket字段写成了'socket= :8000'(网上有些教程是这么写的)解决方法:将配置文件中的socket字段的ip和port写完整,如果还不行将socket字段改为http字段,即'http=ip:port'


至此,配置完成,希望能够帮到大家。

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

...提供点帮助。在云服务器和本地虚拟机上的操作环境都是Ubuntu,我的Django1.8.11安装过程基本没什么问题,也是参照网上大神们的安装教程的,这里就不说了,主要说下nginx和uwsgi。1.安装和配置nginx(1)安装:sudoap... 查看详情

使用 Nginx/Fastcgi 在子 URL 下部署 django

】使用Nginx/Fastcgi在子URL下部署django【英文标题】:Deployingdjangounderasub-URLwithNginx/Fastcgi【发布时间】:2011-03-2423:13:16【问题描述】:我一辈子都不知道如何使用Nginx/fastcgi在非root位置下部署django站点,例如http://localhost:8080/myproject/... 查看详情

如何在 nginx 后面的子 URL 下部署 django

】如何在nginx后面的子URL下部署django【英文标题】:howtodeploydjangounderasuburlbehindnginx【发布时间】:2011-12-2907:17:09【问题描述】:我有一个在http://localhost:12345上运行的django应用程序。我希望用户通过urlhttp://my.server.com/myapp访问它。... 查看详情

如何在 ubuntu 14.04 上使用 nginx 和 gunicorn 部署 django 1.8 应用程序

】如何在ubuntu14.04上使用nginx和gunicorn部署django1.8应用程序【英文标题】:howtodeploydjango1.8applicationwithnginxandgunicornonubuntu14.04【发布时间】:2016-08-0612:27:10【问题描述】:您好,我正在开发我的第一个Web应用程序,我也使用过django... 查看详情

django项目生产环境部署

...ttps://www.jianshu.com/p/a679b602ef24安装uwsgi1、pip3installuwsgi2、在django项目下新建myuwsgi.ini文件(文件名可自取)3、进入项目根目录执行:没有报错则启动成功4、配置nginx在nginx同级目录下创建nginx.conf->my.conf文件进入nginx.conf配置重启nginx-... 查看详情

部署django(代码片段)

...下!本节将介绍如何部署Django,基于下面的架构:Python3+ubuntu16.04+Nginx+uWSGI+Django1.11首先,你得有一台ubuntu机器,真实物理机和虚拟机都行,如果是阿里云ECS主机并且带有独立公网IP,那是最好不过。我这里和大家一样,什么都没... 查看详情

部署django(代码片段)

...下!本节将介绍如何部署Django,基于下面的架构:Python3+ubuntu16.04+Nginx+uWSGI+Django1.11首先,你得有一台ubuntu机器,真实物理机和虚拟机都行,如果是阿里云ECS主机并且带有独立公网IP,那是最好不过。我这里和大家一样,什么都没... 查看详情

详细拆分如何在ubuntu上使用nginx+uwsgisocket方式部署django项目(代码片段)

前言相比较学习Django来说,部署应该是在整个环节中比较难的一项,特别是一些自学者,对从来没有接触过服务器,这一块我相信劝退了很多人!当初我学习的时候也是如此!今天辣条君给你们详细拆解分... 查看详情

如何用nginx部署django

如果你在windows上开发的django项目。部署的话,需要分三步。第一步:在linux下下载python用的依赖包,搭建python环境。将windows下的项目复制到linux下,使用django自带服务进行启动。第二步:下载uwsgi模块并且编写配置文件来替代django... 查看详情

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

参考技术A环境:python3.6centos7Django1.11用Django写了个小网站,只能在自己本地跑一跑!这怎么行?听说可以部署在云服务器上,这样别人就可以访问了!从哪儿开始?就从Django开始吧!老规矩,按步骤:这里不讲Django项目实施过程... 查看详情

Django + uWSGI 通过 Ubuntu 11.10 上的 NGINX

】Django+uWSGI通过Ubuntu11.10上的NGINX【英文标题】:Django+uWSGIviaNGINXonUbuntu11.10【发布时间】:2012-05-1407:02:11【问题描述】:我正在尝试部署一个django项目。我尝试了很多教程,但没有运气。我使用新的干净的Ubuntu11.10。我已经完成了... 查看详情

在 NGINX 上部署 Vue-Django-graphene

】在NGINX上部署Vue-Django-graphene【英文标题】:DeployingVue-Django-grapheneonNGINX【发布时间】:2020-05-0712:39:56【问题描述】:如果这个问题被认为已回答,我深表歉意,但在我的具体情况下,到目前为止,其他解决方案似乎无法解决我... 查看详情

ubuntu16.04下配置nginx与nodejs以及服务的部署(代码片段)

title:Ubuntu16.04下配置nginx与nodejs以及服务的部署date:2019-05-0522:45:49tags:Linux---第一步:安装nginxsudoapt-getupdatesudoapt-getinstallnginx如果遇到依赖问题,尝试执行sudoapt-get-finstall命令第二步:配置nginx首先备份原先的配置文件:sudocp/etc/nginx 查看详情

基于阿里云esc服务器(ubuntu18.04.5系统)利用nginx+gunicorn部署的django项目流程(代码片段)

一、前言之前在本地主机上写了一个django项目,最近又买了阿里云的学生服务器,就想着把这个django项目部署到服务器上。如今完成部署,发现自己踩过好多坑,就写了这篇文章来记录一下自己踩的坑,希望... 查看详情

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

...─urls.py│└──wsgi.py└──myweb_uwsgi.ini  在我们通过Django创建myweb项目时,在子目录myweb下已经帮我们生成的wsgi.py文件。所以,我们只需要再创建myweb_uwsgi.ini配置文件即可,当然,uwsgi支持多种 查看详情

django部署

...mmunity/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-16-04 在项目根目录(manage.py的目录)下执行启动命令,注意最后的static参数,没有的时候按照网上的方法一直没有样式uwsgi--http:8002--chdir/home/guchen/python/www/for_test/A... 查看详情

django-nginx与uwsgi项目部署

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

在 ubuntu 20.04 上部署 django 项目时出现 systemctl status gunicorn 错误

】在ubuntu20.04上部署django项目时出现systemctlstatusgunicorn错误【英文标题】:systemctlstatusgunicornerrorwhendeployingdjangoprojectonubuntu20.04【发布时间】:2021-10-0713:21:12【问题描述】:我想在数字海洋上的ubuntu20.4上部署一个django项目。我正在... 查看详情