[Django] Window Apache 架站

軟體:Apache
Package:Django
Apache 官網

簡介:Django 利用 Apache 架站

  • 前期準備
    • 所有版本皆需對應,Apache, Python, VC
    • Window Apache 執行檔
    • 安裝 mod_wsgi
      • 執行 cmd:mod_wsgi-express module-config
        (mod_wsgi-express 已在 python scripts 路徑內)
        LoadModule wsgi_module "d:/pythonvenv/djangoenv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
        WSGIPythonHome "d:/pythonvenv/djangoenv"
        
  • Apache
    • 修改 C:\Apache24\conf\httpd.conf 
      • LoadModule 中加入剛得到的路徑,並加入 python dll 路徑以供執行 pyd
        LoadFile "D:\pythonVenv\djangoEnv\Scripts\python35.dll"
        LoadModule wsgi_module "d:/pythonvenv/djangoenv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
        WSGIPythonHome "d:/pythonvenv/djangoenv"
        
      • 文末加入
        Include "/path/apache_setting.conf"
      • 建立 apache_setting.conf,可放在 djangoProject 下
        # 設定專案位置
        WSGIPythonPath D:/djangoProject
        
        # VirtualHost:你可以通過設定虛擬主機容器以實現在你的主機上保有多個
        # 功能變數名稱/主機名。大多數設定資訊只使用基於名字的虛擬主機,因此伺服器
        # 不必擔心IP位址的問題,下面的命令以*號代替虛擬主機名。
        #
        # 在你試著設定你的虛擬主機以前,請參見
        # URL:http://httpd.apache.org/docs-2.0/vhosts/>以取得更多的資訊。
        
        <VirtualHost *:80>
        
            ServerName abc.dd.ee
            ServerName abc123.dd.ee
            #ServerAlias www.example.com
            
            #access_log 命名結果為 access_log.2013-06-06 
            #86400 代表記錄一天 
            CustomLog "|./bin/rotatelogs.exe ./logs/djangoProject/access_%Y-%m-%d.log 86400" common
            ErrorLog "|./bin/rotatelogs.exe ./logs/djangoProject/error_%Y-%m-%d.log 86400"
            
            # 指定包含服務腳本的目錄
            WSGIScriptAlias / D:/djangoProject/djangoProject/wsgi.py
            <Directory D:/djangoProject/djangoProject>
            <Files wsgi.py>
                Require all granted
            </Files>
            </Directory>
        
            # 指定靜態文件的目錄
            Alias /static/ D:/djangoProject/static/
            <Directory D:/djangoProject/static>
                Options Indexes  FollowSymLinks
                AllowOverride None
                Require all granted
            </Directory>
            
            # 指定 media 文件的目錄
            Alias /media/ D:/djangoProject/media/
            <Directory D:/djangoProject/media>
                Options Indexes  FollowSymLinks
                AllowOverride None
                Require all granted
            </Directory>
        
        </VirtualHost>
        
  • Django
    • Setting 加入
      STATIC_ROOT = os.path.join(BASE_DIR, 'static')
      STATIC_URL = '/static/'
      
      MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
      MEDIA_URL = '/media/'
      
    • Setting 的 ALLOWED_HOSTS  需確認,以免出現 Internal Server Error
    • 執行
      python manage.py collectstatic
  • 環境變數 (需設定在系統變數)
    • PYTHONPATH
      /Path/Python/Python35/DLLs;/Path/Python/Python35/Lib;/Path/Python/Python35/Lib/site-packages;
    • 設定錯誤,在 apache log 中會看到
      Fatal Python error: Py_Initialize: unable to load the file system codec
      ImportError: No module named 'encodings'
      
  • 執行
    • httpd.exe -t
      • 確認是否有錯誤 
    • httpd.exe -k install
      • 安裝至服務 
    • httpd.exe -k install -n "MyServiceName" 
      • 安裝並設定服務名字
    • httpd.exe -k uninstall
      • 移除服務 
    • httpd.exe -k uninstall -n "MyServiceName"
      • 移除特定名字的服務
    • httpd -S
      • 目前的設定
    • C:\Apache24\logs
      • 可查看錯誤
    • ApacheMonitor.exe
      • 用來控制伺服器的開關
  • 提醒
    • 中文路徑 & 空格 會造成錯誤
      用雙引號包路徑,即可成功用空格 & 中文

參考

How to use Django with Apache and mod_wsgi
Windows下用Apache、mod_wsgi部署Django网页服务器实践小结

留言