环境说明:CentOS7.4,Python2.7.10, Django1.11.15
1.部署准备(不详细说)
正常安全python环境及虚拟环境,能让django服务启动起来。
$PATH: source evn/bin/activate
(evn)$PATH:runserver 0.0.0.0:6666
浏览器访问:http:127.0.0.1:666/admin
能看见django后台即可。
2.Uwsgi安装
2.1 pip安装uwgi:
(evn)$PATH: pip install uwsgi
2.2 查看uwsgi是否成功:(evn)$PATH: uwsgi
看到以下内容说明安装成功:
*** Starting uWSGI 2.0.18 (64bit) on [Thu Apr 11 16:37:08 2019] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-36) on 11 April 2019 08:33:59
os: Linux-3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017
nodename: iz2zedj37fviebwl6w5vprz
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 8
current working directory: /jsz/builder_apis
*** running under screen session 3936.django ***
detected binary path: /jsz/jsz_build/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 63469
your memory page size is 4096 bytes
detected max file descriptor number: 65535
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
The -s/--socket option is missing and stdin is not a socket.
2.3.用uwsgi启动django服务:
2.3.1进入django项目根目录,比如项目为 ~/pro_test:(evn)$PATH: cd ~/pro_test
。
2.3.2用uwsgi启动项目:(evn)$PATH pro_test: uwsgi --http 127.0.0.1:80 --file pro_test/wsgi.py
。
2.3.3测试服务,浏览器访问:http://127.0.0.1/admin
成功则可用contrl+c
停止服务,这里uwsgi已经安装完成了。
这里根据自己的条件确定测试端口及方式。
3.Nginx安装(不详细说)
3.1 具体的细节可用参考 连接
3.2 推荐源码安装,自己清楚文件结构及位置,方便配置及管理,可用重新编译一些动态库,问题更少。
3.3 Nginx启动:$PATH pro_test: nginx
3.4 浏览器访问:http://127.0.0.1
能看见Nginx的欢迎页即成功。
4.配置Nginx、Uwsgi,启动服务
4.1 这里要说明以下,我们用Nginx+Uwsgi+Django的原因,我们需要利用Nginx处理静态资源、用Uwsgi处理动态资源从而提高服务器并发处理能力。
4.2 首先,我们来配置Uwsgi。服务的启动中,我们不能每次用命令行+参数的形式启动服务,这样非常繁琐,好的是uwsgi支持配置文件启动。我们找到一个方便管理的目录,如~/api_server
目录,进入目录:(env)$PATH: cd ~/api_server
,创建 pro_test.ini文件(env)$PATH api_server: vi pro_test.ini
,插入如下内容:
[uwsgi]
# 项目目录
chdir=~/pro_test/
# 指定项目的application
module=pro_test.wsgi:application
# 指定虚拟环境的目录
home=~/evn
# 将项目配置文件倒入项目
env = DJANGO_SETTINGS_MODULE=pro_test.settings
# 指定sock的文件路径(nginx交付动态请求的地址)
# 这里有三种方式,socket、http、http_socket,推荐使用socket,效率更高
socket=:8888
# 指定IP端口(这里不用http方式,耗费资源)
# http=127.0.0.1:8888
# 进程个数,根据cpu的数量创建,可用是cpu的倍数
workers=4
# 进程ID文件位置
pidfile=/var/uwsgi.pid
# 指定项目静态文件(目前用不上,静态请求将交给nginx处理)
# static-map=/static=~/pro_test/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/uwsgi.log
4.3 测试uwsgi配置文件及启动:刚刚的操作我们还是在python 的 env虚拟环境中,先退出虚拟环境
(evn)$PATH api_server: deactivate
退出后为:$PATH api_server:
,然后:$PATH api_server: uwsgi --ini pro_test.ini
,控制台输出:
[uWSGI] getting INI configuration from pro_test.ini
则uwsgi配置完成了。下面来配置nginx.
4.4 找到nginx.conf文件:如果不知道位置,查找以下位置$PATH api_server: find / -name nginx.conf
; 修改配置文件如下$PATH api_server: vi nginx.conf
; :
location / {
root html;
index index.html index.htm;
}
#变成如下
location / {
include uwsgi_params;
# 该地址为uwsgi启动位置 socket位置
uwsgi_pass 127.0.0.1:8888;
# 设置超时时间
uwsgi_read_timeout 30;
}
4.5 重新启动nginx:
$PATH api_server: nginx -s reload
; 浏览器访问:http://127.0.0.1/admin
;如果能正常访问,就说明动态服务已经配置成功了,但是我们会发现网页中的样式都乱套了。这个时候用浏览器查看下,原因是无法获取静态文件问题;之前说过,我们要用nginx的静态处理能力,所以,重新编辑nginx.conf,添加如下内容:
location /media {
# your Django project's media files - amend as required
alias ~/pro_test/media;
}
location /static {
# your Django project's static files - amend as required
alias ~/pro_test/static;
}
4.6 重新启动nginx:
$PATH api_server: nginx -s reload
; 浏览器访问:http://127.0.0.1/admin
;
OK,一切正常,到这里 nginx+uwsgi+django 部署成功。
感谢你的阅读:
推荐一个项目mixrestview,提高Django Api开发速度。