云部署:PaaS(Paltform as a Service)。不需要配置服务器、设置数据库、配置网络服务,可以尽快让应用部署上线。

Heroku使用名为Dyno的计算单元衡量用量,并以此为依据收取服务费用。最常用的Dyno类型是Web Dyno,表示一个Web服务器实例。程序可以通过使用更多的Web Dyno以增强其请求处理能力。另一种Dyno类型是Worker Dyno,用来执行后台作业或其他辅助任务。

 

1. 注册账号,安装heroku客户端工具

1.1 注册账号,https://dashboard.heroku.com/apps

1.2 安装客户端,https://devcenter.heroku.com/articles/heroku-cli

1.3 验证安装是否成功,命令行输入heroku --version

1.4 登录heroku,有两个方法:

  • 命令行输入heroku login,通过跳转网页登录
  • 命令行输入heroku login -i,在命令行输入账号密码登录

 

2. 创建应用

可用浏览器或用命令行创建。

2.1 浏览器创建。登录Heroku应用控制台,点击创建Create new app。如果名称没有被占用,则会跳出绿色提示表示可用。运行环境默认在美国,可以选择欧洲。然后点击Create App按钮,完成创建。

2.2 命令行创建。命令行输入heroku create <appname>。如不输入应用名称,则随机生成。

2.3 到本地工作目录,

$ cd my-project/
$ git init                           # 初始化本地GIT库
$ heroku git:remote -a <appname>   # 连接远程Heroku的代码库

2.4 Procfile:Web应用服务器启动时执行的命令 * 没有扩展名。 * 必须放在程序的根目录下。 * 格式:<process type>: <command>。eg:web: gunicorn manage:app * Flask自带的开发Web服务器表现很差,不适用于生产环境设计。Heroku也没有为托管程序提供Web服务器。一般使用Gunicorn(http://gunicorn.org/)和uWSGI(http://uwsgi-docs.readthedocs.org/en/latest/)。这里采用更简单的Gunicorn。 * gunicorn后执行的manage:app,参数冒号左边的部分表示定义程序的包或者模块,冒号右边的部分表示包中程序实例的名字。

2.5 requirements.txt:Web应用程序所依赖的第三方扩展包。

eg:
Flask==1.1.1
gunicorn==19.4.5

 

3. 创建本地数据库迁移脚本

3.1 安装Flask迁移框架

$ pip install flask-migrate

3.2 实例化迁移对象

from flask_migrate import Migrate, MigrateCommand
# ...
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)

3.3 本地生成迁移环境和迁移脚本

$ python app.py db init     #生成迁移仓库
$ python app.py db migrate -m "description"     #创建迁移脚本

 

4. 应用部署

4.1 推送Web应用至Git仓库

$ git add .
$ git commit -m "describe ****"

4.2 推送至Heroku

$ git push heroku master

4.3 Heroku端创建数据库

$ heroku addons:create heroku-postgresql:<PLAN_NAME>    详情看第7大点

4.4 选择数据库

假如要使用Heroku提供的PostgreSQL数据存储,需检查应用的数据库配置脚本,确保连接的数据库地址正确。

$ heroku config     #查看数据库URL的DATABASE_URL变量

假如没有上传.env,则需要使用config:set命令为Heroku程序所在的远程运行环境设置环境变量。譬如FLASKCONFIG、FLASKENV等。

$ heroku config:set FLASK_CONFIG=production

4.5 在Heroku远端更新数据库

$ heroku run python app.py db upgrade

对第一个迁移来说,其作用和调用db.create_all()方法一样。但在后续的迁移中,upgrade命令能把改动应用到数据库中,且不影响其中保存的数据。

 

5. 应用启动

有多种方法。不建议使用heroku run python app.py deploy该方式。

5.1

$ heroku ps:scale web=1

5.2

 

6. 目录结构

<appname>
  ├ .gitignore
  ├ Procfile
  ├ README.md
  ├ requirements.txt
  └ app.py
  • 可添加README.md作项目说明

 

7. Heroku一般命令应用

  • 提交部署 >

    $ git push heroku master

  • 查看应用页面 >

    $ heroku open

  • 维修模式(此时网站无法访问) >

    $ heroku maintenance:on #开启 $ heroku maintenance:off #关闭 $ heroku maintenance #查看维修模式状态

  • 部署更新 >

    $ heroku maintenance:on # 开启维护,这时访问程序会显示维护页面 $ git push heroku master # 推送代码 $ heroku restart # 重启程序 $ heroku maintenance:off # 关闭维护

  • 停止动态(网站无法访问) >

    $ heroku ps:scale web=0

  • 重新启动 >

    $ heroku restart

  • 查看状态 >

    $ heroku status

  • 列出应用 >

    $ heroku list #or $ heroku apps

  • 删除应用 >

    $ heroku apps:destroy

  • 创建数据库 >

    $ heroku addons:create heroku-postgresql: #免费的项目名是hobby-dev

  • 只有1w条免费数据记录
  • 如要在Python中应用,需先安装pip install psycopg2-binary,并在代码中注入
import os 
import psycopg2
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
  • 连接数据库(如果有多个数据库psql后面跟着数据库名字) >

    $ heroku pg:psql

  • 查看日志 >

    $ heroku logs $ heroku logs --tail #查看实时的日志输出

  • 查看dyno hour额度 >

    $ heroku ps

  • 增加环境变量 >

    $ heroku config set:<环境变量>=<值>


There are 0 comments