初次部署django+gunicorn+nginx的方法步骤

来源:脚本之家  责任编辑:小易  

当然不对。我们先来明确一下,所谓的“后”是指什么?一条染色体,还是所谓的血缘香火,亦或者是姓氏的延续?相信学过生物的您一定知道,除非您是一位父亲,要求以后的儿子世代都必须生男孩,且需要一组家庭无私地奉献自己的女儿来帮助他,您的Y染色体才有可能保存,我觉得这是完全没有意义的,甚至是有点可笑的行为。传统的男尊女卑思想早已被打破,“老有所依”也不再局限于儿子的侍奉,甚至姓氏随父亲或者母亲都可以自由选择,所以说男女男女平等已经不再是一个画饼了。放眼当下社会,挣钱养家早已不是男人的专权,职业竞争中巾帼不让须眉之例比比皆是。虽然由于一些生理机制的限制,女孩在某些方面可能稍逊于男生,但在另一些方面,女孩也一

环境 ubuntu16.04 python3.6 django1.11 gunicorn19.7.1 nginx1.10.3

首先感谢邀请!1、新交法里无证驾驶处罚:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的处二百元以上二千元以下罚款,可以并处十五日以下拘留。对于未随身携带机动车驾驶证的,无论驾驶人在行驶过程中违法与否,均不得继续驾驶该车辆。公安机关交通管理部门应当扣留机动车,通知驾驶人提供驾驶证。2、无证驾驶撞人的处罚规定无证驾驶撞人,构成交通肇事罪,一般来说没有加重情节的话应该判刑3年以下。谢谢!

写在前面

其实无论是在部署,还是在其他方面,我们总会遇到一些问题。建议当感觉自己被卡住的时候,试着退出局部,从更高一层去观察问题,因为这个事情无论是多复杂,它还是由人设计出来的,它身上多多少少带着一些人类思考模式的通性(这个表达有点问题,但是我暂时想不出更好的了),尝试透过现象看本质,比如这个东西它为什么跑不起来,为什么我打开网页永远是404,如果这个时候你直接去问度娘,问逼乎,(我相信能看google的都不会看到这篇东西 :-) )我觉得你很难找到自己想要的答案。我的建议是尽量让问题细化,网页打不开,那往往只代表80端口不能访问,那你可以看看自己服务器的防火墙是不是进制了相关端口,又或者是服务器商帮你设置的安全组是不是把端口都关了;可以尝试ping一下,看服务器在不在线;看一下我们的代理服务器是不是监听了对的端口,诸如此类。

丰田埃尔法作为旗下一款高端MPV车型,舒适度被众多消费者喜欢,都说“买车不如买房,新车落地打八折”,但在车坛里有这样一款神车,保值率逆天。丰田埃尔法售价仅为76万元,但经销商却加价40万元购买,但依然受到消费者的追捧。在未来丰田埃尔法有可能推出低配更亲们的价格,让更多消费者接受。很多消费者不理解为什么要买将近120万的面包车?而且还是日本车。这对于大多数消费者来说,可能车主会被他们贴上各种标签。丰田埃尔法还是众多明星的御驾保姆车。这辆神车到底有什么魔力呢?新一代的丰田埃尔法外观的变化则迅雷不及掩耳,由原先的务实风变成龇牙咧嘴凶悍且霸气的武士风。外观方面采用了全新的设计风格,其中前脸巨大的纺锤形

最后,我认为在绝大多数情况下,我们踩过的坑,都是有前人踩过,而且还帮我们填掉了,所以用心找,总能找到答案的。

夲人晚上陪老父亲住院,办好住院手续到住院病房,一医一护聊着天就看着我们继续聊天,我认老父亲坐好上前问询住院事宜,这两人态度傲慢让我发火,两人理亏嘴噘脸吊着办好入院手续,之后医生竟奇葩的对我哥说,以后不允许我到住院病房,真是可笑之极,看出她在病人及家属面前内心是如此傲慢,所以医院在这方面应该加强教育,体现出白衣天使救死扶伤的精神。

关于Django

先确认在开发环境下能够正常访问

然后一般情况下,在执行python manager.py startproject project之后,目录应该是这个样子的

project/ --project/ --__init__.py --setting.py --urls.py --wsgi.py --templates/ --your app/ --manage.py

设置project/setting.py

要更改的几个点

1.DEBUG改成False,只有关闭了调试模式,后面才能让nginx来寻找静态文件。

2.ALLOW_HOSTS,加入你的域名,(或,和)服务器ip。我还加了127.0.0.1方便本地观察。

3.设置STATIC_ROOT,建议可以直接设为os.path.join(BASE_DIR, 'static/'),也就把文件夹在manage.py的根目录里。

4.执行python manager.py collectstatic,就会将所有静态文件都放到第三步中设置的文件地址中。

执行完第四步后,目录结构应该是这样

project/ --project/ --__init__.py --setting.py --urls.py --wsgi.py --templates/ --your app/ --manage.py --static/ --auth/ --your app/ --css/ --js/ --images/

关于Gunicorn

一开始可以先试着运行一下,进入project这个根目录,然后

gunicorn -w 3 -b 127.0.0.1:8080 project.wsgi:application

不出意外,就应该可以跑起来了。

关于project.wsgi:application的解释,前半截很容易理解,就是调用了project下的wsgi.py,而后面的application,我一开始以为这个application是要改成自己app的名字,后来才发现,这个实际上是wsgi.py中的变量,所以是固定的,不用改。

试着运行没问题之后,可以直接在根目录下创建gunicorn.conf.py

来配置位置,以后运行就用

gunicorn -c gunicorn.conf.py project.wsgi:appliction

因为每次都在命令行输参数好累。

我是在docker下面跑的,用nohup来执行的时候,会有问题,报import error,应该是环境变量没有设置好,但我现在还没解决这个问题,所以就只用了&。

关于Nginx

我先尝试讲一下我对django + gunicorn + nginx 这三兄弟的理解。首先我们知道,我们访问网站,就是去网络上的一台电脑里访问某个路径下的某个文件,那django的作用主要是做(生产)这个文件,拿一家餐馆来讲,我认为django就是这个餐馆的厨师,他负责做菜,当规模很小的时候,比如路边卖鸡蛋饼的大妈,因为客人不多,所以可以自己问客人要什么,然后再自己做,这就是django和自带的runserver所做的事情;那当规模变大了,比如普通餐馆,客人很多,厨师做菜都来不急了,根本没时间去问客人要什么,所以这个时候我们就需要服务员了,服务员去记录客人要什么,然后跟厨房讲,接着从厨房拿菜给客人,而在这里,gunicorn就是这个服务员;当规模更大一些的时候,每分钟都有几百个人(现实中来讲这已经是多到爆炸了吧)要进餐馆吃饭,你在餐馆里安排再多的服务员也不能处理完这么多客人的请求,而且餐馆的空间是有限的,服务员也占空间,多了放不下,所以这个时候怎么办呢,答案是在餐馆门口安排咨客,有序地引导客人进入餐馆,也可以在门口就帮客人点好菜,提高整体效率,Nginx就扮演了咨客这个角色。

先来试运行一下nginx,只要启动nginx这个服务,访问本地应该就可以看到nginx的欢迎页了。

因为现在阶段知识最简单的配置,只用到同步worker,所以只需要配置一下监听端口和静态文件的地址就可以了。

server{ listen 80;监听的端口 server_name 127.0.0.1; server_name 111.111.111.111; server_name your_www; #当请求这些server name的时候,nginx才会做反向代理,0.0.0.0是指全部 location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # location 顾名思义,定位,就是当访问 / 的时候,nginx会将请求转给本地的8080端口,而后面的设置都是一些基本的配置,可以直接用 location /static { alias /home/project/static; } # 这个就是配置静态文件的地方,要用绝对地址,对应最开始的目录形式,假设project就在/home下面,那么这样配置就可以的了,还有个前提是,你在开发的时候,采取了django的建议,每个app的静态文件都用多了一层app_name的文件夹来包住。 }

在配置静态文件的时候,alias /path/to/static的意思就是直接在这个地址上面找,而root /path/to/static则是在/path/to/static/static找,就是说root会自动加一个static。

更改完conf后,就可以nginx -t检查一下,ok之后就

service nginx restart,这样配置就生效了。

确认gunicorn已经运行,那么访问本地应该就可以看到你的网页了。

错误分析 还是看到nginx的欢迎页。去检查gunicorn的监听端口,和nginx转发的端口是否一致;检查是否启用了多个gunicorn;如果gunicorn没有开reload功能,那么在改django代码之后要手动重启gunicorn。 显示了网站内容,但是静态文件都是404,那就是静态文件地址配错了;静态文件显示403,那就是权限问题,在nginx的配置头部更改user信息,改成你的用户,要注意,你用户有nginx的权限才行,最简单就是把用户加到nginx这个组里面去,当然如果是想立刻看到,直接改成 user root。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

gunicorn django部署的时候static资源怎么整

拿一个templates讲解吧。

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta charset=utf-8>

<title>staitc例子</title>

<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}css/style.css" media="screen" />

<script type="text/javascript" src="{{STATIC_URL}}js/jquery.js"></script>

</head>

<body>

<img src="{{STATIC_URL}}images/me.jpg"" alt="img">

</body>

</html>

注意{{STATIC_URL}}就是取配置文件settings.py里的STATIC_URL变量,解析出来的就是:/static/。

而{{STATIC_URL}}css/style.css最终解析出来的就是我们想要的:/static/css/style.css,Django会根据配置文件找到相应的文件。本回答被提问者采纳

如何在Linux上使用Nginx和Gunicorn托管Django应用

apt-get

服务器拿到手后第一件事就是更新apt-get,要换源什么的自己搜一大堆。之前因为系统不小心选成了Ubuntu 10.04了,遇到一大堆问题,后来换到12.04一切顺利。

apt-get update

pip

pip还是建议更换源,速度是飞一般的感觉。具体方法可以看看我之前介绍的那篇文章《Pythoner的福利,豆瓣的PyPI源》

sudo apt-get install python-pip

Django

Django不用说肯定是用pip装,我一般是用的最新版,这样就可以了。

sudo pip install django

Nginx

首先给默认的Nginx配置备个份,这是好习惯。目录位于/etc/nginx/sites-available/default

cp /etc/nginx/sites-available/default default.bak

然后Vim编辑

vim /etc/nginx/sites-available/default

server {

listen 80;

server_name www.isaced.com;

access_log /var/log/nginx/isaced.log;

location / {

proxy_pass http://127.0.0.1:8000;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location /static/ {

root /data/isaced; #Django项目所在目录

}

以上是最简单的Nginx配置,目的是为能跑起来就行,更多其他详细配置还请参照其他文章。

Gunicorn

Gunicorn是一个朋友(CloverStd)推荐的,一个开源Python WSGI UNIX的HTTP服务器,Github仓库地址在这,传说速度快(配置快、运行快)、简单,默认是同步工作,支持Gevent、Eventlet异步,支持Tornado,官方有很详细的文档可以参阅。

需要在你的Django项目的settings.py中的INSTALLED_APPS加入:gunicorn

gunicorn --worker-class=gevent isaced.wsgi:application

--worker-class

指定工作方式,这里我用的gevent

如果提示You need gevent installed to use this worker则表示你还没有安装gevent。

isaced.wsgi:application

这里是指你的项目名,在Django创建项目的时候会自动生成对应名字文件夹中的wsgi.py,这里就是指的它。

###nohup

nohup是一个Linux命令,用来不挂断地运行某条命令。这里我们用它来执行gunicorn,来保持gunicorn进程不会被挂断。

nohup gunicorn --worker-class=gevent NSLoger.wsgi:application -b 127.0.0.1:8000&

--worker-class来指定工作方式为gevent,-b指定地址和端口号。

注意:在尾部加上&(and)字符表示后台运行

执行这条命令后可以用ps命令查看进程,就能看到gunicorn了~

Start

好了,以上就是整个服务器的配置了。然后我们重启下Nginx,刷新页面就能看到你的Django App了。

sudo service nginx restart

在Django nginx gunicorn设置外部IP错误问题,怎么解决

  通Nginx部署Django(基于ubuntu)

  Django部署式采用nginx+uwsgi式其比较见种式

  种式我通做nginx作服务器前端接收WEB所请求统管理请求nginx所静态请求自处理(NGINX强项)NGINX所非静态请求通uwsgi传递给Django由Django进行处理完WEB请求

  见uwsgi作用类似桥接器起桥梁作用

  Linux强项用做服务器所面整部署程我选择Ubuntu完

  、安装Nginx

  Nginx款轻量级Web 服务器/反向代理服务器及电邮件(IMAP/POP3)代理服务器并BSD-like 协议发行其特点占内存少并发能力强事实nginx并发能力确实同类型网页服务器表现较

  Nginx同前非流行web服务器利用其部署Django我做简单介绍

  Nginx官网:

  打ubuntu控制台(ctrl+alt+t)利用Ubuntu仓库安装

  fnngj@ubuntu:~$ sudo apt-get install nginx #安装

  启Nginx:

  fnngj@ubuntu:~$ /etc/init.d/nginx start #启

  fnngj@ubuntu:~$ /etc/init.d/nginx stop #关闭

  fnngj@ubuntu:~$ /etc/init.d/nginx restart #重启

  修改Nginx默认端口号打/etc/nginx/nginx.conf 文件修改端口号

  复制代码

  server {

  listen 8088; # 修改端口号

  server_name localhost;

  #charset koi8-r;

  #access_log logs/host.access.log main;

  location / {

  root html;

  index index.html index.htm;

  }

  复制代码

  概文件36行位置默认80端口号改其端口号 8088默认80端口号容易其应用程序占用

  通面命令重启nginx访问:http//127.0.0.1:8088/

  现图说明Nginx启功

  二、安装uwsgi

  通pip安装uwsgi

  root@ubuntu:/etc# python3 -m pip install uwsgi

  测试uwsgi创建test.py文件:

  def application(env, start_response):

  start_response('200 OK', [('Content-Type','text/html')])

  return [b"Hello World"]

  通uwsgi运行该文件

  fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --wsgi-file test.py

  接配置Django与uwsgi连接处假定我django项目位置:/home/fnngj/pydj/myweb

  fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --chdir /home/fnngj/pydj/myweb/ --wsgi-file myweb/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

  用选项:

  http : 协议类型端口号

  processes : 启进程数量

  workers : 启进程数量等同于processes(官网说spawn the specified number ofworkers / processes)

  chdir : 指定运行目录(chdir to specified directory before apps loading)

  wsgi-file : 载入wsgi-file(load .wsgi file)

  stats : 指定址启状态服务(enable the stats server on the specified address)

  threads : 运行线程由于GIL存我觉真没啥用(run each worker in prethreaded mode with the specified number of threads)

  master : 允许主进程存(enable master process)

  daemonize : 使进程台运行并志打指定志文件或者udp服务器(daemonize uWSGI)实际用运行记录输本文件

  pidfile : 指定pid文件位置记录主进程pid号

  vacuum : 服务器退候自清理环境删除unix socket文件pid文件(try to remove all of the generated file/sockets)

  三、Nginx+uwsgi+Django

  接我要三者结合起首先罗列项目所需要文件:

  myweb/

  ├── manage.py

  ├── myweb/

  │ ├── __init__.py

  │ ├── settings.py

  │ ├── urls.py

  │ └── wsgi.py

  └── myweb_uwsgi.ini

  我通Django创建myweb项目目录myweb已经帮我 wsgi.py文件所我需要再创建myweb_uwsgi.ini配置文件即uwsgi支持种类型配置文件xmlini等处使用ini类型配置

  复制代码

  # myweb_uwsgi.ini file

  [uwsgi]

  # Django-related settings

  socket = :8000

  # the base directory (full path)

  chdir = /home/fnngj/pydj/myweb

  # Django s wsgi file

  module = myweb.wsgi

  # 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

  复制代码

  配置其实相于节通wsgi命令面跟堆参数式给文件化

  socket 指定项目执行端口号

  chdir 指定项目目录

  module myweb.wsgi 理解于myweb_uwsgi.ini文件说与平级myweb目录目录wsgi.py文件

  其几参数参考节参数介绍

  接切换myweb项目目录通uwsgi命令读取myweb_uwsgi.ini文件启项目

  复制代码

  fnngj@ubuntu:~$ cd /home/fnngj/pydj/myweb/

  fnngj@ubuntu:~/pydj/myweb$ uwsgi --ini myweb_uwsgi.ini

  [uWSGI] getting INI configuration from myweb_uwsgi.ini

  *** Starting uWSGI 2.0.12 (32bit) on [Sat Mar 12 13:05:06 2016] ***

  compiled with version: 4.8.4 on 26 January 2016 06:14:41

  os: Linux-3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC *

  nodename: ubuntu

  machine: i686

  clock source: unix

  detected number of CPU cores: 2

  current working directory: /home/fnngj/pydj/myweb

  detected binary path: /usr/local/bin/uwsgi

  !!! no internal routing support, rebuild with pcre support !!!

  chdir() to /home/fnngj/pydj/myweb

  your processes number limit is 15962

  your memory page size is 4096 bytes

  detected max file descriptor number: 1024

  lock engine: pthread robust mutexes

  thunder lock: disabled (you can enable it with --thunder-lock)

  uwsgi socket 0 bound to TCP address :8000 fd 3

  Python version: 3.4.3 (default, Oct 14 *, 20:37:06) [GCC 4.8.4]

  *** Python threads support is disabled. You can enable it with --enable-threads ***

  Python main interpreter initialized at 0x8b52dc0

  your server socket listen backlog is limited to 100 connections

  your mercy for graceful operations on workers is 60 seconds

  mapped 319920 bytes (312 KB) for 4 cores

  *** Operational MODE: preforking ***

  WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)

  *** uWSGI is running in multiple interpreter mode ***

  spawned uWSGI master process (pid: 7158)

  spawned uWSGI worker 1 (pid: 7160, cores: 1)

  spawned uWSGI worker 2 (pid: 7161, cores: 1)

  spawned uWSGI worker 3 (pid: 7162, cores: 1)

  spawned uWSGI worker 4 (pid: 7163, cores: 1)

  复制代码

  注意查看uwsgi启信息错要检查配置文件参数否设置误

  再接要做修改nginx.conf配置文件打/etc/nginx/nginx.conf文件添加内容

  复制代码

  ……

  server {

  listen 8099;

  server_name 127.0.0.1

  charset UTF-8;

  access_log /var/log/nginx/myweb_access.log;

  error_log /var/log/nginx/myweb_error.log;

  client_max_body_size 75M;

  location / {

  include uwsgi_params;

  uwsgi_pass 127.0.0.1:8000;

  uwsgi_read_timeout 2;

  }

  location /static {

  expires 30d;

  autoindex on;

  add_header Cache-Control private;

  alias /home/fnngj/pydj/myweb/static/;

  }

  }

  ……

  复制代码

  listen 指定nginx代理uwsgi外端口号

  server_name 网资料都设置网址(例wwwexamplecom)我设置网址访问所指定本机默认ip

  进行配置候我问题直想通nginx底何uwsgi产关联现看概主要两行配置

  include uwsgi_params;

  uwsgi_pass 127.0.0.1:8000;

  include 必须指定uwsgi_params;uwsgi_pass指本机IP端口与myweb_uwsgi.ini配置文件必须直

  现重新启nginx翻看面重启nginx命令访问:http//127.0.0.1:8099/

  通IP端口号指向请求应该先nginx页面执行些请求看些请求终转uwsgi处理

gunicorn tornado部署django应用哪个好

两者都是异步机制,前者是容器异步机制,后者HTTPServer异步机制。

  • 本文相关:
  • 浅谈django+gunicorn+nginx部署之路
  • python模块之stringio使用示例
  • python学习思维导图(必看篇)
  • python导入txt数据到mysql的方法
  • 简要讲解python编程中线程的创建与锁的使用
  • python实现kmp算法的实例代码
  • python读取图片属性信息的实现方法
  • pycharm执行python时,填写参数的方法
  • python线程中同步锁详解
  • python 类与元类的深度挖掘 ii【经验】
  • python实现k-means算法
  • gunicorn django部署的时候static资源怎么整
  • 如何在Linux上使用Nginx和Gunicorn托管Django应用
  • 在Django nginx gunicorn设置外部IP错误问题,怎么解决
  • gunicorn tornado部署django应用哪个好
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved