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

 

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

cd /home/ubuntu

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

​​​​​​

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

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

配置都选8.0,确定完两个配置后最后选ok

更新软件列表并安装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

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

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

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

cd /home/ubuntu/mysite

pip install -r requirments.txt

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

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


正常情况下会看到这个页面


这时我们得在settings.py中添加允许的http_host

ALLOWED_HOSTS = ["*"]

要限定host的话自己更改吧

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

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

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

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


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上找到下载链接

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/


嗯,现在不是软链接了,接下来编写网站配置文件

 

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

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

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

3.静态文件收集

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

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

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

python manage.py collectstatic

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

参考资料:

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值