我在Windows下设置了Flask应用程序。在我的httd.conf文件中,我包含了我的应用程序的conf文件,它位于这样的目录中:
C:\prod\apps\my_app\
\my_app
my_app.conf
my_app.py
my_app.wsgi
\my_service
\my_data
\my_python_virtual_env
我能够在Apache中配置它并使用my_app.conf中的WSGIPythonPath的绝对路径使其正常运行。但是,我无法使用WSGIPythonPath的相对路径。基于上述结构,我认为它应该是这样的:
WSGIPythonPath ../my_app;../my_service;../my_data;../my_python_virtual_env
<Directory "/">
Require all granted
</Directory>
然而,这显然不是apache如何解释这些相对路径的根。我可以做什么,如果没有,还有关于如何使其发挥作用的任何其他建议吗?为部署到的各种环境配置一个conf文件会很棒。
答案 0 :(得分:1)
您需要详细了解WSGI和modwsgi如何与Apache协同工作以及最佳做法。
首先,您应该在隔离的virtualenv中构建Flask应用程序。这是任何基于Python的Web应用程序的最佳实践,无论是Flask,Django等等。使用pip管理您的包裹。谷歌这两个术语,你会得到关于如何做的多个教程。
然后,您应该将Flask应用配置放在专用端口上的Apache命名虚拟主机中。您需要确保WSGIDaemonProcess
包含指向Flask网站包的virtualenv特定python-path
变量。
您还应该创建一个系统Flask用户和组,以将Flask系统与其他所有系统隔离开来。这样更安全。
下面列出的是一个示例配置。注意我已经创建了一个特定的flask-main
用户和flask-main
组,我将所有流量指向我的Flask应用程序到端口8789.
#####
# START: Flask App
WSGISocketPrefix /var/run/wsgi
Listen 8789
NameVirtualHost *:8789
<VirtualHost *:8789>
DocumentRoot /path/to/www/
ErrorLog "/path/to/logs/httpd/flask-8789-error_log"
LogLevel info
ProxyRequests Off
WSGIDaemonProcess flask-main user=flask-main group=flask-main display-name=%{GROUP} python-path=/path/to/www:/path/to/lib/python2.6/site-packages
WSGIProcessGroup flask-main
WSGIScriptAlias / /path/to/www/mygateway.wsgi process-group=flask-main application-group=%{GLOBAL}
<Directory /path/to/www>
WSGIProcessGroup run
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Directory /path/to/www/static>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
我希望这能帮助你朝着正确的方向前进。