参考http://code.ziqiangxuetang.com/django/django-deploy.html
服务器是Ubuntu系统,其实按照上面的教程正常情况很快就能搭建成功,但是有时候就是不正常。。。没办法,各种报错
下面一步一步道来:
在服务器上搭建Django和本机上是一样的
搭建Django环境
这里我是下载好Django安装包,然后传到服务器上的(服务器上下载巨慢),然后使用下面语句
tar -xvf django-1.11.4.tar.gz
cd django-1.11.4
(sudo) python3 setup.py install
这里因为我的项目是用python3写的,因此安装时使用python3,然后直接就报错了,找到不xxx文件,这个提示我要安装setuptools,然后我又下载好setuptools安装包后,安装时,又提示要求python环境必须至少为python3.4;于是我查了一下我python3的版本为3.2
然后使用
apt-get install python3
怎么安装都是python3.2,我第一想到的就是下载一个python3.6的安装包,然后下好了,各种修改,什么软链接啊,什么pip,setuptools等等,最后也没有搞好…
于是想到使用apt-get update
这下问题出现了,如下:
GPG error: http://repo.bcm.baidubce.com all Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY
这个问题我查了好长时间,才发现百度云服务器下载使用的是百度的镜像,然后查找下载源,最后将sources.list全部修改为其他的源,再次使用apt-get update
发现前面几行还是在使用百度云获取,后面才使用其他源,这个我也无能为力了,然后我想试试
apt-get install python3
结果安装了python3.4,说明其他源还是有效的,我以为下面就好了,结果运行Django项目时,报错,要下载xxx包,这个我需要下载pip,使用sudo apt-get install python3-pip
,使用pip3时,又报错:
pkg_resources.DistributionNotFound: pip==1.5.4
查到的结果是需要执行如下语句:
sudo easy_install pip==1.4.1
但是悲剧的时这个easy_install还区分2和3,我没有python3的easy_install,只有2的,继续查找下载easy_installs
使用下面的安装成功了:
sudo apt-get install python3-setuptools
sudo easy_install3 pip
至此,全是python2和python3的问题解决了
部署到Apache
有个问题出现了:Django自己就可以运行,为什么要部署到Apache上呢?
知乎上有解答:https://www.zhihu.com/question/35540397
Django是给开发者调试使用的,各方面性能都不如Apache
继续。。。。
安装apache2和mod_wsgi
sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi-py3
新建网址配置
这里我命名为mysite.conf
sudo vi /etc/apache2/sites-available/mysite.conf
具体如下
<VirtualHost *:80>
ServerName 182.34.34.23
#ServerAlias otherdomain.com
#ServerAdmin youremail@gmail.com
#Alias /media/ /var/www/ProjectName/media/
# 静态文件(js/css/images)的存放位置
Alias /static/ /var/www/mysite/learn/static/
# 允许通过网络获取static的内容
<Directory /var/www/mysite/learn/static/>
Order allow,deny
allow from all
</Directory>
# 最重要的!通过wsgi.py让Apache识别这是一个Django工程,别漏掉前边的 /
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
# wsgi.py文件的父级目录,第一个ProjectName为Django工程目录,第二个ProjectName为Django自建的与工程同名的目录
<Directory /var/www/mysite/mysite/>
<Files wsgi.py>
Order allow,deny
allow from all
</Files>
</Directory>
</VirtualHost>
这个上面的ServerName需要改成自己服务器的IP或者域名
然后是修改wsgi.py 这个见参考网址
最后是激活网站
sudo a2ensite sitename 或 sudo a2ensite sitename.conf
重启服务器
sudo service apache2 restart
当然这个也不是一帆风顺,但都是一些小问题
最后访问
也出了如下问题:
DisallowedHost at /
Invalid HTTP_HOST header: ‘xxxxxx:8000’. You may need to add u’xxxxxx’ to ALLOWED_HOSTS.
这个在setting.py中的ALLOW_HOSTS=[]中添加* 即可
如果要在views.py中读取文件,路径取服务器的根路径:
比如我将项目mysite放在服务器的/var/www目录下,想要读取项目mysite下的all.json文件,如此用:with open(“/var/www/mysite/all.json”,’r’) as f:
完!