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號