Django 有內建一個 Server,方便我們進行開發與測試,但官方「非常不建議」使用內建 Server 做非開發用途的服務。因此,網站開發完成,我們會將其部屬到 Apache 這類 Server上。以下就筆記一下如何在 Apache上部屬 Django
前情題要
請先在虛擬環境下安裝好 Django。還沒有安裝的話,可以參考這篇
在虛擬環境下安裝Django
以下測試環境為
Ubuntu 14.04 LTS, Python2, Django 1.9
建立一個 Django project
建立一個專案,名稱為 project
$ django-admin.py startproject project
把 Server 打開,port 設定為 8000
$ ./manage.py runserver 0.0.0.0:8000
打開瀏覽器,透過以下網址連上網站。WEB_IP 為 Server IP
http://WEB_IP:8000
建立 static 與 template 目錄
建立兩個目錄 static 與 template,把靜態資料 (如 CSS, JavaScript) 以及模板分開。整個 Django 專案的目錄結構如下
project ├ static ├ templates ├ project ├ manage.py └ db.sqlite3
接著要修改 setting,加入這兩個目錄
project/settings.py
...
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates').replace('\\', '/'), ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
}, ]
...
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, & quot; static & quot;),
)
安裝 apache2 與 mod_wsgi
$ sudo apt-get install apache2 `libapache2-mod-wsgi`
建立一個 Apache 配置檔
Apache 的預設目錄位於
/var/www/html
而 Django 專案的目錄在
/home/user/project/project
可以直接把專案搬到Apache的預設目錄,但好的方法應是設定配置檔。透過以下的設置,告訴 Apache 要怎麼連結對應的網址與位置。 Ubuntu 的 Apache 2 設定檔在 /etc/apache2/,到此目錄下新增一個設定檔,名為 site.conf
$ sudo vim /etc/apache2/sites-available/site.conf
#ServerName www.example.com
DocumentRoot /var/www/html
Alias /phpmyadmin /usr/share/phpmyadmin
Require all granted
Alias /static /home/user/project/static
Require all granted
Require all granted
WSGIDaemonProcess project python-path=/home/user/project:/home/user/venv/lib/python2.7/site-packages
WSGIProcessGroup project
WSGIScriptAlias / /home/user/project/project/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
- Alias /phpmyadmin 如果有安裝 phpmyadmin,就要在這邊做導向,否則交給 Django 後,就無法連結了
- Alias /static static 目錄位置
- Directory /home/user/project/project 專案位置
- WSGIDaemonProcess python 套件皆存在虛擬環境目錄內,因此要設定位置
設定檔案權限
將擁有者改為 Apache 的 www-data,讓資料庫與檔案能正常存取
$ chmod 664 ~/project/db.sqlite3
$ sudo chown :www-data ~/project/db.sqlite3
$ sudo chown :www-data ~/project
$ sudo a2ensite sitename
如果設定後出現問題,可以看看 Apache 的 error log
# cat /var/log/apache2/error.log
Apache 設定
啟用新配置檔
$ sudo a2ensite site
移除舊的配置檔
$ sudo a2dissite XXX
重新啟動 Apache
$ sudo service apache2 restart
完整的部屬還需要做很多設定,例如關閉 debug mode、設置 404 page 等等,以後再補充
想請教一下關於
WSGIDaemonProcess project python-path=/home/user/project:/home/user/venv/lib/python2.7/site-packages
這行您的django project 和虛擬環境venv都是在/home/user/底下同個目錄嘛?
因為我自己進入venv的方式是
cd /home/user/venv
source bin/activate
cd project
如果project和venv都在同一個目錄不知如何進入虛擬環境?
您好
我的django project和venv在同個目錄唷,也就是user之下
可以不進去venv資料夾執行,如下
source venv/bin/activate