Django項目部署到Apache服務器上


之前寫了把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$
安裝djangodjango rest_framework

pip install django==1.8
pip install djangorestframework==3.6.4

注意: django2開始就不支持python2了,所以要安裝低級一點的,但是如果djangorestframework不安裝低級一點的話會有匹配不上的

修改apache配置文件/etc/apache2/sites-available/000-default.conf

  1. 修改對於Django項目的路徑,這次我們使用守護進程模式,主要需要保留三行:WSGIDaemonProcessWSGIProcessGroup,和WSGIScriptAlias
    # 這是靜態文件配置
    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>
    
    一個Django項目的結構一般是這樣的:
    - ProjectName
    -- ProjectName
    ---- wsgi.py
    -- AppName
    ---- static
    
    注意有兩個名字一樣的文件夾,別搞混了
    靜態文件配置:
    • 第一行為Alias <URL Path> <FILE PATH>
      <URL Path>的含義和上面一樣,從此http://hostname/<URL PATH>/就是訪問靜態文件夾<FILE PATH>的路徑
    • 第二行為<Directory <FILE PATH> >,填的還是靜態文件夾的路徑

修改Django的代碼

  1. wsgi.py,直接用生成的
  2. 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>保持一致

在prod里調試

有很多時候本地服務器上可,到了server上就有bug,但是卻不知道是哪里的bug,這個時候需要打印一些必要的信息。
最簡單的方式就是將信息打印到stderr,這樣wsgi的log會記錄在Apacheerror_log里:

import sys
print >> sys.stderr, message

如果看不到的話,把apache的日志級別調高到info即可,打印出來的log長這樣:

關於Sqlite3的權限配置

這個問題下有比較全的情況,翻譯過來如下,對db.sqlite3數據庫來說:

  1. 確保Apache可以寫數據庫的父目錄
  2. 確保數據庫的完整路徑上的文件夾不以數字開頭
  3. 確保完整路徑上沒有db文件夾
  4. 確保/tmp文件夾在三個級別上都可寫
  5. 確保settings.py里寫的是完整路徑
  6. 確保路徑上沒有特殊字符
  7. 在WINDOWS上,路徑要寫成雙反斜杠

最后!!!!!!!

重啟Apache!!!!!!!!
每次修改python源碼也要重啟!!!!!不然WSGI會用原來的代碼!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM