Django項目部署
搭建生產環境思路
- 安裝環境
- 測試環境
- 測試uwsgi代理項目
- 測試Nginx代理靜態文件
- uwsgi與nginx連接
- 項目部署成功
環境介紹
- Ubuntu 16.04
- Nginx 1.10.3
- uwsgi 2.0.12
- Python 3.5.2
安裝nginx
- 官方指定安裝方式:
- 先獲取公鑰 wget https://nginx.org/keys/nginx_signing.key
-
再添加公鑰 sudo apt-key add nginx_signing.key
-
在源文件中添加 sudo vi /etc/apt/sources.list
- deb http://nginx.org/packages/ubuntu/ xenial nginx
- deb-src http://nginx.org/packages/ubuntu/ xenial nginx
-
注意:xenial是Ubuntu的發佈版本
-
安裝nginx
- apt-get update
-
apt-get install nginx
-
啓動nginx:sudo nginx
- 在瀏覽器中輸入:127.0.0.1 進入nginx歡迎頁,安裝成功
- 停止nginx服務:sudo nginx -s stop | quit
安裝uwsgi
- 樓主使用系統uwsgi,避免在每個虛擬python環境中安裝uwsgi
- 安裝命令:apt install uwsgi
- 說明:如果使用在python環境中安裝uwsgi,可能會在uwsgi與nginx連接時出現無法連接的情況。
使用uwsgi代理項目
- 編寫配置文件 myproject.ini
-
使用http代理
[uwsgi]
# 直接作爲web服務器使用
http=0.0.0.0:8010
# 配置工程目錄
chdir=/var/www/DjangoProject/p_name
# 配置項目的wsgi目錄。相對於工程目錄
wsgi-file=p_name/wsgi.py
#配置進程,線程信息
processes=2
threads=2
# 多線程開關
enable-threads=True
# 主進程,主線程模式
master=True
# 啓動端口號
pidfile=uwsgi.pid
# 日誌
daemonize=uwsgi.log
-
啓動uwsgi:uwsgi --ini myproject.ini
- 瀏覽器測試項目運行正常
使用nginx代理靜態文件
- 複製出nginx的默認配置文件,cp /etc/nginx/nginx.conf
- 修改location,server_name,root,添加靜態資源的路徑
-
myproject.conf
user nginx; # 用戶,用戶組
worker_processes 1; # 工作組數量
error_log /var/log/nginx/error.log warn; # 日誌文件
pid /var/run/nginx.pid; # nginx啓動後生成的文件
events {
worker_connections 1024; # 工作鏈接數量
}
http {
include /etc/nginx/mime.types; # mime什麼鬼
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; # 默認啓動的配置文件
# 需要添加的項目配置
server {
listen 80; # 監聽端口
server_name 127.0.0.1; # 域名,localhost,ip
charset utf-8;
root /var/www/; # 靜態文件根目錄
#index hello.html;
location /static { # 靜態文件部署
alias /var/www/static/; # 指向地址
}
}
}
-
使用配置文件啓動nginx:nginx -c conf_path(配置文件的絕對路徑)
- 瀏覽器訪問:127.0.0.1/static,查看項目的靜態資源,檢測是否成功
uwsgi與nginx連接
- 使用scoket
- 在nginx配置文件中添加uwsgi_params的文件路徑
# 需要添加的項目配置
server {
listen 80; # 監聽端口
server_name 120.120.120.120; # 域名,本機ip
charset utf-8;
root /var/www; # 靜態文件根目錄
location / {
include /etc/nginx/uwsgi_params; # 指向橋接文件
uwsgi_pass 127.0.0.1:8010; # 與uwsgi配置文件的scoket端口一致
}
location /static { # 靜態文件部署
alias /var/www/static/; # 指向靜態文件地址
}
}
- 說明:此文件是作爲uwsgi和nginx的橋接作用,端口號設爲一致。
- 項目模式改爲生產模式,即DEBUG=False
測試項目部署成功
- 瀏覽器測試