搭建Apache+Wsgi+Flask的环境
突然想去学习一个 Python 的 Web 框架,当然第一步是先配置一下可以运行 Python 代码的环境。
从搜索引擎转了一圈,选择从熟悉的地方入手——Apache+Wsgi+Python 成为了我的选择,而框架暂选 Flask,而配置居然花了一个晚上的时间(而且还有许多问题没有解决)。
以下都是在 CentOS 下的操作,也默认在 Python2.7.5 下操作
安装 Virtualenv
首先,参考文档:http://dormousehole.readthedocs.org/en/latest/installation.html 安装 Virtualenv,安装 Flask,一切正常 注意,建立的目录最好在之前网站的目录之下,比如/var/www/html/pythonTest
这样
安装 WSGI
然后安装 Wsgi,没想到直接用 yum 安装就可以
1 | yum install mod_wsgi |
如果没有的话,可以 i 从 github 下载 swgi:https://github.com/GrahamDumpleton/mod_wsgi/releases 然后编译安装:
1 | ./configure --with-python=/usr/local/bin/python2.7 |
(参考了http://www.cnblogs.com/shadowturtle/archive/2012/11/25/2787690.html)
配置 Apache
查看 Apache 的 moudle 目录(一般在/etc/httpd/moudles 下),发现其中多了一个 mod_wsgi.so 模块,说明安装成功。
然后打开 apache 的配置文件,一般在/etc/httpd/conf/conf.d 目录下,编辑加入以下代码(没有用虚拟主机)
1 | #Rules for WSGI |
Apache 还可以配置成虚拟主机,这里采用 8080 端口调试(需要在防火墙打开 8080 端口)
1 | Listen 8080 |
配置 WSGI
我的目录结构是这样的
1 | |---py |
其实现在有用的也只有 py.wsgi,编辑之
1 | import sys |
会输出 Hello Wsgi,Hello Flask 和 Python 的版本号 这时,WSGI 配置完成,可以从外部通过 Apache 访问 Python 搭建的网站
问题
不过,也出现了一些问题,就是如何让 WSGI 使用 Python3 来解析之后的文件。
本来以为是 Virtualenv 的问题,但是关闭之后,问题依旧。所以很可能是使用 Yum 安装时候导致的问题,这个问题留作以后解决。
Virtualenv 的简单使用方法
新建环境
1 | cd xxx 目录 |
默认情况下,虚拟环境会依赖系统环境中的 site packages,就是说系统中已经安装好的第三方 package 也会安装在虚拟环境中,如果不想依赖这些 package,那么可以加上参数 –no-site-packages。
启动环境
1 | source ./bin/activate |
退出环境
1 | deactivate |
次日更新
问题解决
后来查看 Apache 的 log 文件,发现是 WSGI 一直无法 import 其他文件,看来真的是因为我用 Yum 安装的 WSGI 有问题,解决方法如下: 用 Python2 的 pip 安装 WSGI
1 | python2 pip install mod_wsgi |
然后进入 WSGI 的目录
1 | cd /usr/lib64/python2.7/site-packages/mod_wsgi |
进入 server 文件夹,将 mod_wsgi-py27.so
复制到 Apache 的 modules
文件夹,替换原有的 WSGI
1 | cp mod_wsgi-py27.so /etc/httpd/modules/mod_wsgi.so |
操作成功。
接入 Flask 框架
还是按照配置 WSGI 时候的目录结构 在 py 目录下的init.py 中写入一个简单的测试网页
1 | from flask import Flask |
将 py.wsgi 文件内容改为
1 | import sys |
然后去访问服务器,发现显示了”Hello,Flask”,大功告成!