在阿里云部署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

  #添加 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/
   
    #文件授权
    
        Require all granted
    
    
    Require all granted
  
  
  #获取 wsgi.py 中内容
    
    
        Require all granted
    
    

注意上述文件中,注意复制过去是否有多余的空格,有多余的空格经常会引起错误,(实在不行可以把注释什么的都删了)

七.修改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配置:

你可能感兴趣的:(Apache,Django,Ubuntu)