十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
文档的时效性 平台环境 软件环境 目标的目录配置 主机域名等的设置 ... 这些的不同,造成软件的部署过程总是磕磕绊绊。为了降低挫折感,本文通过分步骤试验逐渐实现最终目标。
谯城网站建设公司创新互联公司,谯城网站设计制作,有大型网站制作公司丰富经验。已为谯城近1000家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的谯城做网站的公司定做!软件环境:
ubuntu 12.04 64位 python 2.7.3 django 1.5.1 apache 2.2 mod_wsgi 3.3
目标:
在 ~/firstdj 中建立一个django项目 使用 apache wsgi 方式提供web服务 通过 http://firstdj/ 访问hello页面
准备:安装需要的软件
这个比较简单,没什么特别注意的。 # 安装 apache2 $ sudo apt-get -y install apache2-mpm-worker apache2-dev # 安装 python $ sudo apt-get -y install python python-dev python-setuptools # 安装 python 的辅助软件 $ sudo easy_install virtualenv virtualenvwrapper pip
实验一、使用apache2提供静态页面
目的: 验证 apache2的安装 配置虚拟主机 apache 预备知识 可执行程序 /usr/sbin/apache2 配置文件目录 /etc/apache2/ 网站(web)文件目录 /var/www 这个可以配置,修改 /etc/apache2/sites-available/default 这个文件的下面的字段 DocumentRoot /var/www ,比如你改到/var/temp 那么就把这行改成: DocumentRoot /var/temp 配置文件并不是在httpd.conf里面,而是apache2.conf,而这里面并没有配置所有的东西,如端口是在ports.conf这个文件里面,而网站的根目录是在 /etc/apache2/sites-available/default 这个文件中。 虽然也有httpd.conf这个文件,但是httpd.conf里面是空的,其实你可以在这里面加一些配置,因为apache2.conf里面会把httpd.conf加到它的文件里面。 操作思路 修改主机名字为 firstdj ,作为域名 禁用系统默认的 default 虚拟站点 建立一个最简化的虚拟主机,使用 http://firstdj/ 访问。 具体步骤 修改主机名 通过修改/etc/hostname把主机名改为 firstdj ,为了清晰,进入root账户)。 $ sudo su # echo "firstdj" > /etc/hostname # echo -e "n127.0.0.1 firstdj.local firstdjn" >> /etc/hosts # hostname -F /etc/hostname 默认这个时候已经能够在 http://firstdj/ 访问了。如果你能够看到 It works! 页面,说明 apache2 安装正常。否则检查 apache2 是否在运行: $ sudo su # service apache2 status # 查看状态 # service apache2 start # 启动 # service apache2 stop # 停止 # service apache2 reload # 重新应用配置文件 # service apache2 restart # 重新启动进程 配置虚拟主机 虽然这时候能够访问 http://firstdj/ ,但实际上是ubuntu系统本身安装后给的默认配置 $ cd /etc/apache2 # 进入 apache2 的配置目录 $ ls ./sites-enabled # 查看当前生效的站点 返回 000-default , 这是ubuntu默认启动的站点 $ sudo su # a2dissite default # 取消默认站点 default 这时候sites-enabled目录下没有文件 # service apache2 reload # 使配置生效 现在刷新一下 http://firstdj/ ,应该已经不能访问了。现在 /etc/apache2/sites-available/ 目录下,建立一个名为 firstdj 的文件,为了清晰,我尽量进行了删减,具体内容如下:
实验二、安装配置 wsgi 模块
操作思路 安装 wsgi 模块 配置一个简单的虚拟主机 具体步骤 安装 mod_wsgi 我为了省事,采用源安装,如果需要3.4版本,可以采用源码安装,参考这里。 wsgi主站 编译安装wsgi $ sudo apt-get install libapache2-mod-wsgi #安装 mod_wsgi $ sudo dpkg -l libapache2-mod-wsgi #查看wsgi的版本 结果: libapache2-mod 3.3-4build1 $ a2enmod wsgi #验证模块安装正常 Module wsgi already enabled 验证 wsgi 为了验证wsgi的正常使用,准备手工建一个最简单的wsgi应用,实际就是一个py脚本。 在 /var/www/目录下,建立一个名为 main.wsgi 文件,内容如下: def application(environ, start_response): status = \'200 OK\' output = \'Hello World!n试试中文\' response_headers = [(\'Content-type\', \'text/plain\'), (\'Content-Length\', str(len(output)))] start_response(status, response_headers) return [output] 在 /etc/apache2/sites-available/firstdj 中增加一行,同时可以取消 DocumentRoot 配置,修改后内容如下:
实验三、直接安装django
在实际生产环境,通常会使用 virtualenv 来支持多版本的python应用,但是同样也增了 wsgi 的配置复杂性,所以先进行最简单的试验。 目的: 在本机安装 django 配置 apache + wsgi 操作思路 在系统范围安装 django (不使用 VirtualEnv) 使用 wsgi 解析 django 跑通 django book 的 helloworld 例子. 具体步骤 安装 django $ sudo pip install django 系统默认会把 django 安装到 /usr/local/lib/python2.7/dist-packages 目录中 在 ~/目录建立一个 django 项目 $ cd ~ # 进入home目录 $ django-admin.py startproject firstdj # 建立一个 firstdj 项目 $ cd ~/firstdj $ python manage.py runserver # 启动django测试服务器 访问 http://127.0.0.1:8000/ ,能够看到 django 的 It Worked! 页面,说明django安装正常。 配置 wsgi 解析 django 1. 修改 django 项目的 ~/firstdj/firstdj/wsgi.py 文件 去掉注释后,默认的 wsgi.py 文件内容为: import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "firstdj.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() 增加 firstdj 项目的路径到系统路径,修改后完整的 wsgi.py 文件内容如下: import os import sys root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), \'..\')) sys.path.insert(0, os.path.abspath(os.path.join(root_path, \'firstdj\'))) sys.path.insert(0, root_path) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "firstdj.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() 2. 修改 apache2 的配置文件 /etc/apache2/sites-available/firstdj 更换文件中的 main.wsgi 为刚才修改的 wsgi.py , 修改后的内容是:
实验四、通过 virtualenv 使用 django
在刚才成功的基础上,使用 virtualenv 的方式使用 django,核心的问题是修改 ~/firstdj/firstdj/wsgi.py 文件,指定正确的。 目的: 配置 virtualenv 环境下的 django + apache + wsgi virtualenvwrapper 方式下的配置 操作思路 删除系统级的 django 在 ~/firstdj/ 目录下,配置 virtualenv 使 http://firstdj/ 生效 使用 virtualenvwrapper 方式 具体步骤 删除系统 django $ sudo pip uninstall django 在 ~/firstdj/ 目录下建立 venv 环境 $ cd ~/firstdj/ $ virtualenv venv 现在 ~/firstdj/ 目录下的结构是: /home/bl/firstdj |---venv | |---local | |---include | |---lib | | |---python2.7 | | | |---site-packages | | | | |---pip-1.3.1-py2.7.egg | | | | | |---EGG-INFO | | | | | |---pip | | | | | | |---commands | | | | | | |---backwardcompat | | | | | | |---vcs | | | |---distutils | |---bin |---firstdj 在新建的 venv 环境下安装 django $ cd ~/firstdj/ $ ~/firstdj/venv/bin/pip install django 把新建的 venv 环境下的python 包路径(~/firstdj/venv/lib/python2.7/site-packages/) 加入系统路径中。 1. 在 ~/firstdj/firstdj/wsgi.py 文件中增加一行,修改后内容如下: import os import sys root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), \'..\')) sys.path.insert(0, os.path.abspath(os.path.join(root_path, \'firstdj\'))) sys.path.insert(0, root_path) sys.path.insert(0, os.path.abspath(os.path.join(root_path, \'venv/lib/python2.7/site-packages/\'))) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "firstdj.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() 2. 重新应用 apache2 配置 $ sudo service apache2 reload 现在访问 http://firstdj/ ,又能够看到 django 的 This is django Hello World 页面。 最后一步就是在 virtualenvwrapper 环境下配置 wsgi , 和普通 virtualenv 的环境的唯一不同是virtualenvwrapper 的python 安装包路径默认在 ~/.virtualenvs 目录下,比如以环境名 ELC 为例,它的安装包路径是: /.virtualenvs/ELC/lib/python2.7/site-packages 相应的修改 ~/firstdj/firstdj/wsgi.py 文件,修改后内容如下: import os import sys root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), \'..\')) sys.path.insert(0, os.path.abspath(os.path.join(root_path, \'firstdj\'))) sys.path.insert(0, root_path) sys.path.insert(0, \'/home/bl/.virtualenvs/ELC/lib/python2.7/site-packages/\') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "firstdj.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() 再次重新应用 apache2 配置后,访问 http://firstdj/ ,又能够看到 django 的 This is django Hello World 页面。 增加django的静态链接 为了能够访问 django 的静态文件,比如各种模版,还需要在 /etc/apache2/sites-available/firstdj 中设置一些别名,最终完整的 apache2 虚拟站点通常是这个样子: