Ubuntu16.04使用nginx+uwsgi 部署Django項目
1.修改settings配置
DEBUG = False
ALLOWED_HOSTS = ['*']
2.收集項目靜态檔案
當Django運作在生産環境時,将不再提供靜态檔案的支援,需要将靜态檔案交給靜态檔案伺服器。
我們需要收集項目中靜态檔案,并放到靜态檔案伺服器中。
我們使用Nginx伺服器作為靜态檔案伺服器。
- 收集項目靜态檔案
- 配置收集靜态檔案存放的目錄
# STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static') STATIC_ROOT='/home/zhao/python_django/static' # 收集到指定的檔案夾,随便一個檔案夾都行
- 執行收集靜态檔案指令
python manage.py collectstatic
- 配置收集靜态檔案存放的目錄
-
安裝Nginx:
上nginx官網:http://nginx.org/
點選右邊的download
最下邊的 :Linux packages for stable and mainline versions.
看到:Ubuntu,按照流程進行下載下傳安裝就行
安裝好了就使用一下指令啟動nginx
# nginx檔案路徑: 使用 nginx -t (檢查檔案) # 首次啟動 如果不行就帶參檔案路徑 $ sudo nginx # 重新開機 $ sudo nginx -s reload # 停止 $ sudo nginx -s stop
- 部署Nginx伺服器提供靜态資料(使用sudo nginx -t 檢視位置)
- 方法一:進入nginx的目錄 找到nginx.conf 打開并且編輯:
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; # include /etc/nginx/conf.d/*.conf; # include servers/*; # 加入這個server 一個server就是一個項目 server { listen 80; server_name www.diamon.cn; # 虛拟域名 location /static { alias /home/zhao/python_django/static; # 靜态檔案路徑 } location / { uwsgi_pass 0.0.0.0:9999; # 與稍後的uwsgi配置一緻 include uwsgi_params; } } }
-
方法二:在nginx.conf檔案最後一行加上: include servers/*; 意思是會加載在servers檔案裡的所有配置檔案.
進入servers目錄建立配置檔案
diaminds.conf
- 配置如下 一個server就是一個項目
server { listen 80; server_name www.diamon.cn; # 虛拟域名 location /static { alias /home/zhao/python_django/static; # 靜态檔案路徑 } location / { uwsgi_pass 0.0.0.0:9999; # 與稍後的uwsgi配置一緻 include uwsgi_params; } }
- 修改
檔案, 新增如下配置 window的hosts在: windows/system32/drivers/etc/hosts/etc/hosts
127.0.0.1 www.diamon.cn
- 啟動Nginx伺服器
# 檢查配置檔案 如果說找不打檔案就指定nginx的目錄 $ sudo nginx -t # 首次啟動 $ sudo /nginx # 重新開機 $ sudo nginx -s reload # 停止 $ sudo /nginx -s stop
- 方法一:進入nginx的目錄 找到nginx.conf 打開并且編輯:
uWSGI伺服器配置
- 進入虛拟環境安裝uwsgi包
pip3 install uwsgi
- 準備uwsgi伺服器配置檔案, 在項目根目錄建立 uwsgi.ini
# uwsgi.ini [uwsgi] # 使用Nginx連接配接時使用,Django程式所在伺服器位址 socket=0.0.0.0:9999 # 直接做web伺服器使用,Django程式所在伺服器位址 # http=127.0.0.1:9999 # 項目目錄 chdir=/home/zhao/桌面/diamonds # 項目中wsgi.py檔案的目錄,相對于項目目錄 wsgi-file=diamonds/wsgi.py # 程序數 processes=4 # 線程數 threads=2 # uwsgi伺服器的角色 master=True # 存放程序編号的檔案 pidfile=uwsgi.pid # 日志檔案 daemonize=uwsgi.log # 虛拟環境路徑 virtualenv=/home/zhao/.virtualenvs/diamonds
- 啟動
uwsgi伺服器
# 啟動 $ uwsgi --ini uwsgi.ini 産看是否啟動: ps -ef | grep uwsgi # 會看到指定程序的服務個數 # 關閉 $ uwsgi --stop uwsgi.pid
部署Nginx伺服器反向代理(在上邊以有,在這個隻是為了說明)
- 修改Nginx伺服器配置檔案
server {
listen 80;
server_name www.diamon.cn;
......
location / {
uwsgi_pass 0.0.0.0:9999;
include uwsgi_params;
}
}
- 啟動Nginx伺服器
所有配置都設定好了就重新開機檢查nginx配置與啟動nginx,啟動uwsgi# 檢查配置檔案 $ sudo /usr/local/nginx/sbin/nginx -t # 重新開機 sudo /usr/local/nginx/sbin/nginx -s reload
sudo nginx -t
sudo nginx -s reload
# 進入項目跟目錄啟動uwsgi
uwsgi --ini uwsgi.ini
ps -ef | grep uwsgi # 檢視是否啟動了指定的程序數的uwsgi服務
如圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1kMrpmT5lEROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1AjM3AzNwMTM4AzMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)