1. 程式人生 > >linux下搭建apache+mod-wsgi+python環境【全過程】

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部署是否成功: