我正在尝试使用Apache运行一个简单的python服务器,其中REST API和Connexion / Flask内置在远程Linux服务器上(绑定到服务器公共IP地址)。 (服务器正在运行Ubuntu 16.04.5 LTS,python代码是用Python 3.7编写的)
以下是服务器实现的一些文件:
server.朋友:
import connexion
app = connexion.App(__name__, specification_dir='./')
app.add_api('swagger.yml')
if __name__ == "__main__":
app.run(host='127.0.0.1', port=5000, debug=True)
swagger.yaml:REST API的规范,我已经通过在localhost上运行测试了它并且它正常工作。 (基本路径是/ api)
opertations.py:API的函数取决于响应
我的目标是在远程Linux服务器上运行服务器,任何知道服务器公共IP地址的人都可以调用API。例如,如果公共IP地址是xxx.xx.xx.xxx,则用户应该能够调用以下URL来检索数据:
http://xxx.xx.xx.xxx:<port>/api/<operation_name>?<query_parameters>
到目前为止,我能够从客户端调用API(在服务器上的localhost上运行)和SSH端口转发以及ngrok(它们提供到服务器localhost的隧道),但这些不是我想要的。
我是创建自己的Web服务器的新手,我一直在研究Apache以及它如何与VirtualHosts等一起工作但是我找不到如何设置它以便它将python服务器绑定到公共IP地址的Linux服务器。
执行此操作的最佳方法是在apache Web服务器中使用mod_wsgi
例:
烧瓶app在/var/www/api/app.py
Apache配置(/etc/apache2/sites-enabled/500-api.conf)
WSGIDaemonProcess app threads=5 home=/var/www/api/
WSGIScriptAlias /api /var/www/api/app.wsgi
<directory /var/www/api/>
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Order deny,allow
Allow from all
</directory>
WSGI文件 - 调用你的烧瓶应用程序(/var/www/api/app.wsgi)
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
sys.path.append('/var/www/api')
from app import app as application