前言
为了将django挂载在apache上。我为之奋斗了1个星期的休息时间。关于怎么挂载,网上有太多的教程博客,但质量都不高,大多数博客的目的都是为了让自己以后的记得,而不是教会别人怎么从零学起。同时python2和python3的版本问题,apache2.2之前和之后的问题各种版本相互之间不兼容,使我挂载在apache2上踩了太多的坑,几度崩溃。。。在这里建议新手的环境要尽量与自己找的教程一致,先照模照样跑起来再想着根据自己需要做修改。当眼前的教程卡住了时找其他教程,也要先看一下其他教程的环境是什么样的,不然装错了版本,想要卸载,又卸不干净是很麻烦的。同时严谨检查自己的输入,因为各种配置都是靠修改配置文件完成的,一个疏忽少数一个字母符号,就可以让你耽误好久
环境
我的环境是bandwagon 上ubuntu16.04 django1.10.5 python3.5 apache2.4.18
查询ubuntu版本命令
sudo lsb_release -a
查询python命令
python3 -V
查询django命令
python3 -m django --version
查询apache2版本命令
apachectl -v
理论上只要是ubuntu 14以上系统,python3.x,django 1.1x ,apache2.2-apache2.4都可以参考
确保你使用 python3 manage.py runserver 0.0.0.0:8000
这样的命令后,网站能够正常访问。
正题
apache2安装与配置
1.安装apache2
sudo apt-get install apache2
查看端口配置文件
vi /etc/apache2/port.conf
如果你的网站还想使用其他端口8081,则需要在这里后面加入一行 Listen 8081 (坑)
浏览器访问xx.xx.xx.xx:80 ,看到apache的界面it works 说明apache2服务器跑起来了。
ps:如果你使用的是虚拟机,想使用localhost:8080访问,那么你还要查看
vi /etc/hosts
确保有127.0.0.1 localhost,没有就加上。
然后访问localhost:8080 即可
2.安装apache2解析python的包
sudo apt-get install libapache2-mod-wsgi-py3
(坑:此处如果你是py2开发的话去掉上述命令最后的“-py3”)
配置使apache2加载mod-wsgi包
vi /etc/apache2/apache2.conf
在最后加上
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-3.5
注意,我使用python3.5 所以引用的包是mod_wsgi.so-3.5(坑)
(如果你不是python3.5那么进入到/usr/lib/apache2/modules/文件夹去看,找到自己python版本的包)
3.建立自己网站的配置文件
vi /etc/apache2/sites-available/mystation.conf
(mystation是名字,可以自行定义)
配置内容
# 建立一个虚拟机,指定8080端口
ServerName xx.xx.xx.xx #定义网站的名字,可随意填
ServerAlias xx.xx.xx.xx #定义别名,可随意取
ServerAdmin [email protected] #定义邮箱,随意填
Alias /static/ /home/my_station/static/#定义你静态文件的路径,具体后面会讲
#你项目的文件夹,注意这个文件夹是里面含有manage.py的那个文件夹。
Require all granted
WSGIScriptAlias / /home/my_station/movie_station/wsgi.py #这个文件夹是含有wsgi.py的文件夹
Require all granted #设置权限
Require all granted #设置静态文件目录权限
(坑)搬瓦工vps默认是在/root/文件夹下建立网站文件夹的,但是/root/文件夹,apache2是没有访问权限的,如果你配置里面用的是/root/文件夹下的目录,而且没有开启权限的话,就会出现浏览网站时出现访问被拒绝的页面。所以建议你将网站文件移到/home/目录下
4.修改wsgi.py文件
将以下内容复制,
import os
PROJECT_DIR = os.path.dirname(os.path.dirname(__file__))#3
import sys # 4
sys.path.insert(0,PROJECT_DIR) # 5
os.environ["DJANGO_SETTINGS_MODULE"] = "my_station.settings" # 7
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
my_station.settings点号前为你自己网站项目的名字,通常就是项目的文件夹名
5.激活网站
a2ensite mystation.conf
其中 mystation 这个是你conf的文件名,启用网站
6.重启apache
sudo /etc/init.d/apache2 restart
重启apache2 浏览 xx.xx.xx.xx:8080如果顺利的话,你将看到你的网站出现了。
看到你的网站出现后,有些静态文件如css、js还没有加载,所以显示比较乱。
配置静态文件
在你项目的settings.py文件中加入
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
定义你的静态文件根目录在哪里
然后执行
sudo python managy.py collectstatic
将所有静态文件复制到根目录下
配置网站配置文件
vi /etc/apache2/sites-available/mystation.conf
Alias /static/ /home/my_station/static/ #定义你静态文件的路径
Require all granted #设置静态文件目录权限
坑:注意Alias的文件目录后面是有 / 而
中途卡壳出现问题怎么办?
查看错误日志error.log
vi /var/log/apache2/error.log
看文件最后的error记录,然后去百度吧。我用了一个星期,你肯定比我厉害