前几天搭建了python+django+pycharm的开发环境,做了一个博客,申请了一个免费的云主机和一个域名,先在自己的本机上部署,再转到云主机上
(1)开发环境:
ubuntu12.04 + python 2.7 + django 1.6 + pycharm 3.4
(2)安装mod_wsgi
首先,为什么选择mod_wsgi,而不是mod_python,很简单,一开始我也是用的mod_python,但是一直各种问题,在耽误了我5,6个小时后,我选择放弃,尝试mod_wsgi
在命令行下输入:apt-get install libapache2-mod-wsgi 安装mod_wsgi,查看一下啊是否安装成功:/usr/lib/apache2/modules/mod_wsgi.so
(3)配置一下apache的mod_wsgi组件
编辑配置文件:/etc/apache2/apache2.conf,在最后一行添加:
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
(4)编写项目的wsgi文件
文件根目录新建 django.wsgi 文件,其实.wsgi文件和python的.py是一样的文件,只是后缀不一样了而已,目录如下:/home/username/workspace/Blog/django.wsgi
import os import sys path = '/home/username/workspace/Blog' # 这个路径尤其尤其要注意,不然可能会提示 找不到 mysite.settings if path not in sys.path: sys.path.append(path) os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' from django.core.wsgi import get_wsgi_application application = get_wsgi_application()这里要注意,上网翻了多遍资料,包括官方的文档,都是这么写的:
import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()但其实可能是版本的问题,我的django版本是1.6的,会出现莫名奇妙的错误,最后改为:
from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
(5)将项目配置进apache
建议:项目用django的自带小服务器可以正常运行,避免部署上apache后出现问题
配置一下/etc/apache2/httpd.conf
ServerName localhost DocumentRoot /home/username/workspace #这里是你根目录的上级目录 WSGIScriptAlias / /home/username/workspace/Blog/django.wsgi # / 表示URL根路径,后面是你的项目wsgi文件地址 <Directory /home/username/workspace> Order allow,deny Allow from all </Directory>
搞定,现在重启一下你的apache: sudo /etc/init.d/apache2 restart
输入:locahost/admin 是不是进入后台了?
如果是win系统,没有问题,但是如果是linux系统,就会出现,permission denied,再次查阅了资料,大体的问题是 权限问题,linux系统的文件访问问题
chmod -R 777 /home/username/workspace
依然不行,这里有个取巧的方法,将整个项目搬进 /var/www 路径下,就可以解决问题,这个目录和apache是基友,问题解决
(6)关于静态文件的处理
locahost/admin 访问出现的是admin 的后台,但是没有样式,到 /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static 路径下去吧整个admin目录搬到
项目的 static 底下,admin的样式就搞定了
接着,要弄一下项目的静态文件(此时项目已经搬到 /var/www 下),整个 httpd.conf 文件如下
ServerName localhost # project's parent directory DocumentRoot /var/www WSGIScriptAlias / /var/www/Blog/django.wsgi #WSGIScriptAlias /test /var/www/test.wsgi <Directory /var/www> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> # 针对静态文件的处理 Alias /media/ /var/www/Blog/media/ Alias /static/ /var/www/Blog/static/ <Directory /var/www/Blog/static> Allow from all </Directory> <Directory /var/www/Blog/media> Allow from all </Directory>