如何使用Apache部署基于Python-Flask的后端服务器?

Flask

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 server

最后我们只需要重新启动Apache HTTP Server即可:

# 对于rpm-based OS
sudo service httpd restart

# 对于ubuntu
sudo a2enmod wsgi
audo service apache2 restart

然后就可以在浏览器中访问我们的后端应用了。

你可能感兴趣的:(Python,Python拾遗)