django部署詳細版教程(ubuntu+apache2+virtualenv)

阿里云高性能服務器2折起:點我購買

在經歷了無數的大坑后,終于按照網上一個比較簡單的教程把自己的Blog做好了。后來在部署的時候又發現了無數的坑,于是有了這篇django部署教程,希望看到這篇教程的同學能少入坑,順順利利的部署成功自己的Blog。

希望同學們能認認真真看完此教程,我會盡我所能把每一步都講的明白(雖然我也是個小白),下面讓我們開始這坑爹而又有趣的部署之旅吧:

一、前提和環境

首先,本教程是假設你已經有了一個django項目且能在本機正常運行的外加一個可以正常使用的ubuntu。其次你可以不懂linux,因為照著教程走,不會有太大的問題,但最好有一點python和django基礎。

環境:

python 3.4 (一般ubuntu自帶py2和py3)

ubuntu-14.10-desktop、ubuntu-14.04-server(可以在win7下使用虛擬機)

django 1.7.1

apache 2.4.7

坑一:務必保持你的開發環境和我上述三個一樣,否則可能會出現莫名其妙的問題,這是一個大坑。

二、入坑

virtualenv和django配置

1、首先ctrl+alt+t進入終端,然后我們安裝python3-pip,pip類似ubuntu的apt-get可以方便的安裝各種python庫:

sudo apt-get install python3-pip

坑二:ubuntu默認安裝py2和py3,終端輸入“python”是py2環境,輸入“python3”是py3環境。在ubuntu中如果想使用py3的pip請使用:“pip3”命令。“pip”命令為py2的,這點請注意。

2、安裝python的虛擬環境virtualenv,virtualenv是一個可以虛擬多個python環境的東東,比如我的a網站是py2+django1.7開發,b網站是py3+django1.8開發。他們兩個想共存于一臺電腦上就要用到這個東東:

sudo pip3 install virtualenv

3、創建虛擬環境,此命令會創建一個名為venv的文件夾,位置就在你終端所顯示的位置,里面包含了一個python環境。可以把它理解成類似與windows上的一個虛擬機系統,只不過他只是python的。

virtualenv venv

4、激活虛擬環境,相當于開啟虛擬機系統,激活后,在這個激活的終端內執行的任何python命令都不會影響真實環境。注意如果你現在沒有在venv的上級目錄下,下面的命令是會報錯的。可以用source后面跟完整的venv的路徑。

source venv/bin/activate

5、安裝django,到這里,就離最終成功邁出了關鍵的一步了,終于開始安裝我們的主角django了,這里我安裝的版本是1.7.1,安裝前請再次確認你所開發的或者下載別人的django網站的版本和你安裝的保持一致。

pip install -v django==1.7.1

小知識:在這里,我們使用pip而不是pip3的原因是虛擬環境里只有py3的存在,所以我們輸入“python”和“pip”所關聯的都會是py3的。你可以自己實驗下在虛擬環境中輸入是不會報錯的,而在真實的環境里則會是顯示py2。

6、安裝所必須的python包,這里請根據你自己所開發的網站需要的包用“pip”進行安裝,下面命令是我的blog所需要用到的包:

pip install django-ckeditor
pip install django-haystack
pip install whoosh
pip install jieba
pip install django-pagination-py3==1.1.1

坑三:安裝分頁插件pagination的時候,如果你是py3,請使用pip install django-pagination-py3==1.1.1命令安裝,網上很多文章針對的都是py2的,當你用網上的命令安裝這個插件后,在py3下是不會有效果的。

7、安裝git,因為我是在server上面部署的,沒有圖形界面,所以我用git來下載我開發好的網站去部署就需要用到git了。git部分這里不再講解,原因很簡單,因為博主也不是很會啊!其實只要會上傳到github然后會下載下來對于此文章來說就夠了。如果你不是用的server版那就直接復制粘貼就更方便啦。(復制粘貼的請無視7和8條)

sudo apt-get install git

8、下載所需要的網站,這里我給出一個我的blog的源碼,當然這也只是我做實驗用的,你完全可以下載下來去學習,修改它。前提是你明白這是一個十分簡陋的博客,僅供開發學習使用。

git clone https://github.com/juventusryp/test.git

坑四:如果你是新手剛開始學習django,下載下來后,請使用“mv test my_blog_2"更改文件夾名字,會省去你很多麻煩。

9、初始化數據庫,刪除根目錄下的數據庫文件:db.sqlite3和article目錄下的migrations文件夾。命令是“sudo rm -rf”加文件名。

然后運行下面的命令初始化數據庫:

python manage.py migrate

初始化完畢后,建立后臺管理員:

python manage.py createsuperuser

10、至此,一個網站應該是可以正常瀏覽了,請使用“python manage.py runserver”測試看是否可以正常瀏覽,如果正常,那么恭喜你,下面再只需要幾步,就可以把你的網站部署到服務器上讓大家都看到了。

二、部署部分

1、進入ubuntu,安裝apache2和mod_wsgi:

sudo apt-get install apache2 libapache2-mod-wsgi-py3

坑五:此處如果你是py2開發的話去掉上述命令最后的“-py3”,否則最好加上。

2、查看apache2版本:

apachectl -v

看看是否是2.4.7版本

3、新建一個網站,這里是創建一個網站的配置文件,具體不再闡述,請自行學習apache的相關文檔。

sudo vim /etc/apache2/sites-available/sitename.conf

我的sitename.conf如下,此文件僅作參考,請自行修改里面的相關路徑和網址:

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    #ServerName www.example.com
    ServerName localhost:80
    ServerAlias otherdomain.com
    ServerAdmin xxx@qq.com

    Alias /media/ /home/user/my_blog_2/media/
    Alias /static/ /home/user/my_blog_2/static/

    <Directory /home/user/my_blog_2/media>
        Require all granted
    </Directory>

    <Directory /home/user/my_blog_2/static>
        Require all granted
    </Directory>

    WSGIDaemonProcess http://127.0.0.1:80 python-path=/home/user/my_blog_2:/home/user/venv/lib/python3.4/site-packages
    WSGIProcessGroup http://127.0.0.1:80
    WSGIScriptAlias / /home/user/my_blog_2/my_blog_2/wsgi.py

    <Directory /home/ryp/my_blog_2/my_blog_2>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn
    ErrorLog ${APACHE_LOG_DIR}/error-my_blog_2.log
    CustomLog ${APACHE_LOG_DIR}/access-my_blog_2.log combined
    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

坑六; 如果在服務器上使用了虛擬環境,配置文檔里加上下面三行應該才可以,這里網上很多文章都沒有說清楚,當初坑了博主相當長時間。

WSGIDaemonProcess http://127.0.0.1:80 python-path=/home/user/my_blog_2:/home/user/venv/lib/python3.4/site-packages
WSGIProcessGroup http://127.0.0.1:80
WSGIScriptAlias / /home/user/my_blog_2/my_blog_2/wsgi.py

4、修改wsgi文件,我的路徑就是/home/user/my_blog_2/my_blog_2/wsgi.py 請找到你的路徑修改如下:

"""
WSGI config for my_blog_2 project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
import os
from os.path import join,dirname,abspath
PROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys 
sys.path.insert(0,PROJECT_DIR)

os.environ["DJANGO_SETTINGS_MODULE"] = "my_blog_2.settings" 

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

是不是已經有點看不下去了?不要急,到最后一步了,堅持一下。完成下面的,我們的部署坑之路就算走完了。

5、設置權限,linux下對權限很敏感,建議大家先對這塊有所了解。博主就不是很懂,所以很多地方都是根據log來一步一步調試的。

在 Linux 服務器上,用戶上傳目錄還要設置給 www-data 用戶的寫權限,下面的方法比較好,不影響原來的用戶的編輯。

假如上傳目錄為 my_blog_2/media/uploads 文件夾,進入media文件夾,將 uploads 用戶組改為www-data,并且賦予該組寫權限:

cd media/ 
sudo chgrp -R www-data uploads
sudo chmod -R g+w uploads

如果你使用的是sqlite3數據庫,還會提示 Attempt to write a readonly database,同樣要給www-data寫數據庫的權限

進入項目目錄的上一級,比如project目錄為 /home/user/my_blog_2, 那就進入 /home/user 執行下面的命令(和修改上傳文件夾類似)

sudo chgrp www-data my_blog_2
sudo chmod g+w my_blog_2
sudo chgrp www-data my_blog_2/db.sqlite3  # 更改為你的數據庫名稱
sudo chmod g+w my_blog_2/db.sqlite3

坑七:如果你是用我的test的網站學習,應該還會有些小問題,比如在寫好文章發布的時候會報錯,那是因為有個插件的權限問題,請打開debug模式,修改那個插件所在文件夾的權限即可。

6、納尼!不是說已經可以正常訪問了嗎,怎么還有!博主保證下面一定是最后一步

切換到目錄:/etc/apache2/sites-available/ 運行:

sudo service apache2 reload 
sudo a2dissite 000-default && sudo a2ensite sitename.conf
sudo service apache2 restart

如果一切順利,你的網站就可以通過域名(當然前提是請解析到你的服務器)或者ip來訪問了

PS:如果你有任何不懂的地方,歡迎給我留言,我會盡力解答。

其實博主也真的是個小白,希望能有更多的小白來一起交流python,交流django。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容