Flask是非常简单易用的一个python后端框架,非常适合用来快速开发小规模的后端程序。然而在对Flask开发的后端进行部署时,虽然Flask本身支持使用app.runthreaded=True, host='0.0.0.0',)
实现多线程运行,但依然无法实现较高的性能表现。这种时候我们就需要将Flask应用部署到专业的后端服务器,例如使用MOD_WSGI将该应用部署至Apache HTTP Server下。
本文假设读者已经熟悉使用Python+Flask编写后端应用的的经验。如果不熟悉请先阅读Flask quick start。
在已有Flask app的情况下,首先我们需要安装所需的包,如下所示:
# 对于基于red hat或者Fedora这样的RPM-based OS,运行如下命令
sudo yum install mod_wsgi
# 对于Debian/Ubuntu,运行如下命令
sudo apt-get install apache2 libapache2-mod-wsgi
然后我们需要使用python-pip在系统目录下或者virtualenv虚拟环境中安装后端应用所需的所有依赖:
sudo pip install {package-name}
准备就绪之后,将我们的后端程序整个儿复制到/var/www/
路径下:
sudo cp -r /path/to/app-root /var/www/
.wsgi
文件接下来,打开/var/www/app-root/
,在我们的后端应用的根目录下,为了兼容Apache HTTP Server,我们需要创建一个.wsgi
文件,该文件非常简单,仅仅是为了创建可被mod_wsgi调用的application:
# 下面两行是为了将当前路径添加到系统路径中从而保证import不抛异常
import sys
sys.path.insert(0, '/var/www/app-root')
from SQLbackend import app as application
为了使我们的应用能够在Apache HTTP Server下被运行,我们需要将如下所示的配置添加到/etc/httpd/conf/httpd.conf
文件中(路径以rpm-based os为例):
80>
ServerName {name-of-your-server}
ErrorLog logs/error-log-file-name
CustomLog logs/custom-log-file-name
ServerAdmin {admin-email}
WSGIDaemonProcess {custom-name} processes={num-of-processes} threads={num-of-threads} display-name=%{GROUP} python-path=/var/www/root-app/
WSGIProcessGroup {custom-group-name}
# WSGIScriptAlias只用在网站地址hostname部分后面url部分的地址,例如如果我们的网站地址为example.com,则将WSGIScriptAlias设为/的话,任何访问example.com的请求都将被当前应用处理。若将Alias设为/some-alias,则只有访问example.com/some-alias/的请求会被当前应用处理。
WSGIScriptAlias / /var/www/app-root/app-name.wsgi
Order allow,deny
Allow from all
最后我们只需要重新启动Apache HTTP Server即可:
# 对于rpm-based OS
sudo service httpd restart
# 对于ubuntu
sudo a2enmod wsgi
audo service apache2 restart
然后就可以在浏览器中访问我们的后端应用了。