apache2部署django以及靜態文件


django中的runserver只是一個很簡單的web服務器,在開發中是不建議使用的,django在官方中建議是使用apache2等web服務器來配置,並且django會把靜態文件交由apache2等來處理,django認為這是一種高效的方法。其中最難理解的就是static files的配置,這里簡單說一下。

我是在阿里雲上的配置的服務器,系統是ubuntu16。

1 首先安裝apache2

sudo apt-get install apache2
 
sudo apt-get install libapache2-mod-wsgi
 
# 如果是Python 3,則將第二行替換為改行
sudo apt-get install libapache2-mod-wsgi-py3

2 然后執行命令

sudo a2enmod wsgi

(很多博客里都沒說到這一步,導致在啟動apache時,會提示Invalid Command WSGIScript)

(ubuntu的apache的配置文件在/etc/apache2下面)

3 這里我的工程是在/home/blog下面。首先新建一個配置文件

sudo vi /etc/apache2/sites-available/blog.conf

然后輸入下面內容

<VirtualHost *:80>
    ServerName www.wanghui.com
    ServerAlias wanghui.com
    ServerAdmin wzxwhd@126.com
  
    Alias /media/ /home/blog/media/
    Alias /static/ /home/blog/static/
  
    <Directory /home/blog/media>
        Require all granted
    </Directory>
  
    <Directory /home/blog/static>
        Require all granted
    </Directory>
  
    WSGIScriptAlias / /home/blog/blog/wsgi.py
  
    <Directory /home/blog/blog>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
</VirtualHost>

(在這里就要注意了:靜態文件的處理。在開發過程中,一般靜態文件都是放在app下面的static里,當settings.py中的Debug=True時,此時django會自己處理靜態文件,但是當在部署階段時,你需要在settings.py中加入:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

然后執行

sudo  python managy.py  collectstatic

這樣django會自動把你的靜態文件拷貝到項目根目錄下的static文件夾里,並且你也無需擔心你的html路徑問題。

保存退出,然后

sudo vim /etc/apach2/envars

將文件中的APACHE_RUN_USER 和 APACHE_RUN_GROUP改為合適的用戶名和組,這里不還,后面的靜態文件會有權限問題的!!

緊接着修改wsgi文件,/homg/blog/blog/wsig.py

import os
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
import sys 
sys.path.insert(0,PROJECT_DIR) 

這一步主要是為了讓apache知道你項目的位置。

4 設置目錄權限

一般目錄權限設置為 755,文件權限設置為 644 

項目位置在 /home/blog 

cd /home/
sudo chmod -R 644 blog
sudo find blog -type d -exec chmod 755 {} \;

5 啟動服務

sudo a2ensite blog

這樣就ok了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM