由于在 GCP 开的一台服务器上面只跑了两个 Telegram Bot,觉得不太划算(虽然还在免费额度内),因此一直在尝试寻找类似于 Github Pages 一样可以托管 Python 代码的平台。
前一阵子看到了 Heroku,十分想试试,但是无奈当时网络相当不稳定,只注册了一个账号就无法裸连了,随即搁置了下来。今天重新尝试了一下,竟然很快配好了。不由得感慨真的是相当方便。
前期准备
其实没有任何需要准备的,如果对于规模相当小的代码来说。
官方的入门提示也十分详尽,基本可以涵盖到跑起自己的服务来的每一个步骤。
添加的文件
最重要的添加的文件有两个,Pipfile
和 Procfile
。前者用来创建一个 pipenv 环境,安装依赖等等。后者用来定义应用类型以及执行部署的命令。
过程
heroku login
登陆。进入到需要部署的项目目录,并添加好必要文件。
heroku create
创建新的 App。在 Heroku 的 Dashboard 上进行全局变量的添加。比如不在代码中出现的密钥,api_key 之类的。
Commit 后 Push 到 Heroku。
git push heroku master
这样 Heroku 就会尝试部署,如果是 web 类型的应用的话,会自动执行部署命令。
一个简单的 Python 脚本就可以部署在上面了。
遇到的问题
在尝试部署 Telegram Bot 时,在
Procfile
里声明了类型为web
。运行之后刚开始一切正常,过一会儿会出现Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
的报错。原因应该是在选择
web
类型运行时,这个实例必须和声明的一个端口绑定,而我的玩具代码中没有这样的声明,导致绑定失败。因此,使用其他类型,比如worker
即可正常工作。免费额度。 Heroku 似乎给免费用户每月 550 小时的额度。并且在无活动 30 分钟之后会进入休眠(但是可以被重新唤醒)。所以还好啦。
不知道还有没有其他坑。我看 V2 上面没有太多好评。🤔