云部署: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