nginx部署django

1.什么是wsgi

PythonWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受, 它已基本达成它的可移植性方面的目标。
WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。
WSGI标准在 PEP 333 [1] 中定义并被许多框架实现,其中包括现广泛使用的django框架。

nginx部署django

2.什么是uWSGI

WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。

WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

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

很多框架都自带了 WSGI server ,比如 Flask,webpy,Django、CherryPy等等。当然性能都不好,自带的 web server 更多的是测试用途,发布时则使用生产环境的 WSGI server或者是联合 nginx 做 uwsgi 。

桥梁作用

nginx部署django

使用uwsgi启动django项目

步骤一、安装 python3 的环境

yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel \
sqlite-devel gcc gcc-c++  openssl-devel zlib zlib-devel python3 python3-devel -y

步骤二、安装 Django 框架、uwsgi

pip3 install -i https://mirrors.aliyun.com/pypi/simple/ --upgrade pip
pip3 install -i https://mirrors.aliyun.com/pypi/simple/ django==2.1.8
pip3 install -i https://mirrors.aliyun.com/pypi/simple/ uwsgi

步骤三、配置Django工程、

[root@oldboy-pythonedu demosite]# cd /opt/
[root@oldboy-pythonedu opt]# django-admin.py startproject demosite
[root@oldboy-pythonedu opt]# cd demosite/
[root@oldboy-pythonedu demosite]# python3 manage.py runserver 0.0.0.0:9999        # 启动测试

步骤四、配置uWSGI、配置Nginx

[root@oldboy-pythonedu opt]# cat /opt/demosite/uwsgi.ini 
[uwsgi]
#uwsgi监听的端口
socket = 127.0.0.1:9999
#uwsgi启动进程数
workers = 2
#最大接收的请求数
max-requests = 1000
#buffer缓冲区大小
buffer-size = 30000
#进程pid存放路径
pidfile = /run/uwsgi.pid
#uwsgi日志存储路径
daemonize = /var/log/uwsgi.log

[root@oldboy-pythonedu demosite]# uwsgi --ini /opt/demosite/uwsgi.ini
[root@oldboy-pythonedu demosite]# netstat -lntp | grep 9999
tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      9827/uwsgi          

配置Nginx,将用户发送的http请求, 通过uwsgi_pass 传递给 Uwsgi 服务端

[root@oldboy-pythonedu opt]# cat /etc/nginx/conf.d/uwsgi.oldboyedu.com.conf 
server {
    listen 80;
    server_name uwsgi.oldboyedu.com;
    client_max_body_size 100M;
    index index.html;           #默认返回页面

    location / {
        uwsgi_pass 127.0.0.1:9999;
        uwsgi_param UWSGI_CHDIR /opt/demosite;  #工程所在的路径
        uwsgi_param UWSGI_SCRIPT demosite.wsgi; #demosite/wsgi接口文件
        include uwsgi_params;
    }
}

nginx + uwsgi + django + pythonav


wget http://cdn.xuliangwei.com/pythonav.zip
unzip pythonav.zip
pip3 install -i https://pypi.doubanio.com/simple/ -r /code/pythonav/requirements.txt

登录202服务器创建一个pythonav的库:

create database pythonav;
vim pythonav/pythonav/settings.py

配置MySql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'pythonav',
        'USER': 'all',
        'PASSWORD': 'Oldxu.com123',
        'HOST': '10.0.0.202',
        'PORT': '3306',
    }
}

初始化数据库

cd /code/pythonav
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py createsuperuser
python3 manage.py collectstatic

配置uwsgi

vim pythonav_uwsgi.ini

配置文件写入

[uwsgi]
#uwsgi监听的端口
socket = 127.0.0.1:8811
chdir = /code/pythonav/
wsgi-file = pythonav/wsgi.py
#uwsgi启动进程数
processes = 4
threads = 10
#最大接收的请求数
max-requests = 1000
#buffer缓冲区大小
buffer-size = 30000
#进程pid存放路径
pidfile = /run/uwsgi-pythonav.pid
#uwsgi日志存储路径
daemonize = /var/log/uwsgi-pythonav.log

配置nginx

[root@oldboy-pythonedu pythonav]# cat /etc/nginx/conf.d/pythonav.oldboyedu.com.conf 
server {
    listen 80;
    server_name pythonav.oldboyedu.com;
    client_max_body_size 100M;

    location /static {
        alias /code/pythonav/static;
    }

    location / {
        uwsgi_pass 127.0.0.1:8811;
        include uwsgi_params;
    }
}

部署Blog项目

1.安装模块
2.配置数据库连接
3.初始化数据库
4.配置uwsgi
5.配置nginx

tar xf blog.tar.gz -C /code/

ls /code/

cd /code/blog_sever/

pip3 install -i https://pypi.doubanio.com/simple/ -r packages.txt

vim blog_progect/settings/develop.py #创建数据库要指定utf8

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blog',
        'USER': 'all',
        'PASSWORD': 'Oldxu.com123',
        'HOST': '10.0.0.202',
        'PORT': '3306',
        'OPTIONS': {
            "init_command": "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}

vim /usr/local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py +146
# 修改为 encode

python3 manage.py migrate
python3 manage.py createsuperuser
python3 manage.py collectstatic

配置uwsgi

cat /code/blog_sever/blog_uwsgi.ini

[uwsgi]
#uwsgi监听的端口
socket = 127.0.0.1:8989
chdir = /code/blog_sever
wsgi-file = blog_progect/wsgi.py
#uwsgi启动进程数
processes = 4
threads = 10
#最大接收的请求数
max-requests = 1000
#buffer缓冲区大小
buffer-size = 30000
#进程pid存放路径
pidfile = /run/uwsgi-blog.pid
#uwsgi日志存储路径
daemonize = /var/log/uwsgi-blog.log

重启uwsgi

uwsgi –ini /code/blog_sever/blog_uwsgi.ini

netstat -lntp #查看是否启动成功

配置NGINX
cat /etc/nginx/conf.d/pyblog.oldboyedu.com.conf

server {
    listen 80;
    server_name pyblog.oldboyedu.com;
    client_max_body_size 100M;


    location /static {
        alias /code/blog_sever/static;
    }


    location / {
        uwsgi_pass 127.0.0.1:8989;
        include uwsgi_params;
    }
}

nginx -t

systemctl reload nginx

上一篇:Centos7配置部署Python3+Django+Apache


下一篇:java自动装箱的一个例子