- django的服務器配置可以說是十分繁瑣的部分
- 哪怕嚴格按照步驟也會有不明錯誤
- 再此詳細記錄操作步驟
- 版本Ubuntu 16.04 LTS 64位
- 服務器:騰訊云學生機
- 由于配置繁瑣,所以操作步驟于全新系統(tǒng)進行配置
準備django文件
- 由于已經(jīng)有過django項目防症,所以直接將django上傳至服務器
- 目錄樹如下:
ubuntu@VM-246-186-ubuntu:~/site$ tree Blog
Blog
├── Blog
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── wsgi.cpython-36.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
├── myblog
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-36.pyc
│ │ └── __init__.cpython-36.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-36.pyc
│ │ ├── __init__.cpython-36.pyc
│ │ ├── models.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── views.cpython-36.pyc
│ ├── static
│ │ └── myblog
│ │ ├── css
│ │ │ ├── semantic.css
│ │ │ └── themes
│ │ │ └── default
│ │ │ └── assets
│ │ │ ├── fonts
│ │ │ │ ├── brand-icons.eot
│ │ │ │ ├── brand-icons.svg
│ │ │ │ ├── brand-icons.ttf
│ │ │ │ ├── brand-icons.woff
│ │ │ │ ├── brand-icons.woff2
│ │ │ │ ├── icons.eot
│ │ │ │ ├── icons.otf
│ │ │ │ ├── icons.svg
│ │ │ │ ├── icons.ttf
│ │ │ │ ├── icons.woff
│ │ │ │ ├── icons.woff2
│ │ │ │ ├── outline-icons.eot
│ │ │ │ ├── outline-icons.svg
│ │ │ │ ├── outline-icons.ttf
│ │ │ │ ├── outline-icons.woff
│ │ │ │ └── outline-icons.woff2
│ │ │ └── images
│ │ │ └── flags.png
│ │ └── js
│ │ ├── jquery-3.3.1.js
│ │ ├── jquery-3.3.1.min.js
│ │ ├── semantic.js
│ │ └── vue.js
│ ├── tests.py
│ ├── urls.py
│ └── views.py
└── templates
└── myblog
├── detail.html
└── index.html
- 目錄樹不必在意房匆,主要操作的文件為manage.py
配置環(huán)境
安裝依賴
- Ubuntu系統(tǒng)默認為python2赢底,但是這里測試的django版本為2.0以上榆浓,需要python3版本來安裝
- 為了防止打亂系統(tǒng)環(huán)境影涉,還需要virtualenv進行管理python環(huán)境
sudo apt-get install python3-pip
sudo pip install virtualenv
- 準備就緒之后進行創(chuàng)建新環(huán)境
virtualenv env27 --python=python3.5
#其中env27為環(huán)境名稱莱褒,自己替換
- 進入新環(huán)境
source test/bin/activate
- 由于我的django項目中包含了django-suit以及markdown提佣,所以在運行django前需要提前準備完這兩個包
(test) ubuntu@VM-246-186-ubuntu:~/site$ pip install django django-suit markdown
進行django測試
- 在云服務器上部署確保安全組端口已經(jīng)開放
- 確保是在虛擬環(huán)境當中肚吏,注意命令行前的test
配置setting文件
- 首先要讓服務器知道靜態(tài)文件的位置以及允許訪問的ip
- 進入Blog目錄中方妖,編輯setting.py文件
#找到ALLOWED_HOSTS = []
#將其配置為
ALLOWED_HOSTS = ['*']
#配置靜態(tài)文件目錄,在文件尾部直接添加
STATIC_ROOT = os.path.join(BASE_DIR , "static/")
#找到DEBUG = True罚攀,改為False党觅,亦可最后再來改動方便定位錯誤
DEBUG = False
- 配置完畢之后雌澄,回到根目錄執(zhí)行收集靜態(tài)文件操作
python manage.py collectstatic
- 可以看到在目錄當中生成了一個static的文件夾,該文件夾包含了網(wǎng)站的全部靜態(tài)文件
登錄網(wǎng)站測試
- 在項目根目錄處運行服務器測試命令杯瞻,確保8001端口未被占用镐牺,如果被占用需手動指定端口號
python manage.py runserver 0.0.0.0 8001
- 如果一切順利的話,應該可以通過IP進行直接訪問網(wǎng)站
- 在瀏覽器輸入IP地址+端口號進行服務器測試
- 可以觀察到網(wǎng)站可以進入魁莉,并且CSS樣式加載正常
安裝uwsgi
- 由于前面環(huán)境已經(jīng)配置妥當任柜,安裝uwsgi只需要一句命令,請確保在虛擬環(huán)境當中
pip install uwsgi
- 在網(wǎng)站根目錄下執(zhí)行
uwsgi --http :8001 --plugin python --module Blog.wsgi
# 其中Blog.wsgi需要自行替換成自己的網(wǎng)站名字(使用startproject創(chuàng)建的網(wǎng)站名)沛厨,比如自己的網(wǎng)站為Test宙地,則修改為Test.wsgi
- 通過訪問IP地址加端口號進行測試,例如118.25.3.239:8001(例子虛擬逆皮,自行替換IP)
- 如果訪問正常我們應該看到的是不帶CSS樣式的界面
配置uwsgi文件
- 為了讓服務器可以運行宅粥,我們需要手動在根目錄創(chuàng)建一個uwsgi.ini的文件
- 內(nèi)容如下:
[uwsgi]
#chidr用于指定自己的網(wǎng)站根目錄(自行更改)
chdir = /home/ubuntu/Blog
#module指定網(wǎng)站中APP的文件(自行更改)
module = Blog.wsgi
#home用于指定python的虛擬環(huán)境,即我們最初創(chuàng)建的虛擬環(huán)境位置(自行更改)
home = /home/ubuntu/env27
#master不用更改
master = true
#socket用于指定端口號电谣,可以不更改
socket = :8001
#以下兩個可以不用更改
chmod-socket = 666
vacuum = true
- 配置完內(nèi)容之后可以在shell中運行秽梅,并訪問網(wǎng)站觀察十分成功運行
sudo uwsgi --ini uwsgi.ini
配置nginx
- 安裝過程很簡單,一句命令
sudo apt-get install nginx
- nginx安裝完默認是啟動的剿牺,可以通過直接在瀏覽器訪問ip的方式觀察到nginx的歡迎界面
- 這里我原先使用的Chrome瀏覽器企垦,不知為何會強制重定向到https,導致網(wǎng)站無法訪問
- 更換瀏覽器以后訪問便正常了
- 推薦使用edge或者自帶的ie進行簡單的測試
- nginx默認會讀取/etc/nginx/sites-enabled/default文件中的配置晒来,修改其中配置如下:
upstream django {
server 127.0.0.1:8001; #此處端口可以替換钞诡,需與uwsgi.ini之中的端口一致
}
server {
listen 80;
server_name 118.25.3.239; #此處需要自行替換成自己的IP地址
charset utf-8;
client_max_body_size 75M;
#django配置文件
location /static {
alias /home/ubuntu/Blog/static; #此處需要自行替換為網(wǎng)站根目錄下的靜態(tài)文件夾
}
#以下不必改動
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
重啟服務器
- 一切配置完畢之后,執(zhí)行命令
sudo /etc/init.d/nginx restart
- 瀏覽器中輸入IP即可發(fā)現(xiàn)網(wǎng)站成功構建完畢
參考文章及視頻
文章
- 很詳細的一篇文章
- Ubuntu上通過nginx部署Django筆記
視頻
- 視頻講解非常透徹湃崩,如果一步一步跟著執(zhí)行出錯可能性極低
- 【教程】Nginx + uWsgi 部署 Django + Mezzanine 生產(chǎn)服務器(「自由小徑」自由軟件教程) - 1/2
- 【教程】Nginx + uWsgi 部署 Django + Mezzanine 生產(chǎn)服務器(「自由小徑」自由軟件教程) - 2/2
2019.5.17后續(xù)更新
- 近期在部署時發(fā)現(xiàn)荧降,如果在自己的程序當中,使用了python的多線程攒读,需要在uwsgi.ini文件當中加入enable-threads=True參數(shù)
- 在部署的時候朵诫,使用uwsgi --ini讀取配置的時候,出現(xiàn)了無法訪問的情況薄扁,并且報出如下錯誤
- invalid request block size: 21573 (max 4096)...skip
因此我們在測試時剪返,需要修改配置文件中的socket為http,正式部署到nginx時再修改回socket邓梅,如下
[uwsgi]
...省略
socket = :8001 => http = :8001
...省略