Django專案部署:Python3+Django2+Nginx+Uwsgi
一.版本說明
- 系統:Ubuntu16.04(阿里雲)
- Python:Python3.7
- Django:Django2
- Nginx:Nginx1.10.3
二.安裝軟體
該操作使用的是root賬號,如果不是root賬號,那麼需要在命令前面加sudo.示例:sudo apt-get update
1.升級系統(慎重選擇)
[email protected]:~# apt-get update
[email protected]:~# apt-get upgrade
2.安裝git,python3,pip
[email protected] :~# apt-get install git python3 python3-pip
3.安裝Nginx
(1)安裝
[email protected]:~# apt-get install nginx
(2)目錄結構
安裝完Nginx後,檔案結構大致為:
所有的配置檔案都在 /etc/nginx下;
啟動程式檔案在 /usr/sbin/nginx下;
日誌檔案在 /var/log/nginx/下,分別是access.log和error.log;
並且在 /etc/init.d下建立了啟動指令碼nginx。
(3)相關命令
sudo /etc/init.d/nginx start # 啟動 sudo /etc/init.d/nginx stop # 停止 sudo /etc/init.d/nginx restart # 重啟
(4)啟動Nginx服務
[email protected]:~# service nginx start
在瀏覽器輸入阿里雲伺服器域名(如http://47.107.136.2/),看Nginx是否啟動成功:
四.部署程式碼
1.部署前的專案配置
(1)指定靜態檔案目錄(setting.py)
# STATIC_ROOT 指明瞭靜態檔案的收集目錄,即專案根目錄(BASE_DIR)下的 static 資料夾。 STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static')
(2)關閉DEBUG模式(setting.py)
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
(3)設定允許訪問的域名(setting.py)
ALLOWED_HOSTS = ['*']
(4)生成requirements.txt
專案還會依賴一些第三方 Python 庫,為了方便在伺服器上一次性安裝,我們將全部依賴寫入一個叫 requirements.txt 的文字檔案中。啟用本地的虛擬環境(如果你使用了虛擬環境的話),並進入專案的根目錄,執行 pip freeze > requirements.txt 命令:
第一步:啟用虛擬環境(該操作是在git bash下操作,如果是不同的控制檯,需要更換命令,如windows下是輸入:activate)
[email protected] MINGW64 /e/tool/django/mysite/venv1/Scripts (master)
$ source activate
(venv1)
[email protected] MINGW64 /e/tool/django/mysite/venv1/Scripts (master)
第二步:在專案根目錄下執行pip freeze > requirements.txt命令
(venv1)
[email protected] MINGW64 /e/tool/django/mysite (master)
$ pip freeze > ./requirements.txt
這時專案根目錄下會生成了一個 requirements.txt 的文字檔案,其內容記錄了專案的全部依賴。
2.將專案上傳到碼雲(或者github)
略。git的使用參考廖雪峰Git教程
3.設定伺服器目錄結構
[email protected]:~# mkdir -p ~/sites/demo.sweeneys.com
4.建立虛擬環境:
[email protected]:~/sites/demo.sweeneys.com# python3 -m venv venv
5.從碼雲(或者github)把專案拉取過來:
[email protected]:~/sites/demo.sweeneys.com#
git clone https://gitee.com/sweeneys/mysite.git
6.安裝專案依賴
先啟用虛擬環境,再進入到專案根目錄,即 requirements.txt 所在的目錄,安裝專案的全部依賴:
[email protected]:~/sites/demo.sweeneys.com# source venv/bin/activate
(venv) [email protected]:~/sites/demo.sweeneys.com# cd mysite/
(venv) [email protected]:~/sites/demo.sweeneys.com/mysite# pip3 install -r requirements.txt
7.收集靜態檔案
(venv) [email protected]:~/sites/demo.sweeneys.com/mysite#
python manage.py collectstatic
8.生成資料庫
(venv) [email protected]:~/sites/demo.sweeneys.com/mysite# python manage.py migrate
9.建立超級使用者
(venv) [email protected]:~/sites/demo.sweeneys.com/mysite#
python manage.py createsuperuser
10.專案啟動測試
[email protected]:~/sites/demo.sweeneys.com/mysite# python3 manage.py runserver
五.配置Nginx
先在伺服器的 /etc/nginx/sites-available/ 目錄下新建一個配置檔案,寫上下面的配置內容:
server {
charset utf-8;
listen 80;
server_name demo.sweeneys.com;
location /static {
alias /sites/demo.sweeneys.com/mysite/static;
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/demo.sweeneys.com.socket;
}
}
(venv) [email protected]:~/sites/demo.sweeneys.com/mysite# ln -s /etc/nginx/sites-available/demo.sweeneys.com /etc/nginx/sites-enabled/demo.sweeneys.com
六.uwsgi配置
1.安裝全域性uwsgi
[email protected]:~# apt-get install uwsgi
2.uwsgi配置
在專案的根目錄下,也就是有manage.py的目錄下,新建一個uwsgi.ini
檔案。檔名可以隨便,但字尾必須是ini。
[email protected]:~/sites/demo.sweeneys.com/mysite#touch uwsgi.ini
開啟uwsgi.ini檔案
[email protected]:~/sites/demo.sweeneys.com/mysite#vi uwsgi.ini
在uwsgi.ini 裡面輸入下面的配置內容:
#my_uwsgi.ini
socket = :9000
chdir=/sites/demo.sweeneys.com/mysite # 根目錄
module=mysite.wsgi # django的wsgi檔案
master = true # master設定
processes=2
threads=2
max-requests=2000
chmod-socket=664
vacuum=true
3.執行uwsgi
[email protected]:~/sites/demo.sweeneys.com/mysite# uwsgi --ini my_uwsgi.ini