美国的一家做PaaS的公司,产品很有特色,初次接触的人会容易被它提供服务的特点惊艳到 (:зゝ∠)
和传统的CLI登录方式有所区别的是,当使用 heroku cli 登录时,会弹出浏览器窗口直接点击即可登录,很有特色
可以通过共享Query方式实现共享你在heroku中的存储数据(各种 stroe add-on)
heroku 中,app 对应的一个容器集合叫做 dynos, 管理 APP 的runtime,容器资源限制也是从 dynos 中控制的, heroku 提供了6个标准的 dynos 类型,规定了基本的配置, 中间有几个指标比较在意
水平扩展增加数量,垂直伸展换配置
auto scaling: p95 Response Time: 过去一小时内百分之95的请求平均时间,周期触发,最小一分钟,触发如果超过水位线,将会调度或者杀掉一个实例
执行的 os base image,可以指定为标准 stack: heroku-16 heroku-18(ubuntu 16.04 ubuntu 16.08),其他为container
定义 Docker image 如何编译,以及启动方式,需要配置你的 stack
为 container
,可以在build
中配置config
的值设置Dockerfile
中的ARG
字段,可以配置多target
,同时配置 release
的类型对应哪个target
通过 heroku.yaml.setup
可以直接布置一个你的初始应用状态,包括 addons
和 config var
(这个用来干嘛的没看到)
keroku 提供官方的标准 buildpack
,可以配置相关的参数,比如 golang 中的 CGO_LDFALGS 什么的,如果不添加任何 buildpack
配置,将会使用默认的检测工具检查代码属于什么语言类型,找到对应的编译语言后使用官方标准编译相关代码,默认官方提供的 buildpack
是 latest
,如果要使用某个固定版本的,需要直接指定对应的 buildpack
full url(仓库地址), 编译使用的base image 为 STACK
一个 app
可以指定多个 buildpack: heroku buildpacks:add --index 1 heroku/go
支持三方 buildpack ,通过官方提供的 buildpack 平台查找或者使用某个符合 heroku buildpack 规则的 git 仓库可以指定需要使用的三方 buildpack,支持仓库的 tag 或者 branch 指定某个 buildpack 的版本
buildpack 指定三个的 script
bin/detect
: 校验编译准备的合法性,比如是否存在什么东西,什么变量bin/compile
: 执行一些前期准备之类的东西bin/release
: 提供 meta 信息用于执行期脚本执行必须返回 0
才算作成功,同时从 stdout
应当输出明确的 framwork 名称
实际编译过程,BUILD_DIR
是 app 编译目录, CACHE_DIR
是缓存或者长线编译过程中的中间产物,每次编译都会用到这些东西, ENV_DIR
包含了应用的配置变量,可以通过 Profile
将其内容转变为 env
变量,ENV_DIR
中一个文件的文件名是变量名,文件内容是变量的值, 标准 env
仅提供 STACK
和 SOURCE_VERSION
两个基本信息,应当在任何主要步骤执行前明确的使用 ----->
6-char arrow 显示执行的步骤
两个字段:
Procfile
入口,比如: web: bin/node server.js 当然也可以写Procfile
指定而不写这个主目录下的名为 Procfile
的文件,定义应用类型以及对应的执行入口
开始release
之前会通过一个 bash shell soruce .profile.d/*.sh
执行所有的shell 文件, 然后执行 .profile
文件