Django + Apache 部署

吐吐槽

此篇blog将详细记录部署Django的每一个步骤,网上现有的教程实在太少太老了!好多坑!第一次尝试后台很懵,最坑的地方是安装的wsgi部分模块需要更新。B站真是个学习的地方,竟发现了杨老师的部署视频,杨老师的B站主页在此主页有一系列的django学习视频,推荐干货

用于部署的项目demo主要用了Django REST framework 提供后台api,所以静态文件仅有Django REST framework部分的。但是部署过程基本是一样的

以下是项目demo的GitHub地址,由于是第一次使用python和后台相关的东西,代码写得可能比较差,此blog主要用于记录部署步骤
https://github.com/Joeoeoe/my…

考虑一个服务器有多个Django项目,这里使用了virtualenv和mod_wsgi daemon mode(守护进程模式)

过程中的坑点尽量指出

环境

腾讯云Ubuntu 16.04.1
tips:根据不同机器或者用户有时会出现权限问题

思路

以下是部署思路

服务器安装基本软件

software-properties-common安装
python版本更新
pip安装及更新
MySQL8.0安装
git(传项目,用filezilla等也可以,这里我们用GitHub,另外settings.py不建议放上GitHub,这里仅是做个演示,所以没有分离上传)
virtualenv 安装

tips:这里为了演示django的本地虚拟服务器,暂时先不安装apache2

项目准备

从GitHub上clone项目
创建virtualenv虚拟环境,并安装相关依赖

项目部署

apache2安装
wsgi安装及更新
编写配置文件.conf
激活网站
收集静态文件(这一步当然也可以放在前面)

主要思路以上

一、服务器安装基本软件

1.安装software-properties-common及python更新

Ubuntu初始的python版本是2.7和3.5,这里我们要更新成3.6,并更换软链接
先更新

sudo apt-get install software-properties-common //管理软件库
sudo apt-add-repository ppa:jonathonf/python-3.6  //加入python3.6
sudo apt-get update //更新列表
sudo apt-get install python3.6

更改软连接

cd /usr/bin
sudo rm python
sudo ln -s python3.6 python 
sudo rm python3
sudo ln -s python3.6 python3

2.pip安装及更新

sudo apt-get install python3-pip //安装完后是8.1.1,指向python 3.6,pip需要升级

pip3 list  //可查看已安装依赖

pip3 install --upgrade pip  //升级,升级之后有个很神奇的地方,只能使用pip而不能使用pip3了
                            //例如输入pip -V或pip3.6 -V会显示18.1版本,而输入pip3 -V会报错。
                           //但是断开链接重新登录就三个命令都能用了。

3.MySQL安装

这里不使用sudo apt-get install mysql-server安装,因为它默认装5.7的版本,这里装MySQL8.0
这是官网apt链接https://dev.mysql.com/downloa…,点击download后进去新的页面右键复制链接地址

《Django + Apache 部署》

把软件包放到/home/ubuntu目录里吧

cd /home/ubuntu
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb //获得软件包,这个链接正是
                                                                 //复制来的链接                                                  

《Django + Apache 部署》

这是下载好的软件包,接下来dpkg,然后选择配置吧

sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

配置都选8.0,确定完两个配置后最后选ok
《Django + Apache 部署》

更新软件列表并安装MySQL

sudo apt-get update
sudo apt-get install mysql-server

接着输入密码,选择加密方式就ok了,这里加密方式我选择第一个

4.git和virtualenv安装

sudo apt-get install git
pip3 install --user virtualenv

二、项目准备

这里步骤都很简单

1.从GitHub上clone项目

我们把项目放到/home/ubuntu下

cd /home/ubuntu
git clone https://github.com/Joeoeoe/mysite.git

2.创建虚拟环境,安装依赖

虚拟环境创建到/home/ubuntu下,取名为mysite_env,并且激活进入虚拟环境

virtualenv mysite_env
source mysite_env/bin/activate

显示如下表示我们已进入虚拟环境

《Django + Apache 部署》

通过pip list命令可以看见我们此环境下只有基本依赖

《Django + Apache 部署》

接着安装依赖,这里有一个非常方便的方法,就是使用项目中的**`requirements.txt中

cd /home/ubuntu/mysite
pip install -r requirments.txt

pip list之后就可以查看我们已安装的依赖了

《Django + Apache 部署》

ok,接下来进入MySQL创建我们的数据库blog_db

CREATE DATABASE `blog_db` CHARACTER SET utf8 COLLATE utf8_general_ci;

然后到项目目录下完成迁移,并启动虚拟服务器

$python manage.py makemigrations
$python manage.py migrate
$python manage.py runserver 0.0.0.0:8000

输入你的ip地址加端口号

《Django + Apache 部署》
正常情况下会看到这个页面

《Django + Apache 部署》
这时我们得在settings.py中添加允许的http_host

ALLOWED_HOSTS = ["*"]

要限定host的话自己更改吧

再次启动虚拟环境,访问ip地址加端口号,按我的项目,因为没有首页,所以会显示如下

《Django + Apache 部署》

我有写一个test_view接口进行测试,加上/test_view/,接着会显示Django REST framework的接口界面

《Django + Apache 部署》

ok,到这里没问题的话,多数环境和依赖已经都安装完成了。接下来是部署激活阶段了。

三、部署激活

1.安装apache2和mod_wsgi

安装apache是没什么问题的,这里比较麻烦的是mod_wsgi

sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi-py3

安装完这两个后,我们看看坑点在哪里

cd /usr/lib/apache2/modules

到此目录下查看内容,会发现

《Django + Apache 部署》
mod_wsgi.so模块是软链接,并且指向mod_wsgi.so-3.5,这里说实话不清楚是什么原因,如果没有对这个模块进行更新的话,部署时会出错,这时要从mod_wsgi官网下载源代码进行安装,官网下载链接放在文末

//需要安装apache和python对应dev包
sudo apt-get install apache2-dev
sudo apt-get install python3.6-dev

寻着mod_wsgi官网到GitHub上找到下载链接

《Django + Apache 部署》

wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.5.tar.gz //放到/home/ubuntu目录下后进行解压
tar xvfs 4.6.5.tar.gz
cd mod_wsgi-4.6.5/  //这是解压出来的文件

可以看到里面有个.configure脚本,它可以用来进行安装配置,运行此脚本会在系统中寻找apxs或apx和python并提供合适的安装配置,但是由于版本或系统的原因,这里最好手动指定路径

whereis apxs
whereis python

这里我apxs的路径为/usr/bin/apxs
python使用的是3.6,所以选择/usr/bin/python3.6
运行.configure脚本,不同地址对应换一下就好了

./configure --with-apxs=/usr/bin/apxs --with-python=/usr/bin/python3.6
make //编译,若安装失败,记得先执行make clean
sudo make install

看看mod_wsgi.so有没有更新

ls /usr/lib/apache2/modules/

《Django + Apache 部署》
嗯,现在不是软链接了,接下来编写网站配置文件

2.编写网站配置文件

cd /etc/apache2/sites-available
sudo vim mysite.conf

因为使用了virtualenv和mod_wsgi daemon mode(守护进程模式),所以配置多了一点点

<VirtualHost *:80>
  #访问网站以哪个目录开始,第二个参数填写路径
  WSGIScriptAlias / /home/ubuntu/mysite/mysite/wsgi.py  
  <Directory /home/ubuntu/mysite/mysite>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>
  #开放静态目录
  Alias /static/ /home/ubuntu/mysite/static/
  <Directory /home/ubuntu/mysite/static>
    Require all granted
  </Directory>

  #开放上传文件夹
  Alias /media/ /home/ubuntu/mysite/media/
  <Directory /home/ubuntu/mysite/media>
    Require all granted
  </Directory>

  #以下开始是因为使用了virtualenv部署
  #第一个路径是虚拟环境路径,第二个是项目所在路径
  WSGIDaemonProcess mysite python-home=/home/ubuntu/mysite_env python-path=/home/ubuntu/mysite
  #分组
  WSGIProcessGroup mysite
</VirtualHost>

保存退出

sudo a2ensite mysite.conf //激活
sudo a2dissite 000-default.conf //关闭自身站点
apache2ctl configtest //检查配置有无问题,有的话自行解决
sudo apache2ctl restart

虽然还没有收集静态文件,但这时已经可以通过公网访问了

《Django + Apache 部署》

接下来做一下收集静态文件的操作就好了

3.静态文件收集

settings.py中添加此代码,让静态文件都收集到此目录下

STATIC_ROOT = '/home/ubuntu/mysite/static/'

虚拟环境装了django,虚拟环境下运行命令

python manage.py collectstatic

刷新网页,现在就ok了!完,附参考学习资料

《Django + Apache 部署》

参考资料:

杨老师b站Django教程主页:
https://space.bilibili.com/25…

Django静态文件部署
https://docs.djangoproject.co…

apache部署Django
https://docs.djangoproject.co…

mod_wsgi官网快速安装指南
https://modwsgi.readthedocs.i…

    原文作者:Jonithan
    原文地址: https://segmentfault.com/a/1190000017150991
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞