nginx+uWSGI+django+virtualenv+supervisor部署发布web项目

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。

wsgi是PythonWeb服务器网关接口(Web Server Gateway Interface),WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的[[CGI]]标准而设计的。

Django是一个开放源代码的Web应用框架,由Python写成。

Virtualenv指的的Python的虚拟环境

supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息,通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启。

整个请求和响应流程如下:

一、Python环境的准备

说明,系统为centos 7.3

1 安装python3

安装python 3.4和对应版本的pip

[[email protected] ~]# yum install  python34.x86_64   python34-pip.noarch -y

2 安装虚拟环境

[[email protected] ~]# pip3 install virtualenv

(1)创建虚拟目录

[[email protected] ~]# virtualenv  django

(2)进入虚拟目录

[[email protected] ~]# cd django/

(3)启用虚拟环境

[[email protected] django]# source bin/activate

可以看到目录地下有默认的几个文件夹

(django) [[email protected] django]# ll
total 0
drwxr-xr-x 3 root root 330 Nov  5 15:00 bin
drwxr-xr-x 2 root root  24 Nov  5 14:55 include
drwxr-xr-x 3 root root  23 Nov  5 14:55 lib
lrwxrwxrwx 1 root root  16 Nov  5 14:55 lib64 -> /root/django/lib

二、Django的安装与项目创建以及配置

1 安装Django,这里使用1.11版本

(django) [[email protected] django]# pip3 install django==1.11
Collecting django==1.11
  ……………
Installing collected packages: pytz, django
Successfully installed django-1.11 pytz-2018.7

2 创建项目和应用

(1)创建名为mysite的项目

 (django) [[email protected] django]# django-admin startproject mysite

(2)创建名为app01的应用

(django) [[email protected] django]# cd mysite/
(django) [[email protected] mysite]#python3  manage.py  startapp  app01

(3)可以看到mysite项目下有如下目录

(django) [[email protected] mysite]# ll
total 4
drwxr-xr-x 3 root root 123 Nov  5 15:07 app01
-rwxr-xr-x 1 root root 804 Nov  5 15:04 manage.py
drwxr-xr-x 3 root root  93 Nov  5 15:07 mysite

3 修改默认配置文件

(1)修改Django配置文件mysite/settings.py

ALLOWED_HOSTS = [‘*‘]

注册app01
INSTALLED_APPS = [
‘app01.apps.App01Config‘,
....
]

静态文件目录
STATIC_URL = ‘/static/‘
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,"static"),
]

(2)修改路由匹配规则mysite/urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^index/‘, views.index),
]

(3)新建功能,修改app01/views.py

from django.shortcuts import HttpResponse

def index(request):
    return HttpResponse(‘Hello World!‘)

4 启动Django

(django) [[email protected] mysite]# python3 manage.py  runserver
Performing system checks...
…….
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

测试访问

[[email protected] ~]# curl http://127.0.0.1:8000/index/
Hello World!

三、uwsgi的安装与配置

1 由于使用pip3 install uwsgi 安装会报我不能解决的错误

在ubuntu上不会有这个错误

Command "/usr/bin/python3.4 -u -c "import setuptools, tokenize;
__file__=‘/tmp/pip-install-k0ebn5sl/uwsgi/setup.py‘;
f=getattr(tokenize, ‘open‘, open)(__file__);
code=f.read().replace(‘\r\n‘, ‘\n‘);
f.close();
exec(compile(code, __file__, ‘exec‘))" \
install --record /tmp/pip-record-eekd779j/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-k0ebn5sl/uwsgi/

故采用以下安装方式(仅限centos):

[[email protected] ~]# yum install uwsgi

查看版本

[[email protected] ~]# uwsgi --version
2.0.17.1

2 安装uwsgi-plugin-python3

注:插件 Ubuntu不需要此步骤

[[email protected] ~]# yum install -y uwsgi-plugin-python34.x86_64

为解决启动报错:

!!! UNABLE to load uWSGI plugin: /usr/lib64/uwsgi/python_plugin.so: cannot open shared object file: No such file or directory !!!

[[email protected] ~]# ln -sv /usr/lib64/uwsgi/python34_plugin.so /usr/lib64/uwsgi/python_plugin.so

3 启动uwsgi

(django) [[email protected] mysite]# uwsgi --http-socket :8888 --plugin python --wsgi-file ./test.py

Ubuntu下:uwsgi --http :88888 --wsgi-file test.py

4 测试

[[email protected] ~]# curl http://127.0.0.1:8888/index/
This is uwsgi test

test.py文件内容如下:

def application(env, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])
    return [b"This is uwsgi test"]

5 报错解决

(1)invalid request block size: 21573 (max 4096)...skip

buffer-size = 65536

(2)-- unavailable modifier requested: 0 --

-- unavailable modifier requested: 0 –

plugins = python #指定插件

四、Django与uwsgi的结合

1 热启动Django

(1)uWsgi热加载python程序(仅做测试使用)

(django) [[email protected] mysite]# uwsgi --http-socket  :8000 --plugin python  --module  mysite.wsgi  --py-autoreload=1

按下Ctrl +C 可终止进程

(2)启动Django

(django) [[email protected] mysite]# uwsgi --http-socket  :8000 --plugin python  --module mysite.wsgi

2   在/etc/目录下新建uwsgi_nginx.ini

uwsgi支持ini、xml等多种配置方式,本文以 ini 为例,添加如下配置

[[email protected] ~]# cat /etc/uwsgi_nginx.ini
[uwsgi]
# Django-related settings
# the base directory (full path)  #Django项目的目录
chdir           = /root/django/mysite
# Django‘s wsgi file
module          = mysite.wsgi
# the virtualenv (full path)  #虚拟目录的路径
home            = /root/django
# process-related settings
# master
master          = true
# maximum number of worker processes  #启动进程数,处理器个数
processes       = 1
# threads = 4                 #线程个数
# the socket (use the full path to be safe  #指定套接字
socket          = 0.0.0.0:8000
# ... with appropriate permissions - may be needed #权限设置,要是提示权限不够,可以改为666
# chmod-socket    = 664
# clear environment on exit #退出时清除环境
vacuum          = true
#指定插件,不然会报错:-- unavailable modifier requested: 0 --
plugins = python

3 指定配置文件并启动uwsgi

[[email protected] ~]# uwsgi --ini  /etc/uwsgi_nginx.ini

五、 配置nginx结合uWSGI

1 安装Nginx

[[email protected] ~]# yum install nginx –y

2 新建Nginx配置文件

[[email protected] ~]# vim /etc/nginx/conf.d/djang.conf

server {
    listen       80;
    server_name  192.168.15.128; #指定本机ip或者配置你的域名
    location / {
              include  /etc/nginx/uwsgi_params;
              uwsgi_pass 0.0.0.0:8000;

              }
    location /static {  #配置静态文件目录
              alias /root/django/mysite/static;
              }
    location /media {
              alias /root/django/mysite/media;
              }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

3 启动nginx

[[email protected] ~]# systemctl start nginx

此时以及可以测试访问了

[[email protected] ~]# curl http://127.0.0.1/index/
Hello World!

用浏览器测试如下

六、nginx结合supervisor

1 安装supervisor

[[email protected] ~]# yum install python34-setuptools.noarch
[[email protected] ~]# yum install  supervisor

2 生成配置文件

通过命令生成supervisor的配支文件

[[email protected] ~]# echo_supervisord_conf > /etc/supervisord.conf

3 编辑配置文件/etc/supervisord.conf

再最后添加如下内容:

[program:mysite]
command= /usr/sbin/uwsgi --uwsgi-socket 0.0.0.0:8000 --plugin python--chdir /root/django/mysite --home=/root/django --module mysite.wsgi
directory=/root/django/mysite
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

说明:

# [program:mysite] 指定程序名称
# /usr/sbin/uwsgi 指定uwsgi的位置,
#--chdir /root/django/mysite 指定项目路径
# --home=/root/django 指定寻虚拟目录

4 启动supervisor

最后启动supervisor,完成uWSGI启动django,nginx反向代理

[[email protected] ~]#  supervisord  -c /etc/supervisord.conf

此时配置完成!!至此,所有配置均已完成

操作说明:

supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

(1)启动mysite程序

supervisorctl -c /etxc/supervisord.conf  start  mysite

(2)重启mysite程序

supervisorctl  -c  /etc/supervisord.conf  restart   mysite

(3)停止mysite程序

supervisorctl  -c  /etc/supervisord.conf  stop  mysite

(4)更新新的配置到supervisord

supervisorctl  update

(5)重新启动配置中的所有程序

supervisorctl reload

参考:

https://www.cnblogs.com/pyyu/p/9481344.html
https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html
https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

原文地址:https://www.cnblogs.com/Sunzz/p/9923861.html

时间: 2024-10-08 20:04:25

nginx+uWSGI+django+virtualenv+supervisor部署发布web项目的相关文章

08 nginx+uWSGI+django+virtualenv+supervisor发布web服务器

一.为什么要用nginx,uwsgi? 1 1 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx, 2 3 2nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件, 4 5 如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi 根据请求调用应用程序

Django项目部署(nginx+uWSGI+django+virtualenv+supervisor发布web服务器 )

一.简介 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架有bottle,DJango,Flask,用于解析动态HTTP请求 支持WSGI的服务器 wsgiref python自带的web服务器 Gunicorn 用于linux的 python wsgi Http服务器,常用于各种django,flask结合部署服务器. mode_wsgi 实现了Ap

nginx+uWSGI+django+virtualenv+supervisor发布web服务器

wsgi 全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则.运行在wsgi上的web框架有bottle,flask,django uwsgi 和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型 uWSGI 是一个web服务器,实现了WSGI协议,uwsgi协议.a nginx web服务器,更加安全,更好的处理处理静态资源,缓存

Nginx+uWSGI+Django部署web服务器

目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py 编辑luffy/luffy/urls.py 运行并测试 uWSGI部署 测试运行uWSGI 使用uWSGI运行django项目 uWSGi热加载Djangoa项目 部署nginx nginx配置uwsgi和django django部署static文件 重新加载nginx进行测试 测试nginx

debian完整部署 Nginx + uWSGI + Django

debian完整部署 Nginx + uWSGI + Django 手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供的服务器包用apt-get这种方式安装的.这种方式比较简单,但没有新版本. 另外就是使用源代码自己编译安装,这种比较繁琐,但能选择适合的版本安装. 这里介绍的是第二种,使用源代码编译的版本进行安装部署. 部署测试环境: - wind

nginx+uwsgi+django部署流程

当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uwsgi+django是我们常用的django部署方式.nginx作为最前端的服务器,他负责接收所有的客户端请求,对于请求的静态文件,由nginx服务器自己完成,因为它具有很好处理静态文件的能力,性能进行过优化,支持高并发量:uWSGI服务器作为支持服务器,是用来服务nginx的,nginx将请求的动态

【转】五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)

五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上) By Django中国社区 at 2013-05-12 15:05 Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理(这是NGINX的强项).然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,

使用Nginx+uWSGI+Django方法部署Django程序(上)

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理 (这是NGINX的强项).然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求. 可见,uwsgi的作用就类似一个桥接器.起到桥梁的作用. NOTE:不使用nginx,只使用uwsgi+django也是可以

Nginx+uWSGI+Django+Python+ MySQL 搭建可靠的Python Web服务器

一.安装所需工具 yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf libtool make setuptool 二.编译安装python2.7.5 1. 下载python2.7.5,保存到 /data/qtongmon/software http://www.python.org/ftp/python/ 2. 解压文件 tar xvf Python-2.7.5.tar.bz2