雖然Django自帶了wsgi,能進行簡單部署,但是在實際部署時多采用Apache和Nginx。本文簡單介紹了如何用apache2來部署一個django的項目。
環境安裝:
安裝apache2:
sudo apt-get install apache2
安裝mod-wsgi:
sudo apt-get install libapache2-mod-wsgi-py3
注意:此時無需安裝python2的mod-wsgi,否則apache2將會自動關聯python2,導致項目部署出現不能導入wsgi.py模塊的問題。
部署:
1.創建簡單項目:我們在桌面上臨時創建一個test_apache的項目,用於部署
cd Desktop/ sudo dajngo-admin startproject test_apache
2.創建項目的配置文件: 在apache2的配置文件夾下面創建一個與項目同名的配置文件即可。
sudo vim /etc/apache2/sites-available/test_apache.conf
注意:Ubntu與CentOS的apache配置文件夾路徑有區別,該項目時在Ubuntu系統進行配置的。
3.添加配置
<!-- PORT 8888 --> <VirtualHost *:8888> <!-- IP 12.82.166.83 --> ServerName 12.82.166.83 <!-- 項目根目錄 --> DocumentRoot /home/proetest02/Desktop/test_apache <!-- 通過wsgi連接django項目和apche2 --> WSGIScriptAlias / /home/protest02/Desktop/test01/test_apache/wsgi.py <!-- 文件授權 --> <Directory /home/protest02/Desktop/test_apache/test_apache> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
4.端口監聽:
#編輯端口配置文件 sudo vi /etc/apache2/ports.conf #修改或者添加監聽端口 Listen 8888
5.添加項目所在地:
#編輯wsgi.conf sudo vim /etc/apache2/mods-available/wsgi.conf #添加項目路徑 WSGIPythonPath /home/protest02/Desktop/test_apache
6.修改項目wsgi.py:加入下面代碼即可
from os.path import join,dirname,abspath import sys PROJECT_DIR = dirname(dirname(abspath(__file__))) sys.path.insert(0,PROJECT_DIR)
7.權限修改:
由於apache2默認啟用用戶:www-data(相關配置文件見:/etc/apache2/envvars),所以在當前Linux登陸用戶下需要給www-data相關的執行權限,當然你可以去配置文件中修改默認用戶。
#權限修改,后期還有新增應用也需修改權限 sudo chmod -R 644 test_apache sudo find test_apache -type d | xargs chmod 755 sudo chgrp www-data test_apache sudo chmod g+w test_apache
8.啟動服務
sudo service apache2 reload sudo a2ensite test_apache.conf sudo service apache2 restar
9.測試項目:
進入瀏覽器輸入:12.166.80.83/admin,就可以看到django的后台管理登陸界面了。說明你項目配置成功。
部署總結:
1.apache查看版本命令:有可能需要加sudo
apachectl -v
2.常見問題:
1.出現 Target WSGI script '/home/protest02/Desktop/test01/test01/wsgi.py' cannot be loaded as Python module.則有可能是安裝了python2的mod-wsgi. 卸載即可。
2.配置文件腳本單詞選項拼寫錯誤,可根據終端提示命令查看或者進入日志查看:cat /var/log/apache2/error.log
3.配置文件可編寫內容:
#端口配置 <VirtualHost *:80> # 填寫自己服務器的域名或者ip ServerName IP:80 # 其他域名(此處可以不填),多個域名指向同一個站點時可以使用,要多少個就加多少個,空格隔開 ServerAlias otherdomain.com #郵箱 ServerAdmin xxx@Email.com # 多媒體文件存放的路徑,具體路徑根據你自己的來,這里只是例子 Alias /media/ /home/user/項目名稱/media/ # 靜態文件文件( js, css, 圖片,視頻等文件)存放的路徑,具體路徑根據歲需求 Alias /static/ /home/user/項目名稱/static/ # 文件授權 <Directory /home/user/項目名稱/media> Require all granted </Directory> <Directory /home/user/項目名稱/static> Require all granted </Directory> # 通過wsgi.py 連接apache2和你的Django項目 WSGIScriptAlias / /home/user/項目名稱/項目名稱/wsgi.py <Directory /home/user/項目名稱/項目名稱> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>