本文默認讀者已經在能Apache中部署了單個項目,有一定經驗,前期准備工作已經完成。
整體流程
1.配置需要監聽的端口
2.開啟虛擬路由並加載文件
3.配置虛擬路由映射文件
4.在Django項目的wsgi.py中添加項目路徑和虛擬環境路徑
5.配置訪問媒體文件的url
6.啟動Apache服務
配置需要監聽的端口
1.打開Apache配置文件(Apache安裝目錄下:conf/httpd.conf)
2.找到#Listen 12.34.56.78:80
3.在下方添加需要監聽的端口,以880,8001為例
Listen 127.0.0.1:8080
Listen 127.0.0.1:8001
若要讓局域網內其他用戶可以訪問:
Listen 0.0.0.0:8080 Listen *:8001 # 以上兩種方法均可
開啟虛擬路由
1.找到#LoadModule vhost_alias_module modules/mod_vhost_alias.so
,建議直接搜索
2.將行首的#
刪除,取消注釋,使其生效
3.找到#Include conf/extra/httpd-vhosts.conf
4.同樣將行首的#
刪除,使其生效,包含這個配置文件,接下來我們就是去編輯該文件。
配置項目映射
1.打開httpd-vhosts.conf
文件(Apache安裝目錄下conf/extra/httpd-vhosts.conf)
2.打開文件后,文件下面有一些類似下面這樣的配置
<VirtualHost *:80>
ServerName xxxx.example.com
ServerAlias www.xxxx.example.com
...
</VirtualHost>
3.注釋掉原有配置
4.編寫自己的配置進去
第一個服務使用8080端口
第二個服務使用8001端口
# 第一個服務,使用8080端口,這個端口必須是在前面的文件中添加了監聽的端口。 <VirtualHost *:8080> # 這里填寫域名,沒有域名隨便填寫即可 ServerName test1.com ServerAlias a.test1.com # 項目的wsgi.py文件,注意目錄前有`/`和空格 WSGIScriptAlias / D:/gxyd/zdhpt/zdhpt/wsgi.py <Directory D:/gxyd/zdhpt/zdhpt> <Files wsgi.py> Require all granted </Files> </Directory> # 靜態文件路徑 Alias /static D:/gxyd/zdhpt/static <Directory D:/gxyd/zdhpt/static> AllowOverride None Options None Require all granted </Directory> # 項目根路徑,經測試,這個寫到項目所在文件夾或者直接進入文件夾內都可以 DocumentRoot "D:/gxyd/zdhpt" <Directory "D:/gxyd/zdhpt"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> # 錯誤日志記錄文件 ErrorLog "logs/zdhpt_error.log" #訪問的日志記錄文件 CustomLog "logs/zdhpt_access.log" common </VirtualHost> # 第二個服務,使用8001端口 <VirtualHost *:8001> # 域名信息 ServerName test2.com ServerAlias www.test2.com # 項目的wsgi.py文件,注意目錄前有`/`和空格 WSGIScriptAlias / D:/gxyd/bomc_i/bomc_i/wsgi.py <Directory D:/gxyd/bomc_i/bomc_i> <Files wsgi.py> Require all granted </Files> </Directory> # 靜態文件路徑 Alias /static D:/gxyd/bomc_i/all_static <Directory D:/gxyd/bomc_i/all_static> AllowOverride None Options None Require all granted </Directory> # 項目根路徑,經測試,這個寫到項目所在文件夾或者直接進入文件夾內都可以 DocumentRoot "D:/gxyd/bomc_i" <Directory "D:/gxyd/bomc_i"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> # 錯誤日志記錄文件 ErrorLog "logs/bomc_i_error.log" #訪問的日志記錄文件 CustomLog "logs/bomc_i_access.log" common </VirtualHost>
1.打開項目的wsgi.py文件
2.添加四行代碼(項目所在路徑為:D:\gxyd\bomc_i)
import sys sys.path.append('D:/gxyd/bomc_i') # 加入本項目的虛擬環境(當兩個django項目使用不同版本時,這可能非常有用) virtualenv_dir = 'D:/gxyd/bomc_i/venv/Lib/site-packages' # 虛擬環境python包文件夾 sys.path.insert(0, virtualenv_dir) # 加入導包路徑
3.完成后的效果
import os from django.core.wsgi import get_wsgi_application import sys sys.path.append('D:/gxyd/bomc_i') # 加入本項目的虛擬環境(當兩個django項目使用不同版本時,這可能非常有用) virtualenv_dir = 'D:/gxyd/bomc_i/venv/Lib/site-packages' # 虛擬環境python包文件夾 sys.path.insert(0, virtualenv_dir) # 加入導包路徑 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bomc_i.settings") application = get_wsgi_application()
4.注意:這里的項目路徑必須寫到項目文件夾,只到包含項目的文件夾是不行的
5.同樣修改另一個項目的wsgi.py文件即可
配置訪問媒體文件的url
1.在測試環境下可以不配,但是部署到生產模式下必須要配置,不然訪問不到媒體文件打開全局路由文件urls.py
2.打開urls.py,添加訪問媒體文件的路由
3.同樣給另一個項目配置即可 。
啟動Apache
1.按照上面的修改完成后,啟動Apache服務即可
2.如果啟動Apache失敗,則需要使用命令行查看原因,常見由於配置文件寫錯導致的啟動錯誤
3.進入Apache目錄下的bin目錄,打開命令行工具,執行httpd.exe -t :
4.根據提示的錯誤信息修改配置文件,再次啟動Apache服務即可
在瀏覽器訪問項目報錯及解決
Apache下配置了兩個Django項目,Apache啟動未報錯
先訪問網站A正常,再訪問網站B失敗。
重啟Apache后,先訪問B正常,再訪問A失敗
大概就是先訪問的網站是可以正常使用的,再訪問的那個就不行。
報錯信息:
錯誤是系統庫的問題。
經過一番查找,終於在國外一個技術網站找到了原因:大致意思是多次導入導致的,因為有兩個項目,某個文件被系統多次加載運行導致報錯。
解決方法:
找到圖中報錯的那個文件,注釋斷言語句
將4句斷言語句全部注釋,再在上面的判斷中添加pass即可完美解決問題。
補充一下
如果發現captcha驗證碼不顯示的問題,可以嘗試更改Pillow模塊的版本
參考:
https://blog.csdn.net/yueguangMaNong/article/details/99588531
https://blog.csdn.net/yueguangMaNong/article/details/102780239