linux下搭建apache+mod-wsgi+python環境【全過程】
一、環境說明:
ubuntu-17.10.1-desktop 64位
二、檢視系統自帶python預設版本,以及系統中python版本
1.命令列下輸入: python, 可以檢視python預設版本,輸出為 python2.7.3
2.命令列下輸入:whereis python, 可以檢視python的路徑,我的環境下python有三個版本,分別是:python2.7.2, python3.6, python3.7
三、將 系統預設的python版本改為我們想要的版本,如:我想將預設版本改為python3.6
1.命令列下執行:update-alternatives --install /usr/bin/python python /usr/bin/python2.7.3 1
2.命令列下執行:update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
3.命令列下執行:python 【檢視當前python的預設版本】
4.命令列下執行:update-alternatives --list python 【列出可用的Python替代版本】
四、安裝pytho3-pip並更改python的pip預設安裝依賴路徑
1.命令列下執行:sudo apt-get install python3-pip
2.檢視pip預設安裝依賴路徑
1)命令列執行:python -m site,可以得到結果:sys.path, USER_BASE, USER_SITE, ENABLE_USER_SITE
*USER_BASE, USER_SITE其實就是使用者自定義的啟用Python指令碼和依賴安裝包的基礎路徑
2) 命令列執行:python -m site --user-site 檢視pip預設安裝依賴路徑
3.修改pip預設安裝依賴路徑
1)命令列輸入:python -m site -help 【顯示要修改的檔案site.py的路徑】
2)命令列修改site.py檔案中USER_SITE的路徑【我設定的是 python3.6下的dist-package路徑】
3)測試安裝
五、apache2安裝
1.命令列執行:sudo apt-get install apache2
2.瀏覽器輸入:http://localhost
3.修改apache2的預設埠號
1)命令列執行:whereis apache2 【查詢apache2, 找到/etc/apache2】
2)開啟/etc/apache2/ports.conf,將埠80改為8001
3)開啟/etc/apache2/sites-enabled/000-default檔案,將VirtualHost *:80修改成VirtualHost *:8001
4)命令列執行:sudo /etc/init.d/apache2 restart 【重啟apache服務】
六、安裝mod-wsgi
1.命令列執行: sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3
七、配置python dajngo環境
1.sudo pip3 install virtualenv 【下載依賴】
2.cd ~/myproject 【切換至專案資料夾跟目錄下】
3. virtualenv myprojectenv 【建立python虛擬環境】
4.source myprojectenv/bin/activate 【啟用虛擬環境】
5.pip install django 【虛擬環境中下載依賴】
6.初始化資料庫
-
cd ~/myproject
-
./manage.py makemigrations
-
./manage.py migrate
7.為專案建立管理員使用者:./manage.py createsuperuser
8.把靜態檔案放到static目錄 :./manage.py collectstatic
9.如果開啟了防火牆,開啟8000埠:sudo ufw allow 8000
10.測試Django專案,啟動server: ./manage.py runserver 0.0.0.0:8000
11.瀏覽器輸入:http://server_domain_or_IP:8000
八.配置apache
1. 開啟配置檔案: sudo nano /etc/apache2/sites-available/000-default.conf
2.所有static的請求對映到Django專案的/static目錄,在VirtualHost塊中新增:
<VirtualHost *:80>
. . .
Alias /static /home/sammy/myproject/static
<Directory /home/sammy/myproject/static>
Require all granted
</Directory>
</VirtualHost>
3. 配置apache有訪問專案目錄中wsgi.py的許可權:
<VirtualHost *:80>
. . .
Alias /static /home/sammy/myproject/static
<Directory /home/sammy/myproject/static>
Require all granted
</Directory>
<Directory /home/sammy/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
4. Django建議使用daemon模式執行WSGI程序,配置WSGIDaemonProcess:
<VirtualHost *:80>
. . .
Alias /static /home/sammy/myproject/static
<Directory /home/sammy/myproject/static>
Require all granted
</Directory>
<Directory /home/sammy/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproject python-home=/home/sammy/myproject/myprojectenv python-path=/home/sammy/myproject
WSGIProcessGroup myproject
WSGIScriptAlias / /home/sammy/myproject/myproject/wsgi.py
</VirtualHost>
*注意替換上面的Python虛擬環境路徑和專案路徑
5. 修正一些目錄和檔案許可權:
chmod 664 ~/myproject/db.sqlite3
sudo chown :www-data ~/myproject/db.sqlite3
sudo chown :www-data ~/myproject
6. 如果你配置了防火牆,開啟80、443埠:
-
sudo ufw delete allow 8000
-
sudo ufw allow 'Apache Full'
7. 檢查Apache配置檔案是否有語法錯誤:
sudo apache2ctl configtest
Output
. . .
Syntax OK
8. 如果沒有語法錯誤,重啟Apache:
sudo systemctl restart apache2
9. 現在使用瀏覽器訪問 http://your_doamin_or_IP:port測試Apache-Django部署是否成功: