在阿里雲部署Django應用,Ubuntu18.04+Django+Apache2,如何配置

在本地搭建Django項目後,想部署到雲服務器上,經過多次踩坑,總結如下:
一.首先安裝apache2

sudo apt-get update
sudo apt-get install apache2   #安裝Apache2
sudo apt-get install libapache2-mod-wsgi-py3   	#讓Apache2識別Python程序請求,安裝mod-wsgi模塊

二.安裝和配置 Git(這是爲了從遠程文檔庫中推送遠程倉庫到本地,如需上線的 Django 項目)

sudo apt-get instasll git

三.安裝 Python 的 pip 組件管理程序和虛擬機環境程序 virtualenv

sudo apt-get install python3-pip
pip3 install virtualenv

四. 配置遠程的 Django 項目
Linux 操作系統中的 Apache 網頁服務器一般會把網頁放在 /var/www/html 中,(安裝 Apache2後便生成 /var/www 目錄),所以我們也將 Django 項目放在 /var/www 下。首先在 /var/www 下使用 virtualenv 創建虛擬環境並啓用,然後再使用 git clone 命令推送遠程 Django 項目分支到本地

cd /var/www                           #移動到 /var/www 目錄下
virtualenv VENV                        #創建虛擬環境 VENV
source VENV/bin/activate                  #激活虛擬環境 VENV
git clone https://github.com/xxx/peoject.git   #克隆遠程倉庫到本地
cd myProject                       #移動到項目目錄
pip3 install -r requirements.txt              #安裝 requirements.txt文件中的庫包

但是阿里雲中git clone速度太慢,所以選擇使用FileZillaClient上傳文件到服務器/var/www/ 文件夾下。

五.接下來我們可以使用下列命令來啓動 Django 來訪問看看網站內容是否完整呈現。
進入到/var/www/myProject

python manage.py runserver

六.創建apache2的配置文件(這一步最關鍵):

按照下面的命令在apache2的sites-available文件目錄下,創建一個配置文件,其中項目名稱就填寫你的web項目的名稱,例如blogs.conf。

sudo vim /etc/apache2/sites-available/projectName.conf
<VirtualHost *:80>
  #添加 wsgi.py 文件路徑,通過wsgi.py連接apache2和你的Django項目
    WSGIScriptAlias / /var/www/projectName/projectName/wsgi.py
    #指定虛擬環境路徑
    WSGIDaemonProcess mblog python-path=/var/www/projectName:/var/www/VENV/lib/python3.6/site-packages
    WSGIProcessGroup projectName
  
 	#添加靜態文件路徑
    Alias /static/ /var/www/staticfiles/
    #上傳文件存放的路徑
    Alias /media/ /var/www/projectName/media/
   
    #文件授權
    <Directory /var/www/staticfiles>
        Require all granted
    </Directory>
    <Directory /var/www/projectName/media>
    Require all granted
  </Directory>
  
  #獲取 wsgi.py 中內容
    <Directory /var/www/projectName/projectName>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
</VirtualHost>

注意上述文件中,注意複製過去是否有多餘的空格,有多餘的空格經常會引起錯誤,(實在不行可以把註釋什麼的都刪了)

七.修改wsgi.py文件
找到你的Django項目路徑,找到項目的wsgi.py文件並打開,在原有的基礎上增加以下內容,經在Django2.2.4測試,不需要進行修改,其他Django版本未測試。

把之前的wsgi.py文件都註釋掉

#完整代碼
import os
from os.path import join,dirname,abspath
import sys
from django.core.wsgi import get_wsgi_application

PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0, PROJECT_DIR)
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"  
#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

application = get_wsgi_application()

八.切換到目錄:/etc/apache2/sites-available/ 運行:

sudo service apache2 reload 
sudo a2dissite 000-default && sudo a2ensite projectName.conf
sudo service apache2 restart

要是restart出錯,可以通過sudo apache2ctl configtest測試配置, 如果返回Syntax OK,則表示配置正確;

到此,再在瀏覽器上輸入ip地址就會呈現網頁,但是靜態文件加載不出來

九.修改setting.py文件,讓靜態文件正常加載:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')        
]
STATC_ROOT = '/var/www/staticfiles'

然後運行sudo service apache2 restart重啓web服務器,讓網站啓動

python manage.py collectstatic

將所有STATICFILES_DIRS中所有文件夾中的文件,以及各app中static中的文件都複製到 STATIC_ROOT 指定的文件夾中,把這些文件放到一起是爲了用apache等部署的時候更方便。

十.設置權限
Linux 對文件權限很敏感,我們還需要修改文件權限讓 Apache2 能夠正確讀取到。

所以我們需要修改Django項目的權限、上傳文件目錄、數據庫文件的權限,假如你的項目放在/var/www/projectName下,可以按照以下命令進行權限修改,一般用chmod 644給目錄和文件授權:

cd /var/www/
sudo chmod -R 644 項目名稱
sudo find 項目名稱 -type d | xargs chmod 755
sudo chgrp www-data 項目名稱
sudo chmod g+w 項目名稱

cd media/ #上傳文件目錄
sudo chgrp -R www-data uploads
sudo chmod -R g+w uploads

#數據庫文件
sudo chgrp www-data 項目名稱/db.sqlite3  # 更改爲你的數據庫名稱
sudo chmod g+w 項目名稱/db.sqlite3

十一.啓動網站&其他事項

sudo service apache2 restart

1.靜態文件不起作用:這是常見問題,檢查在項目配置文件blogs.conf、在Django中settings.py中的設置,檢查靜態文件目錄的權限,以及是否用pythong manage.py collectstatic收集靜態文件。
2.字符集錯誤:在/etc/apache2/envvars中設置字符集編碼類型
3.本機能夠訪問,用IP地址不能訪問:修改settings.py中的ALLOWED_HOSTS=[’*’]測試,再排查故障。
4。如果報 Internal Server Error錯誤,查看/var/log/apache2/error.log日誌文件,重點是上面第5步、第6步的設置。Django自帶的wsgi.py要按照第5步進行修改。

參考鏈接:django Documentation: How to user Django with Apache and mod_wsgi

Python3 + django2.0 + apache2 + ubuntu14部署網站上線

在Ubuntu1804上使用Apache2的部署Django配置:

發佈了30 篇原創文章 · 獲贊 1 · 訪問量 3649
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章