此篇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的本地虚拟服务器,暂时先不安装apache2
django
从GitHub上clone项目
建立virtualenv虚拟环境,并安装相关依赖ubuntu
apache2安装
wsgi安装及更新
编写配置文件.conf
激活网站
收集静态文件(这一步固然也能够放在前面)
主要思路以上
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
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会报错。 //可是断开连接从新登陆就三个命令都能用了。
这里不使用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了,这里加密方式我选择第一个
sudo apt-get install git pip3 install --user virtualenv
这里步骤都很简单
咱们把项目放到/home/ubuntu下
cd /home/ubuntu git clone https://github.com/Joeoeoe/mysite.git
虚拟环境建立到/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,到这里没问题的话,多数环境和依赖已经都安装完成了。接下来是部署
和激活
阶段了。
安装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/
嗯,如今不是软连接了,接下来编写网站配置文件
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
虽然尚未收集静态文件,但这时已经能够经过公网访问了
接下来作一下收集静态文件的操做就行了
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...