此篇blog將詳細記錄部署Django的每個步驟,網上現有的教程實在太少太老了!好多坑!第一次嘗試後臺很懵,最坑的地方是安裝的wsgi部分模塊須要更新。B站真是個學習的地方
,竟發現了楊老師的部署視頻,楊老師的B站主頁在此(主頁有一系列的django學習視頻,推薦乾貨
)html
用於部署的項目demo主要用了Django REST framework 提供後臺api,因此靜態文件僅有Django REST framework部分的。可是部署過程基本是同樣的python
如下是項目demo的GitHub地址,因爲是第一次使用python和後臺相關的東西,代碼寫得可能比較差,此blog主要用於記錄部署步驟
。
https://github.com/Joeoeoe/my...mysql
考慮一個服務器有多個Django項目,這裏使用了virtualenv和mod_wsgi daemon mode(守護進程模式)git
過程當中的坑點儘可能指出github
騰訊雲Ubuntu 16.04.1
tips:根據不一樣機器或者用戶有時會出現權限問題sql
如下是部署思路數據庫
software-properties-common安裝
python版本更新
pip安裝及更新
MySQL8.0安裝
git(傳項目,用filezilla等也能夠,這裏咱們用GitHub,另外settings.py不建議放上GitHub,這裏僅是作個演示,因此沒有分離上傳)
virtualenv 安裝apache
tips:這裏爲了演示django的本地虛擬服務器,暫時先不安裝apache2
django
從GitHub上clone項目
建立virtualenv虛擬環境,並安裝相關依賴ubuntu
apache2安裝
wsgi安裝及更新
編寫配置文件.conf
激活網站
收集靜態文件(這一步固然也能夠放在前面)
主要思路以上
Ubuntu初始的python版本是2.7和3.5,這裏咱們要更新成3.6,並更換軟連接
先更新
sudo apt-get install software-properties-common //管理軟件庫 sudo apt-add-repository ppa:jonathonf/python-3.6 //加入python3.6 sudo apt-get update //更新列表 sudo apt-get install python3.6
更改軟鏈接
cd /usr/bin sudo rm python sudo ln -s python3.6 python sudo rm python3 sudo ln -s python3.6 python3
sudo apt-get install python3-pip //安裝完後是8.1.1,指向python 3.6,pip須要升級 pip3 list //可查看已安裝依賴 pip3 install --upgrade pip //升級,升級以後有個很神奇的地方,只能使用pip而不能使用pip3了 //例如輸入pip -V或pip3.6 -V會顯示18.1版本,而輸入pip3 -V會報錯。 //可是斷開連接從新登陸就三個命令都能用了。
這裏不使用sudo apt-get install mysql-server安裝,由於它默認裝5.7的版本,這裏裝MySQL8.0
這是官網apt連接https://dev.mysql.com/downloa...,點擊download後進去新的頁面右鍵複製連接地址
把軟件包放到/home/ubuntu目錄裏吧
cd /home/ubuntu wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb //得到軟件包,這個連接正是 //複製來的連接
這是下載好的軟件包,接下來dpkg,而後選擇配置吧
sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb
配置都選8.0,肯定完兩個配置後最後選ok
更新軟件列表並安裝MySQL
sudo apt-get update sudo apt-get install mysql-server
接着輸入密碼,選擇加密方式就ok了,這裏加密方式我選擇第一個
sudo apt-get install git pip3 install --user virtualenv
這裏步驟都很簡單
咱們把項目放到/home/ubuntu下
cd /home/ubuntu git clone https://github.com/Joeoeoe/mysite.git
虛擬環境建立到/home/ubuntu下,取名爲mysite_env,而且激活進入虛擬環境
virtualenv mysite_env source mysite_env/bin/activate
顯示以下表示咱們已進入虛擬環境
經過pip list命令能夠看見咱們此環境下只有基本依賴
接着安裝依賴,這裏有一個很是方便的方法,就是使用項目中的**`requirements.txt中
cd /home/ubuntu/mysite pip install -r requirments.txt
pip list以後就能夠查看咱們已安裝的依賴了
ok,接下來進入MySQL建立咱們的數據庫blog_db
CREATE DATABASE `blog_db` CHARACTER SET utf8 COLLATE utf8_general_ci;
而後到項目目錄下完成遷移,並啓動虛擬服務器
$python manage.py makemigrations $python manage.py migrate $python manage.py runserver 0.0.0.0:8000
輸入你的ip地址加端口號
正常狀況下會看到這個頁面
這時咱們得在settings.py中添加容許的http_host
ALLOWED_HOSTS = ["*"]
要限定host的話本身更改吧
再次啓動虛擬環境,訪問ip地址加端口號,按個人項目,由於沒有首頁
,因此會顯示以下
我有寫一個test_view接口進行測試,加上/test_view/,接着會顯示Django REST framework的接口界面
ok,到這裏沒問題的話,多數環境和依賴已經都安裝完成了。接下來是部署
和激活
階段了。
安裝apache是沒什麼問題的,這裏比較麻煩的是mod_wsgi
sudo apt-get install apache2 sudo apt-get install libapache2-mod-wsgi-py3
安裝完這兩個後,咱們看看坑點
在哪裏
cd /usr/lib/apache2/modules
到此目錄下查看內容,會發現
mod_wsgi.so模塊是軟連接,而且指向mod_wsgi.so-3.5,這裏說實話不清楚是什麼緣由,若是沒有對這個模塊進行更新的話,部署時會出錯,這時要從mod_wsgi官網下載源代碼進行安裝,官網下載連接放在文末
//須要安裝apache和python對應dev包 sudo apt-get install apache2-dev sudo apt-get install python3.6-dev
尋着mod_wsgi官網到GitHub上找到下載連接
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.5.tar.gz //放到/home/ubuntu目錄下後進行解壓 tar xvfs 4.6.5.tar.gz cd mod_wsgi-4.6.5/ //這是解壓出來的文件
能夠看到裏面有個.configure腳本,它能夠用來進行安裝配置,運行此腳本會在系統中尋找apxs或apx和python並提供合適的安裝配置,可是因爲版本或系統的緣由,這裏最好手動指定路徑
whereis apxs whereis python
這裏我apxs的路徑爲/usr/bin/apxs
python使用的是3.6,因此選擇/usr/bin/python3.6
運行.configure腳本,不一樣地址對應換一下就行了
./configure --with-apxs=/usr/bin/apxs --with-python=/usr/bin/python3.6 make //編譯,若安裝失敗,記得先執行make clean sudo make install
看看mod_wsgi.so有沒有更新
ls /usr/lib/apache2/modules/
嗯,如今不是軟連接了,接下來編寫網站配置文件
cd /etc/apache2/sites-available sudo vim mysite.conf
由於使用了virtualenv和mod_wsgi daemon mode(守護進程模式),因此配置多了一點點
<VirtualHost *:80> #訪問網站以哪一個目錄開始,第二個參數填寫路徑 WSGIScriptAlias / /home/ubuntu/mysite/mysite/wsgi.py <Directory /home/ubuntu/mysite/mysite> <Files wsgi.py> Require all granted </Files> </Directory> #開放靜態目錄 Alias /static/ /home/ubuntu/mysite/static/ <Directory /home/ubuntu/mysite/static> Require all granted </Directory> #開放上傳文件夾 Alias /media/ /home/ubuntu/mysite/media/ <Directory /home/ubuntu/mysite/media> Require all granted </Directory> #如下開始是由於使用了virtualenv部署 #第一個路徑是虛擬環境路徑,第二個是項目所在路徑 WSGIDaemonProcess mysite python-home=/home/ubuntu/mysite_env python-path=/home/ubuntu/mysite #分組 WSGIProcessGroup mysite </VirtualHost>
保存退出
sudo a2ensite mysite.conf //激活 sudo a2dissite 000-default.conf //關閉自身站點 apache2ctl configtest //檢查配置有無問題,有的話自行解決 sudo apache2ctl restart
雖然尚未收集靜態文件,但這時已經能夠經過公網訪問了
接下來作一下收集靜態文件的操做就行了
settings.py中添加此代碼,讓靜態文件都收集到此目錄下
STATIC_ROOT = '/home/ubuntu/mysite/static/'
虛擬環境裝了django,虛擬環境下運行命令
python manage.py collectstatic
刷新網頁,如今就ok了!完,附參考學習資料
楊老師b站Django教程主頁:
https://space.bilibili.com/25...
Django靜態文件部署
https://docs.djangoproject.co...
apache部署Django
https://docs.djangoproject.co...
mod_wsgi官網快速安裝指南
https://modwsgi.readthedocs.i...