FastRunner(后端)生产模式uWSGI+Nginx+Supervisor+Python虚拟环境部署

1.安装uWSGI

pip install uWSGI

2.uWSGI配置uwsgi.ini

[uwsgi]

# 设置变量
project = FasterRunner
base = /home/faster

# 通过引用变量的方式设置Django项目根路径
chdir = %(base)/%(project)
# Django项目的wsgi配置
module = %(project).wsgi:application

master = true
processes = 4

# socket 通信文件
socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true

3.配置Django的settings文件wsgi.py

Django设置多配置文件(生产和开发)

import os

from django.core.wsgi import get_wsgi_application

# 指定Django使用生产配置FasterRunner.settings.pro
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'FasterRunner.settings.pro')

application = get_wsgi_application()

3.1测试uWSGI

# 进入Django项目的根路径
cd /home/faster/FasterRunner
# 运行uwsgi 
uwsgi --ini ./uwsgi.ini

4.Nginx配置uwsgi.conf,最好通过include的方式导入配置

server {
   # 监听8000端口
    listen       8000;
   # 服务器ip
    server_name  10.0.3.57;

    location / {
        include         uwsgi_params;
        # 需要和uwsgi.ini 中的 socket 通信文件一样
        uwsgi_pass     unix:/home/faster/FasterRunner/FasterRunner.sock;
    }
}

4.1Nginx测试

# 启动nginx
systemctl start nginx

# 测试Nginx配置文件
nginx -t

# 重新加载,使Nginx配置文件生效  
nginx -s reload

# 查看当前端口监听,确认8000端口被Nginx监听
(fasterenv) [root@faster_3_57 FasterRunner]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name     
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      27106/nginx: master 

5.Supervisor管理uWSGI

supervisor守护进程虚拟环境部署Django

创建uWSGI启动的配置文件uwsgi.conf
command 中需要指定uwsgi的绝对路径.此处是虚拟环境中的uwsgi路径
Supervisor配置的注释是;
[program:uwsgi]
command= /home/faster/.virtualenvs/fasterenv/bin/uwsgi --ini ./uwsgi.ini
directory=/home/faster/FasterRunner
stopasgroup=true
stopsignal=QUIT
user=faster
autostart=true
autorestart=true
stderr_logfile=/home/faster/err.log
stdout_logfile=/home/faster/out.log

5.1通过Supervisor启动uWSGI

# 启动Supervisor
supervisord -c  /etc/supervisord.conf

# 重启整个 supervisor的服务
 supervisorctl reload

# 指定启动uwsgi,此处是program后跟随的名字
supervisorctl start uwsgi

# 停止uwsgi
supervisorctl stop uwsgi

6.uWSGI日志抛出异常Permission denied

tailf  /var/log/nginx/error.log

2019/06/15 15:41:01 [crit] 29077#0: *65 connect() to unix:/home/faster/FasterRunner/FasterRunner.sock failed (13: Permission denied) while connecting to upstream, 
client: 192.168.24.131, server: 10.0.3.57, request: "OPTIONS /api/user/login/ HTTP/1.1",
upstream: "uwsgi://unix:/home/faster/FasterRunner/FasterRunner.sock:", host: "10.0.3.57:8000", referrer: "http://10.0.3.57:8080/fastrunner/login"

6.1修改Nginx启动用户

# 找到Nginx当前主配置
[root@faster_3_57 FasterRunner]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# 编辑Nginx主配置
vim /etc/nginx/nginx.conf
#user nginx;
user faster;
# 测试Nginx配置文件
nginx -t

# 重新加载,使Nginx配置文件生效  
nginx -s reload

6.2异常原因分析

  • 修改Nginx启动用户前,默认Nginx用户启动,因为权限问题,无法访问uWSGI的sock文件
(fasterenv) [root@faster_3_57 faster]# ps -ef|grep nginx
root     27106     1  0 15:01 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx    29077 27106  0 15:40 ?        00:00:00 nginx: worker process
root     29132 23308  0 15:41 pts/1    00:00:00 grep --color=auto nginx
  • 查看uWSGI 启动用户,是faster
(fasterenv) [root@faster_3_57 faster]# ps -ef|grep uwsgi
faster   27354 28184  0 15:06 ?        00:00:00 /home/faster/.virtualenvs/fasterenv/bin/uwsgi --ini ./uwsgi.ini
faster   27358 27354  0 15:06 ?        00:00:00 /home/faster/.virtualenvs/fasterenv/bin/uwsgi --ini ./uwsgi.ini
faster   27359 27354  0 15:06 ?        00:00:00 /home/faster/.virtualenvs/fasterenv/bin/uwsgi --ini ./uwsgi.ini
faster   27360 27354  0 15:06 ?        00:00:00 /home/faster/.virtualenvs/fasterenv/bin/uwsgi --ini ./uwsgi.ini
faster   27361 27354  0 15:06 ?        00:00:00 /home/faster/.virtualenvs/fasterenv/bin/uwsgi --ini ./uwsgi.ini
root     29325 23308  0 15:45 pts/1    00:00:00 grep --color=auto uwsgi
  • 修改Nginx启动用户为faster(和启动uWSGI的用户一样),就阔以正常访问啦~~~
[root@faster_3_57 FasterRunner]# ps -ef|grep nginx
root     27106     1  0 15:01 ?        00:00:00 nginx: master process /usr/sbin/nginx
faster   29451 27106  0 15:47 ?        00:00:00 nginx: worker process
root     32093 22403  0 16:37 pts/0    00:00:00 grep --color=auto nginx
[root@faster_3_57 FasterRunner]# tailf  /var/log/nginx/access.log
"http://10.0.3.57:8080/fastrunner/api_record/5" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-"
192.168.24.131 - - [15/Jun/2019:16:40:09 +0800] "GET /api/fastrunner/tree/5/?token=4ee722ce4d8d5fdb9c5894879efb9760&type=1 HTTP/1.1" 200 966 "http://10.0.3.57:8080/fastrunner/api_record/5" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-"
192.168.24.131 - - [15/Jun/2019:16:40:15 +0800] "GET /api/fastrunner/api/?token=4ee722ce4d8d5fdb9c5894879efb9760&node=66&project=5&search= HTTP/1.1" 200 13316 "http://10.0.3.57:8080/fastrunner/api_record/5" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-"
192.168.24.131 - - [15/Jun/2019:16:40:18 +0800] "OPTIONS /api/user/login/ HTTP/1.1" 200 0 "http://10.0.3.57:8080/fastrunner/login" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-"
192.168.24.131 - - [15/Jun/2019:16:40:18 +0800] "POST /api/user/login/ HTTP/1.1" 200 112 "http://10.0.3.57:8080/fastrunner/login" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-"
192.168.24.131 - - [15/Jun/2019:16:40:18 +0800] "GET /api/fastrunner/project/?token=c4cd03206ac7e0deb42d1c2618624b75 HTTP/1.1" 200 593 "http://10.0.3.57:8080/fastrunner/project_list" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-"

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