nginx uwsgi Django
配置uwsgi 文件和 nginx 文件(不包括负载均衡即单一服务器)
本文为centos8 python38 Django3.1.2
运行:
yum install nginx -y
pip3 install uwsgi
关于nginx配置:
你可以直接运行nginx 来查看nginx的配置文件在哪里。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
命令: nginx -t
在浏览器输入ip:80 来查看是否安装成功。然后运行
命令: nginx -s stop
来停止nginx
其他命令:
nginx -s reload # 重启并不关闭nginx(一般为修改配置文件后运行的命令)
在此配置中,nginx 的配置文件位于:
/etc/nginx
直接打开此文件夹下的nginx.conf文件
找到http 开头的包含文件,然后在其内部有则直接修改,否则直接添加
eg: http 中并不包含 upstream字段,需在自己手动create。
upstream DjangoName{
server 10.0.55.91:8088; # uWSGI's socket
#可以再添加其他的uWSGI的服务器
}
# 此名应该存在。找到在里面直接update or create
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 10.0.55.91;
charset utf-8;
location / {
uwsgi_pass DjangoName; #和上面的upstream转接
include /etc/nginx/uwsgi_params; # 该路径为你的 uwsgi_params 文件所在路径。什么?不知道此文件在哪里?find / -name uwsgi_params 自己看在哪里
}
location /static {
alias /opt/pydjango/IndexTools/static; # 此配置为你的收集静态文件路径,特别注意,此路径并非你Django的 settings 文件中 STATICFILES_DIRS 的路径,而是你项目的收集路径。收集路径为django 的 settings 文件中配置的 STATIC_ROOT 路径
# 你要是不配置 STATIC_ROOT 路径,那你访问页面后百分百没有静态文件。如果有,那就是你用了Django自身的,内置的服务器。
}
配置的时候千万别乱删,要不然你会遇到一个花括号错误,咋回事呢?这不是废话肯定是要么多,要么少,自己调去吧!!
你要是写了404啥的你就配置,没写就拉倒。咋配置呢,不知道,自己百度吧。我反正是不写的。404直接骂他傻逼就完事。(应该没有客户会看到我写的这个文件)
毕竟访问出404的只有一群爬虫人员才会遇到(极少部分是因为后端问题,就算是,也是500,要是前端自己出的问题,那就该开了这人再招一个进来),众所周知,前端+后端和爬虫人员都是你死我活,不死不休的较量,所以出现404,直接骂,留什么情面,真是的。
uwsgi:
随便找一个位置,创建文件:uwsgi.ini 后缀不得改,名字看你心情。
加入配置:
[uwsgi]
http = 10.0.55.91:8088 # 外网访问的ip
socket = 10.0.55.91:8089
chdir = /opt/pydjango/IndexTools # 你的manage.py 文件的路径
wsgi-file = IndexTools/wsgi.py # 与manang.py 同路径下的一个同名文件夹,是个相对路径,你不可以写绝对路径
processes = 4
threads = 2
stats = 10.0.55.91:8090
vacuum = true
pidfile = /opt/pydjango/IndexTools/uwsgi.pid # pid 存放路径
daemonize = /opt/pydjango/logs/uwsgi.log # 这个千万不可以忘,你要是忘了,你就kiss yourself ass 吧
static-map =/static=/opt/pydjango/IndexTools/static # 和STATIC_ROOT一个路径。不解释,别问,问就是不知道。
里面的所有路径。你都可以随便搞,文件不存在就会自己创建,也不用管。(文件夹自己创建好啊)但是作为一个优秀的程序员(优不优秀我不知道,主要我怕我自己忘),配置文件都会和本Django文件放在同一个路径下。
关闭uwsgi命令:
uwsgi --stop uwsgi.pid
异常咋办,没关系,你肯定调不了。
找到进程,直接杀。
ps -ef | grep uwsgi
kill -9 pid
他要是说你没这进程,那你就这么运行命令:
ps -ef | grep uwsgi |grep -v grep
然后再杀,要是啥都没有,那就拉倒,第一个查看命令能查出来也是骗你的,第一个命令本身也是一个进程,所以你就甭管了。
然后呢,万事俱备:
命令:
nginx
uwsgi --ini uwsgi.ini
然后就大功告成啦!
ip:端口 就可以访问了。
致辞,敬礼。
什么?没图片?jq 不起作用? css 没有? 往下看喽!
(熟练一下关闭命令也挺好,记得关一下。)
你还要运行几个命令:
首先呢,我一再强调的收集路径,你需要collectstatic一下,
命令: python manage.py collectstatic
他可能会说:小老弟你咋回事,STATIC_ROOT 与 STATICFILES_DIRS 你只能爱我俩一个(其实你只能爱root)。那你就需要忍痛割爱的删掉 STATICFILES_DIRS 不然你就无法收集(它是测试的爱,上线可不行。就像林黛玉,谈谈对象还可以,真的不适合结婚)。(你可以运行完之后再把它加回去,然后删掉root,证明你对dirs的忠心)
他会默认收集到 STATIC_ROOT 这里你配置的路径。
还有,估计你个小白都不知道这路径咋配置。这样cv过去就好了。
STATIC_ROOT = Path.joinpath(BASE_DIR, "static")
你必须是Django3.1以上版本,不然Path包你用不了,你要是,不是3.0,就把Path.joinpath改成os.path.join
然后呢,万事俱备:
命令:
nginx
uwsgi --ini uwsgi.ini
哦,对了,配置的时候可别把注释放进去啊,哈哈哈哈!就在这里提醒你了。不然你会遇到特别诡异的文件名。
然后就大功告成啦!
ip:端口 就可以访问了。
致辞,再敬礼。
作者原创,转载请标。
浙公网安备 33010602011771号