[英]How to deploy Python Flask app to Apache (Httpd) running on Amazon Linux EC2 instance
我真的在這里掙扎。 我有一個簡單的Python Flask REST API,我已經開發了。 API在我的本地開發環境(Mac OS X)中運行良好,並且在我的EC2實例上通過控制台直接執行。
我想將此服務轉移到生產中,因此希望將其托管在EC2實例上運行的Apache之后。 這是我不斷碰壁的地方,我似乎無法通過配置和錯誤。 我在網上研究了幾篇文章和問題,似乎沒有人能夠幫助我。
我希望有人在這里可以為我提供有關如何在Amazon Linux EC2實例上運行的Apache后面部署我的服務的分步指導。
以下是我采取的步驟:
現在我知道我的實例正在運行,我想創建兩個文件夾,我可以測試並運行我的Python Flask代碼。 我這樣做如下:
現在這是我被絆倒的地方。 我的目標是能夠訪問api.example.com並讓我的服務根加載。 在下面的示例代碼中,“Hello,World!” 應該只是顯示。
我按照這里找到的教程沒有運氣。
http://peatiscoding.me/geek-stuff/mod_wsgi-apache-virtualenv/
http://webpy.org/cookbook/mod_wsgi-apache
http://www.jakowicz.com/flask-apache-wsgi/
執行上述任何文章中的任何步驟后,我都會收到一個HTTP錯誤頁面,並且不再加載任何內容,包括默認的Amazon Linux AMI測試頁面。 以下是我更改過的代碼和配置。 我沒有改變我的httpd.conf ......我應該嗎? 可能還有其他一些我缺少的東西。
有人可以幫我提供詳細的必要步驟來糾正我的錯誤嗎?
提前謝謝了!
當我查看HTTPD的error_log時,它會列出如下錯誤:
mod_wsgi (pid=8270): Target WSGI script '/var/www/rest-dev/deploy.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=8270): Exception occurred processing WSGI script '/var/www/rest-dev/deploy.wsgi'.
Traceback (most recent call last):
File "/var/www/rest-dev/deploy.wsgi", line 16, in <module>
from app import app as application
File "/var/www/rest-dev/app.py", line 2, in <module>
from flask import Flask
ImportError: No module named flask
這是我的deploy.wsgi文件,位於rest-dev文件夾中:
import os
import sys
import site
# Add virtualenv site packages
site.addsitedir(os.path.join(os.path.dirname(__file__), 'env/local/lib64/python2.7/site-packages'))
# Path of execution
sys.path.append('/var/www/rest-dev')
# Fired up virtualenv before include application
activate_env = os.path.expanduser(os.path.join(os.path.dirname(__file__), 'env/bin/activate_this.py'))
execfile(activate_env, dict(__file__=activate_env))
# import my_flask_app as application
from app import app as application
這是我在/etc/httpd/conf.d/中的vhost.conf文件
<VirtualHost *:80>
ServerName api.example.com
WSGIDaemonProcess webtool user=ec2-user group=www threads=5 home=/var/www/rest-dev/
WSGIScriptAlias / /var/www/rest-dev/deploy.wsgi
<directory /var/www/rest-dev>
WSGIProcessGroup webtool
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Order deny,allow
Allow from all
</directory>
</VirtualHost>
這是我的app.py示例服務代碼供參考:
#!env/bin/python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
事實證明,在我的deploy.wsgi文件中,我引用的是lib64,而不僅僅是lib 。 所有站點包都存在於lib中 。
更改它並重新啟動Apache后,我能夠從URL成功訪問我的服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.