Nginx+Uwsgi+Django+Python虚拟环境部署

环境说明: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开发速度。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容