django+uWSGI+nginx應(yīng)用部署于ubuntu16.04服務(wù)器

Django應(yīng)用的部署不同于node或者javaweb應(yīng)用,對(duì)初學(xué)者來(lái)說(shuō)部署具有一定的難度,本文就ubuntu16.04來(lái)講講具體部署細(xì)節(jié),若有問(wèn)題歡迎大家提issue討論。

官方文檔上建議初學(xué)者使用apache部署django應(yīng)用,本人并不建議,apache部署太麻煩,還要配置虛擬主機(jī)什么的,但nginx就相對(duì)來(lái)說(shuō)簡(jiǎn)單多了。也便于理解。

一.安裝Django

sudo apt install python3-pip         #安裝pip
pip -v                                       # 查看pip的版本
pip install django                    #默認(rèn)安裝最新的django版本 

當(dāng)然安裝前需要更新一下系統(tǒng)的文件

sudo apt update

二.安裝uWSGI

sudo apt install build-essential python3-dev  #安裝依賴項(xiàng)
pip install uwsgi

然后呢你也可以直接查看官方文檔對(duì)uwsgi這個(gè)東西深入了解,也可以直接略過(guò),只學(xué)習(xí)怎么使用就可以。

三.安裝nginx

這里推薦官方的通過(guò)命令安裝而不是編譯安裝 官方安裝指南
1.下載nginx_signing.key文件

wget https://nginx.org/keys/nginx_signing.key

2. apt-key的添加:

sudo apt-key add key nginx_signing.key

3.將nginx添加至ubuntu的配置源列表里面

sudo vim /etc/apt/sources.list

添加以下兩行進(jìn)入sources.list文件中

deb http://nginx.org/packages/ubuntu/ xenial nginx     #xenial是系統(tǒng)的Codename '使用命令 sudo lsb_release -a 查看'
deb-src http://nginx.org/packages/ubuntu/ xenial nginx

4.更新系統(tǒng)并安裝最新的nginx版本

sudo apt update
sudo apt install nginx

5. 查看是否安裝成功

nginx -v      #寫文章時(shí)版本號(hào)為1.12.0

四.部署django應(yīng)用

1.配置nginx配置文件配置轉(zhuǎn)發(fā)請(qǐng)求(配置文件默認(rèn)路徑 /etc/nginx/nginx.conf)

配置前建議先了解一下nginx默認(rèn)的全局配置文件nginx.conf內(nèi)容,當(dāng)然最主要的是看看include命令。nginx整合其他部分的配置文件都是通過(guò)include命令來(lái)導(dǎo)入的。在本人的nginx.conf文件里有這么一句

include /etc/nginx/conf.d/*.conf 

意思是nginx啟動(dòng)的時(shí)候還要導(dǎo)入/etc/nginx/conf.d目錄下的所有以.conf結(jié)尾的配置文件,所以我們的配置
文件就建立在這個(gè)目錄下了

vim /etc/nginx/conf.d/nginx_uwsgi.conf

文件內(nèi)容:

upstream django {
    server unix://django_project_absolute_url/project_name.sock;   #這個(gè).sock文件不存在也沒(méi)關(guān)系,啟動(dòng)的時(shí)候會(huì)自動(dòng)創(chuàng)建
    #例如我的項(xiàng)目的絕對(duì)路徑為/home/floder/crawler 這行就是 server unix:///home/floder/crawler/crawler.sock
}
# 配置轉(zhuǎn)發(fā)服務(wù)器
server {
  # 應(yīng)用監(jiān)聽(tīng)端口
  listen      80;
  # 允許訪問(wèn)的域名 沒(méi)有域名的話就寫服務(wù)器的公網(wǎng)ip地址
  server_name .crawler.site;  #這是我的一個(gè)django項(xiàng)目,項(xiàng)目訪問(wèn)地址為 http://crawler.site ,歡迎訪問(wèn)使用
  charset     utf-8;
  #訪問(wèn)日志
  access_log    /var/log/nginx/project_name_access.log;
  #錯(cuò)誤日志
  error_log   /var/log/nginx/project_name_error.log;
  # 最大上傳文件大小
  client_max_body_size 75M;  
  # 配置靜態(tài)文件的請(qǐng)求
  location /static {
      alias  /static_files_absolute_url; #項(xiàng)目靜態(tài)文件地址,使用python3 manage.py collectstatic 將靜態(tài)文件收集到settings.py文件配置的STATIC_ROOT目錄下
  }

  # 配置django應(yīng)用的轉(zhuǎn)發(fā)請(qǐng)求
  location / {
      uwsgi_pass  django;
      include     /etc/nginx/uwsgi_params; # 這個(gè)uwsgi_params文件的地方,默認(rèn)在/etc/nginx目錄下隨nginx一起被安裝
  }

  location /favicon.ico{
      alias /favicon.ico_absolute_url;   #網(wǎng)站圖標(biāo)地址  
  }
  #這里還可以配置許多獨(dú)立的請(qǐng)求地址,只要找到對(duì)應(yīng)的靜態(tài)資源地址即可
   #location /xxx.html{
   # alias /xxx.html_absolute_url;
   #}
}

接下來(lái)重啟nginx服務(wù)

sudo /etc/init.d/nginx restart         #nginx服務(wù)默認(rèn)安裝完就自動(dòng)啟動(dòng)了

如果重啟遇到錯(cuò)誤的話可以按照提示查看錯(cuò)誤原因,大部分原因都是由于配置文件寫錯(cuò)了(比如語(yǔ)句末尾沒(méi)有分號(hào)...)
2.配置uwsgi啟動(dòng)文件(.ini格式的文件 以我的項(xiàng)目為例)
 這個(gè)文件我一般是將它放在django項(xiàng)目的根目錄下面,這里假設(shè)文件名為crawler_uwsgi.ini 內(nèi)容如下:

# 項(xiàng)目的uwsgi配置文件
[uwsgi]
# Django-related settings
# 項(xiàng)目的絕對(duì)路徑(以我的為例)
chdir           = /home/floder/crawler
# django的wsgi文件,默認(rèn)是在項(xiàng)目的根目錄的主文件夾下面
 module          = crawler.wsgi
# python包的絕對(duì)目錄,這是python3.5版本的包管理路徑
pythonpath = /usr/local/lib/python3.5/dist-packages
# 后臺(tái)運(yùn)行時(shí)打印日志的地方
daemonize = /home/floder/log/crawler_uwsgi.log
# 是否開(kāi)啟主線程
master          = true
# 最大工作進(jìn)程
processes       = 10
# .sock文件的地址(因?yàn)閐jango的應(yīng)用請(qǐng)求配置的是sock請(qǐng)求)
socket          = /home/floder/crawler/crawler.sock      #項(xiàng)目的根目錄下(和)
# 給予.sock文件的執(zhí)行權(quán)限
chmod-socket    = 666
# 退出時(shí)是否清除工作環(huán)境
vacuum          = true

3.后臺(tái)啟動(dòng)項(xiàng)目

uwsgi --ini crawler_uwsgi.ini

若項(xiàng)目啟動(dòng)之后訪問(wèn)出錯(cuò),查看uwsgi的log文件查看出錯(cuò)的原因

五.服務(wù)器的選擇

學(xué)生的話項(xiàng)目不需要翻墻可以去使用騰訊的云服務(wù)器,特別便宜。非學(xué)生黨或者項(xiàng)目需要翻強(qiáng)的話推薦digitalocean服務(wù)器,這里給的鏈接點(diǎn)擊進(jìn)入可以自動(dòng)獲得$10供你熟悉使用。digitalocean 服務(wù)器的優(yōu)點(diǎn)如下(具體費(fèi)用和你選擇的配置有關(guān) $5起步):

(1)可以同時(shí)新建多個(gè)云主機(jī)(droplets),按流量收費(fèi)。
(2)和github一樣,只要在創(chuàng)建主機(jī)的時(shí)候?qū)⒈緳C(jī)的ssh公鑰添加進(jìn)新創(chuàng)建的主機(jī)里面,就可以直接通過(guò)ssh連接而不用輸入密碼了(創(chuàng)建ssh密鑰的石斛要求輸入密碼驗(yàn)證的除外)。
(3) digtialocean有各種已經(jīng)配置好的各種編程語(yǔ)言環(huán)境的web項(xiàng)目主機(jī)比如django,lamp,nodeJS等等,就不需要你繼續(xù)一個(gè)個(gè)的像上面介紹的一樣安裝運(yùn)行環(huán)境了(缺點(diǎn)就是比較老,不推薦)。
(4)可選節(jié)點(diǎn)多達(dá)8?jìng)€(gè),總有一個(gè)滿足你的要求.

通過(guò)ssh登錄主機(jī)的第一件事是更新軟件源

sudo apt update

默認(rèn)是root用戶登錄的,為了安全起見(jiàn),我們首先新建一個(gè)用戶

adduser floder        #floder是用戶名

設(shè)定密碼、回答完相關(guān)問(wèn)題之后,名為 jerry 的帳號(hào)就建好了。把它加到 sudo 權(quán)限組:

usermod -a -G sudo floder

這時(shí)候可以通過(guò) su floder 切換到新帳號(hào)下工作

補(bǔ)充: ubuntu通過(guò)scp命令上傳文件或者文件夾到服務(wù)器 scp命令的使用

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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