Apache部署python框架web项目

安装Apache和mod_wsgi

1
2
yum install httpd
yum install mod_wsgi

Django

配置wsgi.conf

1
vim /etc/httpd/conf.d/wsgi.conf

配置清单1:

1
2
3
4
5
6
7
8
LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias / "/var/www/html/5/tiejie/wsgi.py"

<Directory "/var/www/html/5/tiejie">
Order Deny,Allow
Allow from all
</Directory>

配置里分别指定了mod_wsgi的执行文件,mod_wsgi的配置文件,网站文件夹的存放位置。
这里路径一定要匹配正确。
大体上是对mod_wsgi的配置,apache的工作路径已经在主配置文档里固定好了。这是和nginx的区别之一。

配置wsgi.py

1
2
3
4
5
6
7
8
import sys
import os
sys.path.append('/var/www/html/5/tiejie')
sys.path.append('/var/www/html/5')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

这里的配置文件和N+U的配置基本一致。

配置静态文件

如果现在启动服务,网站是可以运行的,只是css+js+img都会失效。我们要想办法让主程序找到静态文件的位置。
处理这种事儿,在生产环境中,最好交给webserver,这里就由apache负责了。

对配置清单 1 扩充:

1
2
3
4
5
6
7
8
9
10
11
Alias /static "/var/www/html/5/static"
<Directory "/static">
Order Deny,Allow
Allow from all
</Directory>

Alias /media "/var/www/html/5/media"
<Directory "/meidia">
Order Deny,Allow
Allow from all
</Directory>

配置phpmyadmin

这个服务也是需要apache的,怎样使服务和网站不冲突而能正常使用呢?
其实同上理,在配置单 1 里指定路径就可以了。

1
2
3
4
5
Alias /phpmy "/var/www/html/phpMyAdmin"
<Directory "/var/www/html/phpMyAdmin">
Order Deny,Allow
Allow from all
</Directory>

启动生产环境 service httpd start,从浏览器输入主机名,可以看到网页了哦。

bottle

/var/www/bottle-app/ 新建文件

app.py

1
2
3
4
from bottle import route, run
@route('/')
def index():
return 'Hello!'

service.wsgi

1
2
3
4
5
import os,sys,bottle
sys.path = ['/var/www/bottle-app/'] + sys.path
os.chdir(os.path.dirname(__file__))
import app
application = bottle.default_app()

编辑Apache的配置文件

1
2
3
4
5
6
WSGIScriptAlias /bottle /var/www/bottle-app/service.wsgi
WSGIScriptReloading On
<Directory /var/www/bottle-app>
Order deny,allow
Allow from all
</Directory>

Flask

/var/www/flask-app 新建文件

myapp.py

1
2
3
4
5
6
7
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()

编写service.wsgi

1
2
3
import sys
sys.path.insert(0, '/var/www/flask-app')
from myapp import app as application

编辑Apache配置文件与bottle完全同理,此处略过

web.py

用pip2.7安装web.py,并做好相关配置。

/var/www/webpy-app/目录新建文件

code.py

1
2
3
4
5
6
7
8
import web
urls = (
'/.*', 'hello',
)
class hello:
def GET(self):
return "Hello, world."
application = web.application(urls, globals()).wsgifunc()

在Apache配置文件加入如下一段代码

1
2
3
4
5
6
7
8
LoadModule wsgi_module modules/mod_wsgi-py27.so
WSGIScriptAlias /webpy /var/www/webpy-app/code.py/
Alias /webpy/static /var/www/webpy-app/static/
AddType text/html .py
<Directory /var/www/webpy-app/>
Order deny,allow
Allow from all
</Directory>