django_uWSGI+nginx环境

1 uWSGI

作用

Django 默认使用的是 Python 自带的 simple HTTPServer 提供web服务的,在安全性和效率上都是不行的,只能用作django开发测试。

WSGI是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议),。

uWSGI负责把HTTP协议转化为WSGI协议,可以使python直接使用

 

安装

[root@webmaster nginx]# pip3 install uwsgi
Successfully installed uwsgi-2.0.17.1

[root@webmaster nginx]# uwsgi --version
2.0.17.1

  

配置

在settings同目录

uwsgi.ini

[uwsgi]
# 配置服务器的监听ip和端口
socket = 127.0.0.1:9090
# 配置项目目录(此处设置为项目的根目录)
chdir = /data/sqlsite
# 配置入口模块 (django的入口函数的模块,即setting同级目录下的wsgi.py)
wsgi-file = sqlsite/wsgi.py
# 开启master, 将会多开一个管理进程, 管理其他服务进程
master = True
# 服务器开启的进程数量
processes = 2
# 以守护进程方式提供服, 输出信息将会打印到log中
daemonize = wsgi.log
# 服务器进程开启的线程数量
threads = 2
# 退出的时候清空环境变量
vacuum = true
#启动用户,在装uwsgi时已经自动创建
uid = uwsgi
# 进程pid
pidfile = uwsgi.pid

  

命令

启动

uwsgi --ini uwsgi.ini 

  

重载

uwsgi --reload uwsgi/uwsgi.pid
#django使用自带http服务时,会自动重载配置
#使用uwsgi时,没有运行python进程,由uwsgi托管,需要重载uwsgi才行

  实测不行,改为:

[root@webmaster sqlsite]# cat run.sh 
#!/bin/sh
killall -9 uwsgi;sleep 1;uwsgi --ini sqlsite/uwsgi.ini

  

2 nginx

        location /static {
            alias /data/sqlsite/static;  #指定django的静态文件
            }
            
        location / {
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:9090;
        }

  

3 admin static文件

这样的情况下,访问admin,会找不到static文件,因为admin的static文件不在static/下面。所以需要把admin的static迁移过来。

在static的配置上增加一个STATIC_ROOT配置,意思是所有static的根目录。这样,static聚合时,系统就会把admin的static文件复制过来。

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

  

python3 manage.py collectstatic
#执行聚合命令后,在static目录下会出现admin目录

  

 4 问题

在venv中运行的django,和在venv中安装的uwsgi,在外面环境下运行uwsgi出现了5000错误,需要在在venv环境

posted @ 2018-10-18 15:17  jabbok  阅读(272)  评论(0编辑  收藏  举报