Django + Apache 部署

吐吐槽

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

用于部署的项目demo主要用了Django REST framework 提供后台api,因此静态文件仅有Django REST framework部分的。可是部署过程基本是同样的python

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

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

过程当中的坑点尽可能指出github

环境

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

思路

如下是部署思路数据库

服务器安装基本软件

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

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

项目准备

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

项目部署

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

主要思路以上

1、服务器安装基本软件

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后进去新的页面右键复制连接地址

clipboard.png

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

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

clipboard.png

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

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

配置都选8.0,肯定完两个配置后最后选ok
clipboard.png

更新软件列表并安装MySQL

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

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

4.git和virtualenv安装

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

2、项目准备

这里步骤都很简单

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

显示以下表示咱们已进入虚拟环境

clipboard.png

经过pip list命令能够看见咱们此环境下只有基本依赖

clipboard.png

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

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

pip list以后就能够查看咱们已安装的依赖了

clipboard.png

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地址加端口号

clipboard.png
正常状况下会看到这个页面

clipboard.png
这时咱们得在settings.py中添加容许的http_host

ALLOWED_HOSTS = ["*"]

要限定host的话本身更改吧

再次启动虚拟环境,访问ip地址加端口号,按个人项目,由于没有首页,因此会显示以下

clipboard.png

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

clipboard.png

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

3、部署激活

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

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

clipboard.png
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上找到下载连接

clipboard.png

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/

clipboard.png
嗯,如今不是软连接了,接下来编写网站配置文件

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

虽然尚未收集静态文件,但这时已经能够经过公网访问了

clipboard.png

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

3.静态文件收集

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

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

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

python manage.py collectstatic

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

clipboard.png

参考资料:

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

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

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

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

相关文章
相关标签/搜索