在 Heroku 上部署 Python Flask App



Flask
Flask 是一个用 Python 编写的 Web 应用程序框架。Flask 基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎。两者都是 Pocco 项目。本文围绕如何在 Heroku 上部署 Flask 应用程序展开。为了证明这一点,我们首先将创建一个示例应用程序以更好地了解该过程。
软件需求
Python
pip
Heroku CLI
Git
pipenv > pip + virtualenv
pipenv 主要有以下特性:  
pipenv 集成了 pip,virtualenv 两者的功能,且完善了两者的一些缺陷。  
过去用 virtualenv 管理 requirements.txt 文件可能会带来各种问题,pipenv 使用 pipfile 和 pipfile.lock,后者存放包的依赖关系,查看依赖关系是十分方便。  
使用哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞 
良好的跨平台支持。
pipenv的安装
pip3 install pipenv
在 Heroku 上部署 Flask App
首先创建一个简单的 Flask 应用程序,然后将其部署到 heroku。
此处假设我们在Heroku上创建的app名为:autoflask
创建autoflask目录,并进入该目录
mkdir autoflaskcd autoflask
使用 pipenv 创建虚拟环境并安装 Flask 和 Gunicorn。
pipenv install flask gunicorn
创建Procfile文件
echo "web gunicorn wsgi:app" >Procfile
创建runtime.txt文件(可选项)
echo "python-3.8.6" >runtime.txt
该文件用于指定Python的版本,heroku-18默认的是3.6.9,如果你觉得该版本够用,可以忽略runtime.txt的创建。
创建app目录,并进入该目录
mkdir appcd app
创建main.py文件,并添加如下内容,
from flask import Flask app = Flask(__name__)   @app.route("/") def home_view():         return "<h1>Welcome to Heroku</h1>"
返回上级目录,创建wsgi.py文件,并添加如下内容,
from app.main import app   if __name__ == "__main__":         app.run() 
目录结构
本地测试
pipenv run python3 wsgi.py

访问 http://localhost:5000/
本地测试
登录heroku并创建一个app
#提供用户名和密码heroku login#该名字必须唯一,没有被别人注册过heroku create autoflask
部署
初始化 gitgit init# 指定 appheroku git:remote -a autoflask#提交代码,服务器端自动部署git add .git commit -m "第一次提交"git push heroku master
最后Flask程序成功地部署到了http://autoflask.herokuapp.com,可以打开并访问它了
Welcome to Heroku
自动脚本
将以上代码放到一个脚本里,实现自动化创建Flask app,创建Heroku app并部署
export APP=autoflaskmkdir $APP && cd $APPpipenv install flask gunicornecho 'web gunicorn wsgi:app' >Procfileecho 'python-3.8.6' >runtime.txtmkdir appcat > app/main.py <<EOFfrom flask import Flask   app = Flask(__name__)   @app.route("/") def home_view():         return "<h1>Welcome to Heroku</h1>"EOFcat >wsgi.py <<EOFfrom app.main import app   if __name__ == "__main__":         app.run() EOF# 测试#pipenv run python3 wsgi.py# app name 必须平台唯一,否则会报Name xxx is already takenheroku create $APP# 部署git initheroku git:remote -a $APPgit add .git commit -m "第一次提交"git push heroku master
小编提供有偿安装部署服务,欢迎私信骚扰。
喜欢我的文章,烦请【在看】、【转发】 和【关注】三连,🙏🙏!
到顶部