Django 部署上线uwsgi+nginx+django

先安装 Python3
tar xf Python-3.7.1.tgz

需要先yum 安装需要的软件

yum -y install gcc-c++
yum -y install zlib zlib-devel
yum -y install bzip2 bzip2-devel
yum -y install ncurses ncurses-devel
yum -y install readline readline-devel
yum -y install openssl openssl-devel
yum -y install openssl-static
yum -y install xz lzma xz-devel
yum -y install sqlite sqlite-devel
yum -y install gdbm gdbm-devel
yum -y install tk tk-devel
yum -y install libffi libffi-devel

然后

./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC

make && make install #安装

补充一下:这里加上--enable-shared和-fPIC之后可以将python3的动态链接库编译出来,默认情况编译完lib下面只有python3.xm.a这样的文件,

python本身可以正常使用,但是如果编译第三方库需要python接口的比如caffe等,则会报错;所以这里建议按照上面的方式配置,另外如果

openssl不使用系统yum安装的,而是使用自己编译的比较新的版本可以使用--with-openssl=/usr/local/openssl这种方式指定,后面目录为

openssl实际安装的目录,另外编译完还要将openssl的lib目录加入ld运行时目录中即可.

需要吧动态库转移至系统文件里 CP 即可
cp libpython3.7m.so.1.0 /usr/lib64/

安装完成之后要简单做一下配置:
即将python库路径添加到/etc/ld.so.conf配置中,然后执行ldconfig生效;
或者添加到$LD_LIBRARY_PATH中,这样在接下来运行python3是就不会报找不到库文件的错误了.

系统中原来的python在/usr/bin/python,通过ls -l可以看到,python是一个软链接,链接到本目录下的python2.7

这里不要把这个删除,不对原来默认的环境做任何修改,只新建一个python3的软链接即可,只是需要执行python3代码时python要改成python3,
或者python脚本头部解释器要改为#!/usr/bin/python3

这里建立有关的软链接如下:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

这样就建立好了,以后直接执行python3命令就可以调用python3了,执行pip3可以安装需要的python3模块;
另外如果仔细看python安装目录下的bin目录,实际上python3也是个软链接,链接到python3.5.1,这样多次链接也是为了多个版本的管理更加方便

一、概念释义
WSGI

WSGI 是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议)。官方定义是,the Python Web Server Gateway

Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

在生产环境中使用WSGI作为python web的服务器。Python Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛接受

。WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行。

uWSGI

uWSGI 实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。把 HTTP 协议转化成语言支持的网络协议。uWSGI代

码完全用C编写,效率高、性能稳定。

uwsgi
(注意:此处为小写,是另一个东西,和 uWSGI 不一样)
uwsgi是一种线路协议,不是通信协议,常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义

传输信息的类型。

小结:
WSGI -->网关、接口
uWSGI-->一种服务
uwsgi -->线路协议

二、启动停止重启

uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

启动:
uwsgi --ini xxx.ini

重启:
uwsgi --reload xxx.pid

停止:
uwsgi --stop xxx.pid

vim setting.py

ALLOWED_HOSTS = ['*']

vim uwsgi.ini

# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/data/www/
# 指定项目的application
module=lyh_project.wsgi:application
# 指定sock的文件路径       
socket=/tmp/django_uwsgi.sock
# 进程个数       
workers=10
pidfile=/tmp/uwsgi.pid
# 指定IP端口       
http=0.0.0.0:8080
# 指定静态文件
static-map=/static=/data/www/hc/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/var/log/django_uwsgi.log

vim nginx.conf

    server {
        listen 80;
        server_name 192.168.1.11;
        index index.php index.html;
        location / {
            include    uwsgi_params;
            uwsgi_pass  unix:/tmp/django_uwsgi.sock;
            uwsgi_param UWSGI_CHDIR  /data/www/lyh_project;
            uwsgi_param UWSGI_SCRIPT django_wsgi;
            access_log /var/log/nginx/access.log;
            }
        location /static {
          alias /data/www/hc/static;
        }
      }

nginx 的反向代理
nginx.conf

    upstream hc {
               server 192.168.1.11:8001;
            }
    server {
        listen 8080;
        server_name localhost;
        index index.php index.html;
        location / {   
            include    uwsgi_params;
            uwsgi_pass  unix:/tmp/django_uwsgi.sock;
            uwsgi_param UWSGI_CHDIR  /data/www/lyh_project;
            uwsgi_param UWSGI_SCRIPT django_wsgi;
            access_log /var/log/nginx/access.log;
            }
        location /static {
          alias /data/www/hc/static;
        }
      }
     server {
            listen 80;
            server_name localhsot;
            index index.php index.html;
            location / {
                    proxy_pass http://hc;
                    access_log /var/log/nginx/access_nginx.log;
                      }
         }

你可能感兴趣的:(Django 部署上线uwsgi+nginx+django)