Python部署Linux应用,如何将Python Flask应用程序部署到在Amazon Linux EC2实例上运行的Apache(Httpd)...

我真的在这里挣扎 . 我有一个简单的Python Flask REST API,我已经开发了 . API在我的本地开发环境(Mac OS X)中运行良好,并且在我的EC2实例上通过控制台直接执行 .

我想将此服务转移到 生产环境 中,因此希望将其托管在EC2实例上运行的Apache之后 . 这是我不断碰壁的地方,我似乎无法通过配置和错误 . 我在网上研究了几篇文章和问题,似乎没有人能够帮助我 .

我希望有人在这里可以为我提供有关如何在Amazon Linux EC2实例上运行的Apache后面部署我的服务的分步指导 .

以下是我采取的步骤:

推出了基本的Amazon Linux EC2实例 .

对实例应用更新, sudo yum update

安装Apache和WSIG, sudo yum install httpd24 mod24_wsgi

启动Apache, sudo service httpd start

配置Apache自动启动, sudo chkconfig httpd on

点击我的EC2框的DNS进行测试 . 我成功获得了Amazon Linux AMI测试页面 .

如下调整/ var / www的权限

sudo groupadd www

sudo usermod -a -G www ec2-user

登录/关闭并确认会员资格, groups

sudo chown -R root:www /var/www

sudo chmod 2775 /var/www

find /var/www -type d -exec sudo chmod 2775 {} ;

find /var/www -type f -exec sudo chmod 0664 {} ;

通过点击我的EC2框的DNS进行测试 - 到目前为止仍然很好 .

现在我知道我的实例正在运行,我想创建两个文件夹,我可以测试并运行我的Python Flask代码 . 我这样做如下:

我创建了两个文件夹,一个用于开发,一个用于 生产环境 .

/ var / www / rest-dev /

/ var / www / rest-prod /

我在每个文件夹中设置了一个虚拟环境并安装了Flask .

virtualenv env

env/bin/pip install Flask

然后我在每个文件夹中放置了我的服务副本 .

然后我在app.py, chmod a+x app.py 上设置权限

我可以成功执行./app.py并通过点击DNS名称端口5000来测试服务 . 它可以工作 .

现在这是我被绊倒的地方 . 我的目标是能够点击 api.example.com 并让我的服务根加载 . 在下面的示例代码中,应该只显示"Hello, World!" .

我按照这里找到的教程没有运气 .

执行上述任何文章中的任何步骤后,我都会收到一个HTTP错误页面,并且不再加载任何内容,包括默认的Amazon Linux AMI测试页面 . 以下是我更改过的代码和配置 . 我没有改变我的httpd.conf ......我应该吗?可能还有其他一些我缺少的东西 .

Can someone please help me by providing me the necessary steps in detail to correct my mistakes?

提前谢谢了!

当我查看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

from app import app as application

File "/var/www/rest-dev/app.py", line 2, in

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文件

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

WSGIProcessGroup webtool

WSGIApplicationGroup %{GLOBAL}

WSGIScriptReloading On

Order deny,allow

Allow from all

这是我的 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值