前言
主要通过uwsgi来启动django框架
关于uwsgi的详细讲解也可查看:官方文档说明
1. uwsgi的安装
先安装这个uwsgi,主要通过命令如下:
pip install uwsgi
或者可通过源码进行安装:
- 下载安装包,
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz - 解压缩,
tar zxvf uwsgi-latest.tar.gz cd uwsgi-latest- 编译执行,
make
书写一个测试包:(命名为foobar.py)
具体代码如下:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
本身上面的代码就是一个应用程序,可通过uwsgi加载器加载。
将其启动在一个http服务器上:uwsgi --http 127.0.0.1:9000 --wsgi-file foorbar.py,以9000的端口进行暴露
之后在本地计算机中以:http://127.0.0.1:9000打开网址即可
关uwsgi的参数比较多,可通过uwsgi --help进行查看
加以多个进程或者多个线程执行,可通过如下参数:
- processes 进程数
- threads 线程数
2. nginx配置
uwsgi支持多种与Web服务器集成在一起,处理自已的HTTP请求
生产环境中,一般会配合nginx或apache使用
关于nginx的相关知识点可看我之前的文章:
Nginx从入门到精通(全)
Nginx配置静态网页访问(图文界面)
server {
# 监听端口
listen 端口号;
# 域名或者ip
server_name xxxx.com;
charset utf-8;
client_max_body_size 5M;
root /usr/share/nginx/www;
set $BASE_DIR "/home/xx/yy/manong";
error_log /home/xx/logs/nginx_error.log;
access_log /home/xx/logs/nginx_access.log;
proxy_intercept_errors on;
# 动态请求nginx给uwsgi
location / {
# 转发端口必须和uwsgi配置文件中socket端口一致
uwsgi_pass manong;
# 转发请求的参数
uwsgi_param Host $host;
uwsgi_param Via "nginx";
uwsgi_send_timeout 600;
uwsgi_connect_timeout 600;
uwsgi_read_timeout 600;
include uwsgi_params;
}
# 静态资源所在位置,nginx自己处理
location ^~ /static/ {
alias /home/xx/static/;
# 过期时间设置
expires 1d;
}
}
nginx安装完毕后,会有自带一个uwsgi_params文件
这些参数文件主要是:转发请求时要携带的内容(比如查询字符串、请求方法、内容类型等)
修改了配置文件,需要重启nginx服务
3. uwsgi.ini配置
由于上面已经和nginx搭配在一起,所以使用的是socket链接方式
除了socket的连接方式之外还有一种是http方式
[uwsgi]
#项目目录
chdir=/home/xx
home=/home/xx/.virtualenvs/manong/
# 引入的环境变量名
env=DJANGO_SETTINGS_MODULE=manong.settings
#项目中wsgi.py文件的目录,也就是项目目录
wsgi-file=%(chdir)/manong/wsgi.py
# 存放进程编号的文件
pidfile=%(chdir)/logs/uwsgi.pid
#使用 Nginx 连接时使用,Django程序所在服务器地址
socket=%(chdir)/logs/manong.sock
#直接做 Web 服务器使用,Django程序所在服务器地址(以上两者二选一)
# http=ip:端口号
# 启动用户名和用户组
uid=xx
gid=xx
# uwsgi服务器的角色,启用主线程
master=true
# 进程数
processes=16
listen=1024
# 权限设置
chmod-socket=666
logfile-chmod=644
# 自动移除unix Socket 和 Pid 文件 当服务停止的时候
vacuum=true
auto-procname=true
procname-prefix-spaced=manong
disable-logging=true
touch-reload=/home/xx/cgi_reload_file/manong
# 日志文件的输出
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/usr/bin/python
# 缓冲区的大小
buffer-size=32678
以上代码模块是通过socket和nginx进行结合
如果通过http进行结合,nginx就使用不到
[uwsgi]
# 项目目录
chdir=/home/xx/manong
home=/home/xx/.virtualenvs/manong
module=manong.wsgi
virtualenv=/home/xx/.virtualenvs/manong
user=@(exec://whoami)
wsgi-file=manong/wsgi.py
pidfile=%(chdir)/logs/uwsgi.pid
master=true
processes=5
listen=16
# 主要的区分点在于这
http=:19866
# 这部分跟上面差不多
chmod-socket=666
logfile-chmod=644
vacuum=true
auto-procname=true
procname-prefix-spaced=manong
disable-logging=true
touch-reload=%(chdir)/manong/wsgi.py
buffer-size=32768
- uwsgi 启动项目:
uwsgi --ini uwsgi.ini - 查看进程:
ps aux | grep uwsgi或者使用ps -ef | grep uwsgi
如果想停止运行通过:uwsgi --stop uwsgi的进程号即可
版权声明:本文为weixin_47872288原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。