博客 / 詳情

返回

django+uwsgi+nginx部署

django+uwsgi+nginx部署

安裝nginx

sudo apt-get install nginx即可。

image-20220328134839807

安裝python解析器

python解析器可以選擇直接python官網下載,或者使用anaconda。

清華園anaconda下載

直接wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh下載到服務器後,使用bash Anaconda3-5.3.1-Linux-x86_64.sh無腦安裝即可,中間會有問你是否幫你配置環境變量選擇yes。直接跳過了也可以自己配置環境變量。最後在終端輸入python -V 顯示版本號即成功。

image-20220328134904374

然後使用pip install django安裝包,項目中其他包自行安裝

安裝uwsgi

使用的是阿里雲學生機,在安裝完python解析器後,使用命令安裝pip install uwsgi失敗,發生錯誤,錯誤如下

Command "/root/anaconda3/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-wnkwliqy/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-ivs7ibgw/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-wnkwliqy/uwsgi/

在網上查找攻略,發現大多數的解決方法都是使用安裝,apt-get install python3.6-dev,但是在unbuntu20.04下安裝發現無法找到該包。我嘗試安裝,但是失敗。

還有博客説是gcc版本過高,所以嘗試降低gcc版本,使用apt-get install gcc-4.8,發現直接無法找到安裝包。我們用增加下載源,然後更新下載源,就可以繼續使用apt下載gcc-4.8了

sudo vim /etc/apt/sources.list
deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
sudo apt update

使用命令安裝gcc-4.8g++-4.8

sudo apt-get install gcc-4.8
sudo apt-get install g++-4.8

安裝後使用ls /usr/bin/gcc*就可以看見你剛剛裝的gcc和系統自帶的gcc,因為系統中默認使用的是gcc-9.3,我們需要將gcc命令優先設置為gcc-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100

然後使用gcc --version查看當前gcc版本,是4.9就成功了。

image-20220326142920973

最後嘗試pip install uwsgi,成功安裝,所以問題關鍵在於gcc和g++的版本

安裝mysql

自行安裝

部署django項目

在將整個項目傳輸到服務器後,我們在項目根目錄下創建一個uwsgi.ini的配置文件,內容如下

[uwsgi]
#使用nginx連接時使用
socket=:8000
#直接做web服務器使用 python manage.py runserver ip:port
#http=0.0.0.0:8000
#項目目錄
chdir=/root/project/logistic_simulation
#項目中wsgi.py文件的目錄,相對於項目目錄
wsgi-file=logistic_simulation/wsgi.py
module=logistic_simulation.wsgi
#指定啓動的工作進程數
processes=2
#指定工作進程中的線程數
threads=2
#指定在這些進程裏有一個主進程
master=True
#保存啓動之後主進程的pid
pidfile=uwsgi.pid
#設置uwsgi後台運行,uwsgi.log保存日誌信息
daemonize=uwsgi.log
#設置日誌文件最大字節數
log-maxsize = 100000
#設置每個進程最大請求數
max-requests = 1000

然後使用啓動uwsgi服務,輸入命名uwsgi --ini uwsgi.ini,發現報錯

uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

解決方法是創建一個軟鏈接

find / -name "libpcre.so.*"來尋找路徑,然後創建軟鏈接到庫中ln -s /root/anaconda3/lib/libpcre.so.1 /lib。若還出現同樣的錯誤,就一樣創建軟鏈接,缺哪個創建哪個

使用 uwsgi --ini uwsgi.ini 輸出信息[uWSGI] getting INI configuration from uwsgi.ini即成功

配置nginx

修改nginx配置文件,向server里加入下面的複製內容,注意不要重複複製,使用命令vim /etc/nginx/sites-enabled/default加入下面內容,注意修改成你的靜態目錄

server {
    listen 80;
    
    # ----複製內容
    location /static {
        alias /root/project/logistic_simulation/static; #靜態文件目錄
    }
    location / {
        uwsgi_pass 127.0.0.1:8000; #將請求轉發重定向到127.0.0.1的8000端口
        include /etc/nginx/uwsgi_params; #將所有的參數轉到uwsgi下
    }
    # ----複製內容
    
}

重啓nginx服務service nginx restart

同時我們需要將自己項目文件夾下settings.py中內容修改,一個是關閉debug,還有往host里加入*,設置你的靜態問價目錄。

DEBUG = False

ALLOWED_HOSTS = ['*']

STATIC_ROOT = os.path.join(BASE_DIR, "static") 

這個時候我們訪問服務器的公網ip,就會發現進入到自己項目的首頁

如果出現樣式文件加載是403的狀態,那麼我們需要修改nginx配置文件,輸入命令vim /etc/nginx/nginx.conf

將第一行的內容改成

user root;
學會查看日誌文件

在部署過程中如果出現失敗,一定要學會找出錯誤,只有找出錯誤,搜索解決,才能針對這個問題採用解決方案,nginx有他的錯誤日誌cat /var/log/nginx/error.log,uwsgi日誌文件路徑在自己設置uwsgi.ini文件裏。學會看日誌真的很重要。

總結

部署django項目已經好多次了,一次次都在進步,依稀記得第一次部署的時候,搞不清楚nginx的配置文件,安裝不上uwsgi,服務器下包失敗,網速慢,配置結束出現各種各樣的錯誤,一度讓人崩潰,一定要沉下心來,找出錯誤,網上博客千千萬,各有各自的配置,需要自己有一定的甄別能力。

在這篇博客裏主要是自己逐個配置環境,現在docker大火,使用docker就能很輕鬆的配置項目環境。後面會使用docker進行部署。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.