WSGI是什么?
wsgi是python语言定义的web服务器(nginx)和服务器端程序(Django/Flask/Tornado等)的通用接口规范。
Uwsgi是什么
是WSGI在linux中的一种实现,开发者无需再编写 WSGI server.
预热,使用WSGI
编写一个 WSGI server
#创建一个 webapp.py,假设这个就是你的服务器端程序。
def application(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return ["<h1>Hello,World!</h1>".encode('utf8')]
#所有的服务请求都执行这个函数,返回hello world!
#再创建一个 wsgi_server.py
# 导入wsgi
from wsgiref.simple_server import make_server
# 导入刚刚我们写的函数
from webapp import myapplication
#实例化server服务器,监听8080端口
server = make_server('',8080,myapplication)
#启动服务
server.serve_forever()
#启动程序
python wsgi_server.py
#浏览器访问服务器
127.0.0.1:8080
返回hello world 成功
Nginx+uWSGI+Django
下面正式开始我们Django项目的部署
首先我们要有一个可执行的django项目
django-admin startproject hello
修改一下setting的 ALLOWED_HOSTS = [‘*’]
以下我使用的url为 localhost:8080/hello为例
使用 python manage.py runserver 0.0.0.0:8080 检查一下django项目是否可运行
准备就绪后,开始配置uwsgi 。
Uwsgi
#我使用的是anaconda环境安装uwsgi
conda install -c conda-forge uwsgi
conda install -c conda-forge libiconv
#非anaconda安装uwsgi
pip install uwsgi
#再创建一个uwsgi_conf.ini文件,在django项目内
[uwsgi]
#直接做web服务器使用,http连接,先这样,一会配置nginx的时候http改为socket
http=127.0.0.1:8080
#项目目录,项目名为hello的路径
chdir=/home/sun/lx/uwsgi_http/hello
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=hello/wsgi.py
#进程数
processes=4
#线程数
threads=2
#
master=True
#进程号,用于stop程序的,名字可以自己定,响应的命令也会更改
pidfile=uwsgi_conf.pid
#日志文件 名字可以自己定
daemonize=uwsgi_conf.log
#启动
uwsgi --ini uwsgi_conf.ini
#停止
uwsgi --stop uwsgi.pid
试试 能否访问成功
成功后 uwsgi –stop uwsgi.pid停掉程序
我们来配置nginx+uwsgi
首先将上面的操作都停下来,将uwsgi_conf.ini 内的http改为socket连接
socket=127.0.0.1:8080
安装Nginx
下载nginx tar包
wget http://nginx.org/download/nginx-1.13.6.tar.gz
解压
tar -zxvf nginx-1.13.6.tar.gz
cd到解压的目录内
./configure
make
sudo make install
开启和停止nginx服务
cd /usr/local/nginx/
sudo sbin/nginx #开启
sudo sbin/nginx -s stop #停止
如果启动失败,杀死进程 再启动
ps -ef | grep nginx
sudo kill -9 进程号
http://127.0.0.1/ 出现Welcome to nginx! 说明安装成功
修改nginx配置文件
cd conf #进入 /usr/local/nginx/conf$
sudo vim nginx.conf #sudo权限打开
server {
listen 8000;#80改为8000 访问的时候使用http://ip:8000访问
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080; #会转发到uwsgi监听的端口,所以务必和uwsgi保持一致
}
配置完成后,重启nginx,再启动uwsgi
#/usr/local/nginx$ 目录下
sudo sbin/nginx -s reload
#启动uwsgi 就可以访问项目了
uwsgi --ini uwsgi_conf.ini