Django uwsgi+nginx+django 部署上线
先安装 Python3tar 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;
}
}