5.Django專案部署

Alpaca_發表於2018-05-16

文章僅供學習使用

djnago2 Gunicorn nginx 在ubuntu環境下部署 python3

準備 一個可以執行的django專案
一個可以訪問的公網IP (可以有域名,但是國內的需要註冊 或者繞開80埠用443埠 這個還沒有試過) xshell軟體 連線自己的伺服器主機 比那個網頁的舒服多了

進入伺服器

建立使用者

在 root 使用者下執行這條命令建立一個新使用者,hzj 是使用者名稱 因為我叫hzj,所以我取的使用者名稱是 hzj

選擇一個你喜歡的使用者名稱,不一定非得和我的相同

root@localhost:~# useradd -m -s /bin/bash hzj

把新建立的使用者加入超級許可權組

root@localhost:~# usermod -a -G sudo hzj

為新使用者設定密碼 注意在輸密碼的時候不會有字元顯示,不要以為鍵盤壞了,正常輸入即可

root@localhost:~# passwd hzj

切換到建立的新使用者

root@localhost:~# su - hzj

切換成功,@符號前面已經是新使用者名稱而不是 root 了

hzj@localhost:~$

如果有些命令無法實現,可能是許可權不足 可以加一個sudo

2.安裝python3和pip3 因為ubuntu預設python2 我們所使用的環境是python3

sudo apt-get install git python3 python3-pip

安裝 虛擬環境 virtualenv

sudo pip3 install virtualenv

3.專案配置 這裡的資料夾目錄 我儘量和django2.0官方文件的資料夾目錄一致

mysite/settings.py

STATIC_URL = '/static/' 加入下面的配置 STATIC_ROOT = os.path.join(BASE_DIR, 'static') #指明瞭靜態檔案的收集目錄,即專案根目錄(BASE_DIR)下的 static 資料夾。

mysite/settings.py

DEBUG = False#建議一開始還是預設為True 等你部署成功後,再去把他改成True 如果你的程式出錯,訪問的時候會出現500內部伺服器的問題,而在debug下你可以清除的看到這些問題的原因,

ALLOWED_HOSTS = ['*'] #允許訪問的域名列表 *表示所有都可訪問

mysite>pip freeze > plist.txt #這裡我們將該專案的環境全部列在plist.txt檔案下方便我們之後搭建環境 注意我的django2.0使用pip安裝的,如果你使用的像Anconda之類的第三方軟體,那麼無法在Ubuntu下自動安裝

$ vim settings.py ALLOWED_HOSTS = [''] # 可以配置為你的域名或者公網IP,寫是匹配全部都可以 ··· THEME = 'themes/default' STATIC_URL = '/static/' STATIC_ROOT = '../static_files/' ···

4.移動專案到ubuntu

我們使用git 通過github上傳和下載

cd mysite 
git init 
git add .
git commit -m "zhushi"
git remote add origin https://github.com/Alpaca-H/DjangoTest3.git
git push -u origin master


複製程式碼

5.ubuntu環境搭建

source env/bin/activate
pip install -r plist.txt

python manage.py collectstatic 收集靜態檔案

python manage.py migrate 建立資料庫檔案

pip install gunicorn 下載gunicorn

$ gunicorn mysite.wsgi:application  -w 4 -b 0.0.0.0:8000啟動專案
$ gunicorn mysite.wsgi:application  -b 0.0.0.0:8000

$ nohup gunicorn mysite.wsgi:application  -w 4 -b 0.0.0.0:8000 &  後臺一直跑
複製程式碼

6.nginx

$ sudo yum install nginx 

$ cd /etc/nginx
$ sudo cat nginx.conf
複製程式碼

這個時候我們就能看到在配置中有這樣的一句話,

include /etc/nginx/conf.d/*.conf; 這個意思是他啟動的時候會去讀取conf.d下的配置檔案,也就是我們可以在這個 /etc/nginx/con.d目錄下去寫配置檔案,操作如下

$ cd /etc/nginx/conf.d
$ sudo touch nginx.conf
$ sudo vim nginx.conf
複製程式碼

配置檔案的內容如下:

 /etc/nginx/conf.d/nginx.conf
server {
    listen  80;
    root    /home/hzj/workspace/typeidea-env/;   #配置虛擬環境的目錄
    access_log /home/hzj/workspace/typeidea/log/access_log;  #配置這個log資料夾
    error_log  /home/hzj/workspace/typeidea/log/error_log;   #配置這個log資料夾
    server_name www.hzj.top;    # 配置域名
    #處理靜態檔案 /favicon.ico:
    location /favicon.ico {
        alias /home/hzj/typeidea/static_files/favicon.ico;  # 如果沒,不用配置
    }
    #處理django的靜態檔案
    location /static/ {
        alias /home/hzj/typeidea/static_files/; # 收集靜態資源的路徑
    }
    #處理請求轉發8000介面 如果你的gunicorn是其他埠,請自己改
    location / {
        proxy_pass  http://127.0.0.1:8000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
複製程式碼

這樣我們的nginx配置檔案就能寫完了,但是如果你重啟的話,會發現一個問題,那就是許可權,你會發現你啟動的檔案,於你的配置檔案許可權不一樣,這會導致你無法啟動,或者是其他問題,我們返回之前的/etc/nginx的目錄之下,把下面的使用者名稱改為自己的使用者名稱字,就可以了:

/etc/nginx/nginx.conf
···
user hzj 
···
複製程式碼

當然寫完nginx的時候我們可以進入到自己寫的配置路徑下面,執行nginx -t看下所執行的狀態,或者第幾行發生到錯誤。然後我們就可以啟動nginx,在瀏覽器輸入自己的IP或者域名就成功

ps:1.如果發現啟動還是無法訪問,首先檢查一下防火牆,防火牆要開80埠,不會開可以看這編Linux上防火牆的設定

2.去自己的伺服器廠家的控制檯,檢視自己是否放通了安全組,一般要放通80,如果要除錯可以順便把8000埠也放通,當然取決於自己實際需求

3.檢查自己的nginx的靜態路徑,反響代理的埠和IP,以及檔案的許可權問題

相關文章