Django學習13-部署(nginx)
完整的配置:
the web client <-> the web server <-> the socket <-> uwsgi <-> Django
uWSGI
WSGI(Web Server Gateway Interface)web伺服器-閘道器介面,是一個Web伺服器(如nginx)與web應用(如Django、Flask框架寫的程式)通訊的一種規範(通訊協議
)。
uwsgi是一種線路協議
而不是通訊協議,在此常用於在uWSGI伺服器與其他網路伺服器的資料通訊。uwsgi協議是一個uWSGI伺服器自有的協議,它用於定義傳輸資訊的型別。
uWSGI是一個Web伺服器
,它實現了WSGI協議、uwsgi、http等協議,負責響應python 的web請求。
從客戶端請求到web程式響應的過程:
使用uWSGI部署
安裝uWSGI:
[email protected] :~$ pip3 install uwsgi --upgrade
安裝後可以使用uWSGI啟動專案:uwsgi --http :8001 --chdir /path/to/project --home=/path/to/env --module project.wsgi
。
http :8001
: 使用http協議,埠8001module mysite.wsgi
: load the specified wsgi modulehome=/path/to/env
:指定virtualenv 路徑
[email protected]:~$ uwsgi --http :8001 --chdir /home/ulysses/PycharmProjects/django_ulysses --home=/home/ulysses/PycharmProjects/django_ulysses/venv --module django_ulysses.wsgi
這樣專案就運行了:
在瀏覽器輸入網址127.0.0.1:8001
可以看到網頁已經形成了。
使用配置檔案
啟動uWSGI用的這條命令太長了,使用.ini
配置檔案,直接將其放在專案目錄下,輸入內容
djangi_ulysses.ini
# plugin = python
[uwsgi]
# 指定專案執行的埠號
# the socket (use the full path to be safe
# socket = /path/to/your/project/mysite.sock
http = 127.0.0.1:8080
# Django專案根目錄 (絕對路徑)
chdir = /home/ulysses/PycharmProjects/django_ulysses
# Django wsgi.py檔案的位置
wsgi-file = django_ulysses/wsgi.py
# 最大執行的程序數
processes = 4
# 允許主執行緒存在(true)
master = True
# 當伺服器退出的時候自動清理環境,刪除unix socket檔案和pid檔案
vacuum = True
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
# the virtualenv (full path)
home = /home/ulysses/PycharmProjects/django_ulysses/venv
啟動時直接:uwsgi --ini ***.ini
關閉命令可以用結束程序的方法:sudo killall -9 uwsgi
開啟後檢視網頁:
網頁能成功開啟,但圖片沒有載入。
Nignx
Nginx(engine-x) 是一個高效能的 Web 和反向代理伺服器。 作為web伺服器相比 Apache,Nginx 使用更少的資源,支援更多的併發連線,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支援高達 50,000 個併發連線數的響應。它還可以作為負載均衡伺服器和郵件代理伺服器使用。
nginx安裝和配置
安裝nginx:
[email protected]:~$ sudo apt install python-dev nginx
開啟/etc/nginx/sites-available/default檔案,刪除所有內容後輸入後輸入:
server {
# 訪問時用的埠
listen 80;
# 伺服器名 ,用本機地址
server_name localhost;
charset utf-8;
# 日誌檔案和錯誤日誌
access_log /var/log/nginx/myweb_access.log;
error_log /var/log/nginx/myweb_error.log;
client_max_body_size 75M;
# Django media檔案路徑
location /media {
alias /home/ulysses/PycharmProjects/django_ulysses/media;
}
# 靜態檔案路徑
location /static {
# 靜態和媒體資料夾中的所有內容將在30天內由瀏覽器快取
expires 30d;
# 啟用目錄流量, 預設為off,顯示的檔案時間為GMT時間。改為on後,顯示的檔案時間為檔案的伺服器時間
alias /home/ulysses/PycharmProjects/django_ulysses/collected_static;
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass unix:///home//ulysses/PycharmProjects/django_ulysses/django_ulysses.sock;
include /etc/nginx/uwsgi_params;
}
}
修改之前的uwsgi配置檔案,使用socket,並設定檔案的許可權和所有者(在Apache2部署時設定過檔案許可權和所有者)。
socket = /home/ulysses/PycharmProjects/django_ulysses/django_ulysses.sock
# http = 127.0.0.1:8080
# ...
# ... with appropriate permissions - may be needed
chmod-socket = 666
chown-socket = ulysses:www-data
因為使用的是nginx的default.conf,直接重啟nginx服務即可:
sudo service nginx reload
或是sudo service nginx restart
,使新定義的conf檔案:sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
啟用網站。
執行uWSGI,重啟nginx後,重新開啟80埠(nginx監聽的埠)
現在靜態檔案也已經可以載入,也能上傳檔案。