之前寫了把Django部署到XAMPP上,但是有bug,翻apache日志的時候發現會無法import _ssl
,然后我就怒而直接裝apache2了
配置方法大約和這篇文章差不多
安裝必要的包
sudo apt-get update
sudo apt-get install python-pip apache2 libapache2-mod-wsgi
然后還要保證WSGI模塊在運行:
sudo a2enmod wsgi
配置Python虛擬環境
為了不要修改系統python,事實上我懷疑系統python和xampp的庫對不上有可能這樣可以解決
安裝工具:
sudo pip install virtualenv
進入我們的project
目錄,新建環境:
virtualenv myprojectenv
進入虛擬環境安裝python包:
source myprojectenv/bin/activate
然后命令行應該會長這樣:
(myprojectenv)user@host:~/myproject$
安裝django
和django rest_framework
pip install django==1.8
pip install djangorestframework==3.6.4
注意:
django2
開始就不支持python2了,所以要安裝低級一點的,但是如果djangorestframework不安裝低級一點的話會有匹配不上的
修改apache配置文件/etc/apache2/sites-available/000-default.conf
- 修改對於Django項目的路徑,這次我們使用守護進程模式,主要需要保留三行:
WSGIDaemonProcess
,WSGIProcessGroup
,和WSGIScriptAlias
一個Django項目的結構一般是這樣的:# 這是靜態文件配置 Alias /demos/todolist/static/ /root/web/demos/todolist/work/static/ <Directory /root/web/demos/todolist/work/static/> #Order deny,allow #Allow from all Require all granted </Directory> <Directory /root/web/demos/todolist/todolist> <Files wsgi.py> Require all granted </Files> </Directory> WSGIDaemonProcess <HOST_NAME> python-home=/root/web/demos/todolist/tdlenv python-path=/root/web/demos/todolist WSGIProcessGroup <HOST_NAME> WSGIScriptAlias /demos/todolist /root/web/demos/todolist/todolist/wsgi.py process-group=<HOST_NAME>
注意有兩個名字一樣的文件夾,別搞混了- ProjectName -- ProjectName ---- wsgi.py -- AppName ---- static
靜態文件配置:- 第一行為
Alias <URL Path> <FILE PATH>
<URL Path>
的含義和上面一樣,從此http://hostname/<URL PATH>/
就是訪問靜態文件夾<FILE PATH>
的路徑 - 第二行為
<Directory <FILE PATH> >
,填的還是靜態文件夾的路徑
- 第一行為
修改Django的代碼
wsgi.py
,直接用生成的setting.py
- 為了放到生產環境上,可以把DEBUG關了,同時ALLOWED_HOST要修改一下以便外界可以訪問:
# SECURITY WARNING: don't run with debug turned on in production! DEBUG = False # ALLOWED_HOSTS = ['*'] # 不建議寫這個 ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'your ip', 'your hostname'] # 一般寫這4個
- 靜態路徑需要修改
主要是要與# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/demos/todolist/static/'
Alias <URL Path> <FILE PATH>
里的<URL Path>
保持一致
- 為了放到生產環境上,可以把DEBUG關了,同時ALLOWED_HOST要修改一下以便外界可以訪問:
在prod里調試
有很多時候本地服務器上可,到了server上就有bug,但是卻不知道是哪里的bug,這個時候需要打印一些必要的信息。
最簡單的方式就是將信息打印到stderr
,這樣wsgi
的log會記錄在Apache
的error_log
里:
import sys
print >> sys.stderr, message
如果看不到的話,把apache
的日志級別調高到info
即可,打印出來的log長這樣:
關於Sqlite3的權限配置
這個問題下有比較全的情況,翻譯過來如下,對db.sqlite3
數據庫來說:
- 確保Apache可以寫數據庫的父目錄
- 確保數據庫的完整路徑上的文件夾不以數字開頭
- 確保完整路徑上沒有
db
文件夾 - 確保
/tmp
文件夾在三個級別上都可寫 - 確保
settings.py
里寫的是完整路徑 - 確保路徑上沒有特殊字符
- 在WINDOWS上,路徑要寫成雙反斜杠
最后!!!!!!!
重啟Apache!!!!!!!!
每次修改python源碼也要重啟!!!!!不然WSGI會用原來的代碼!!