开发环境
- ubuntu18.04
- python3
- uwsgi+nginx
使用uwsgi和nginx的意义
在此之前我所有的django项目都是python manage.py runserver启动的,我以为那就是我所有的django知识了,但是实际上python manage.py runserver只是用来调试启动django的。
选择uwsgi启动django的原因是可以配置进程数来并发,这肯定是比单独python manage.py要性能好的多,其次还可以配置输出日志等其他选项。
nginx存在的意义是帮助django把static静态文件单独拿出来做处理服务,不用django自己的,这样做的目的是为了django更好的走自己路由功能,把static文件交给nginx可以分工合作,让django服务性能更好 。
已经存在的项目结构
收集静态文件
(1)seetings.py下配置STATIC_ROOT 路径:
STATIC_ROOT = os.path.join(BASE_DIR,"static/")
(2)还得STATICFILES_DIRS注释掉,因为这两个是不能同时存在的
# STATICFILES_DIRS = [
# os.path.join(BASE_DIR, 'static')
# ]
(3)运行python manage.py collectstatic命令址行收集静态文件过程
整个项目的static包括admin后台管理的静态文件都会收集到这个STATIC_ROOT 目录下
uwsgi启动项目
(1)安装uwsgi
pip install uwsgi
(2)测试uwsgi方式启动django
以http方式在8000端口启动mysite.wsgi模块,其中mysite是我项目的名字,mysite.wsgi就是那个wsgi.py文件,
需要注意的是要指明wsgi文件的路径,我这里是在项目文件下所以用的mysite.wgsi就可以了
uwsgi --http :8000 --module mysite.wsgi
启动后访问127.0.0.1:8000端口,访问你的项目,能访问说明测试uwsgi启动django成功
(3)以uwsgi.ini配置文件的方式启动django
因为有许多参数可以配置,如果以命令的形式写出来,会很长,所以采用配置文件的方式启动
在项目目录下新建一个uwsgi.ini的文件,并输入下面配置:
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path) 项目目录
chdir = /home/panda/all_envs/Mysite/mysite/
# Django's wsgi file django项目wsgi文件路径
module = mysite.wsgi
# process-related settings
# master 开启主进程
master = true
# maximum number of worker processes 4个子进程
processes = 4
# the socket (use the full path to be safe 8000端口启动项目
socket = 127.0.0.1:8000
# with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
# 虚拟环境
virtualenv = /home/panda/all_envs/Mysite
# 日志文件目录|如果配置了该选项就启动的时候看不到日志了,还以为出错了。。。
#logto = /tmp/mylog.log
# 缓存大小,因为之前说我缓存设置国小导致有写请求直接呗抛弃了,我随便设置了一个
buffer-size = 81920
配置完成以读取配置文件的方式启动
uwsgi -i uwsgi.ini & # 后台启动看不到输出日志
pkill -f uwsgi # 会先杀死uwsgi然后再重启,在更新代码后可采用的操作
此时访问127.0.0.1:8000应该试不能访问的,必须配置nginx才行。这也是我的疑问,就为啥直接用
uwsgi --http :8000 --module mysite.wsgi这种方式启动就可以访问,把配置文件写好用uwsgi uwsgi.ini的方式启动必须配置nginx才行。所以下面我们需要配置nginx
nginx文件配置
(1)安装nginx
sudo apt-get install nginx
(2)编写nginx配置文件
/etc/nginx/conf.d下新建一个mysite.conf的文件,输入下面内容:
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
listen 8081; # 监听端口
server_name 192.168.1.106 ; # 绑定域名或者ip,比如你主机的ip
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /home/panda/all_envs/Mysite/mysite/media; # 指向django的media目录
}
location /static {
alias /home/panda/all_envs/Mysite/mysite/static; # 指向django的static目录
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}
}
“”“
大概意思是当访问192.168.1.106:8081端口的时候转发放到上游路由中(127.0.0.0:8000),当访问/static路径文件是,
指向静态文件的地址/home/panda/all_envs/Mysite/mysite/static,当访问/media路径文件时,
指向媒体文件地址/home/panda/all_envs/Mysite/mysite/media
”“”
(3)记得重启nginx
sudo /etc/init.d/nginx restart # 不重启上面的mysite.conf文件不会生效
此时你的uwsgi已经启动,nginx配置成功并重启,现在访问192.168.1.106:8081就可以看到你的django项目了