centos部署Nginx+uwsgi+django

參考

1. 首先通過django直接運(yùn)行項(xiàng)目-調(diào)試模式

先在服務(wù)器上放上網(wǎng)站項(xiàng)目代碼,然后python manage.py runserver 0.0.0.0:80,打開瀏覽器看能否訪問。注意開啟防火墻,包括云服務(wù)器防火墻,linux防火墻。

2. 然后通過uwsgi運(yùn)行項(xiàng)目-不走nginx

關(guān)掉上面的manage.py, python下安裝uwsgi,通過uwsgi運(yùn)行項(xiàng)目

檢查項(xiàng)目中wsgi.py是否存在

參考django官方文檔,https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/uwsgi/ ,
用django start-project 命令創(chuàng)建的項(xiàng)目會(huì)在創(chuàng)建時(shí)自帶 wsgi.py

假設(shè)項(xiàng)目根目錄為/www/myadmin, 創(chuàng)建項(xiàng)目時(shí)在此目錄下執(zhí)行django-admin startproject server .,默認(rèn)會(huì)創(chuàng)建/www/myadmin/server/uwsgi.py。如果不存在則需手動(dòng)創(chuàng)建,方法參考上面的django官方文檔。

在項(xiàng)目文件夾根目錄下新建uwsgi.ini配置文件。

; run: uwsgi --ini uwsgi.ini
; reload: uwsgi --reload uwsgi.pid
; stop: uwsgi --stop uwsgi.pid

[uwsgi]
chdir=/www/your_websit
pidfile = /www/your_website/uwsgi.pid
daemonize = /www/your_website/running.log ;記錄日志的位置

module=server.wsgi:application
master=True
vacuum=True
max-requests=5000
py-autoreload = 1 ;修改py文件后自動(dòng)重啟uwsgi
processes=4 ;根據(jù)實(shí)際cpu數(shù)量酌情配置
disable-logging = true ;正常的request不記錄,只記錄異常

http-socket = :8090 ;網(wǎng)頁(yè)直接訪問,可用于測(cè)試沒有nginx時(shí)是否正常運(yùn)行。
socket = 127.0.0.1:30888 ;和nginx相連時(shí)的配置

  • 配置daemonize = *.log,會(huì)使任務(wù)在后臺(tái)運(yùn)行。
  • 配置logto = *.log, 會(huì)使任務(wù)在前臺(tái)運(yùn)行。
  • 網(wǎng)上說的后臺(tái)運(yùn)行方法uwsgi -d --ini uwsgi.ini,可能是老版本的,這個(gè)命令在2.2版本會(huì)創(chuàng)建一個(gè)名為--ini的文件作為日志文件,命令后面的uwsgi.ini會(huì)被被忽略。

通過uwsgi啟動(dòng)項(xiàng)目

cd到項(xiàng)目根目錄下,先測(cè)試沒有nginx時(shí)uwsgi是否正常運(yùn)行:

# 激活虛擬環(huán)境
conda activate your_env

# 啟動(dòng)wsgi,該命令相當(dāng)于上面的 python manage.py runserver 
uwsgi --ini uwsgi.ini

瀏覽器訪問服務(wù)器8090端口。因?yàn)榕渲梦募性O(shè)置了http-socket=8090,所以此時(shí)應(yīng)該能訪問網(wǎng)站,但是靜態(tài)文件打不開(注意防火墻開放端口)。

錯(cuò)誤排查

如果不能訪問,可查看uwsgi的日志排查錯(cuò)誤,/www/your_website/running.log。

3. 最后通過nginx + wsgi 運(yùn)行項(xiàng)目

安裝nginx

參考 http://www.itdecent.cn/p/8a6d923cda9f

# 添加nginx存儲(chǔ)庫(kù)
sudo yum install epel-release

# 使用yum安裝Nginx
sudo yum install nginx

# 也可以試試這個(gè):http://www.itdecent.cn/p/c22faafc7b8b 
yum install nginx --enablerepo=epel

# 設(shè)置nginx開機(jī)自啟動(dòng)
systemctl enable nginx

# 重啟nginx
systemctl restart nginx

配置nginx

ubuntu Nginx 默認(rèn)的配置文件在 /etc/nginx 目錄下,centos 發(fā)行版的配置文件是在 /etc/nginx/nginx.conf

  • server_name可以區(qū)分從不同hostname網(wǎng)址來(lái)的請(qǐng)求,比如兩個(gè)網(wǎng)址都解析到了該主機(jī),那么設(shè)置server_name可以將其區(qū)分。設(shè)置為_表示所有如果沒有其他適配的,就到這里。

  • client_max_body_size,前端上傳文件大小限制,nginx默認(rèn)是1m

  • 可以設(shè)置多個(gè)server,實(shí)現(xiàn)一臺(tái)主機(jī)上部署多個(gè)網(wǎng)站。通過listen不同的端口,設(shè)置不同的server_name來(lái)區(qū)別不同的請(qǐng)求。

...

http {
    ...
    server {
        listen 80;
        client_max_body_size 200m;  
        
        server_name  _;
        ...

        #配置uwsgi轉(zhuǎn)發(fā),需要和上面uwsgi.ini中的端口對(duì)應(yīng)
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:30888; 
        }

        # serve靜態(tài)文件
        location /static {
            autoindex on; 
            alias /www/myadmin/static/; 
        }
        ...
    }
    

    server {
        listen 80;
        listen 8090;
        client_max_body_size 200m; 
        server_name  www.aaa.com www.bbb.com;
        ...
    }
    
    

}

重啟nginx使配置生效:

systemctl restart nginx

uwsgi可能也需要重啟:

# 先激活python虛擬環(huán)境,再執(zhí)行下面語(yǔ)句
uwsgi --stop uwsgi.pid
uwsgi --ini uwsgi.ini

#或者使用reload
uwsgi --reload uwsgi.pid

測(cè)試和錯(cuò)誤排查

此時(shí)訪問服務(wù)器的80端口,應(yīng)該能正常訪問網(wǎng)站,包括靜態(tài)資源。

如果不行,可能需要關(guān)閉SELinux。 臨時(shí)關(guān)閉:輸入命令setenforce 0,永久關(guān)閉,vi /etc/selinux/config,將SELINUX=enforcing改為SELINUX=disabled

另外可查看nginx中配置中error_log的位置,檢查nginx的error_log。默認(rèn)路徑為/var/log/nginx/error.log

4. 設(shè)置開機(jī)自啟動(dòng)

創(chuàng)建sh腳本,腳本中激活anaconda,然后啟動(dòng)uwsgi服務(wù)。

# #!/bin/sh
# #this script will run in background

systemctl start nginx

source /root/anaconda3/bin/activate syadmin

uwsgi --ini /www/syadmin/uwsgi.ini

# nohup python /www/your_webst/manage.py start_circle_task >/dev/null 2>&1 &

有了上面的sh腳本后,可以將其加入/etc/rc.d/rc.local中實(shí)現(xiàn)開機(jī)自啟動(dòng)。

也可以用systemctl啟動(dòng)。參考下面的方法(這個(gè)沒有實(shí)踐):

創(chuàng)建systemctl服務(wù),指定Type=forking,systemd認(rèn)為當(dāng)該服務(wù)fork出子進(jìn)程并生成PIDFile,且父進(jìn)程退出后服務(wù)啟動(dòng)成功。同時(shí)指定 PIDFile=FilePath,以便 systemd 能夠跟蹤服務(wù)的主進(jìn)程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容