光阴冢 赛博空间的自留地

部署 Python 代码到 Heroku

由于在 GCP 开的一台服务器上面只跑了两个 Telegram Bot,觉得不太划算(虽然还在免费额度内),因此一直在尝试寻找类似于 Github Pages 一样可以托管 Python 代码的平台。

前一阵子看到了 Heroku,十分想试试,但是无奈当时网络相当不稳定,只注册了一个账号就无法裸连了,随即搁置了下来。今天重新尝试了一下,竟然很快配好了。不由得感慨真的是相当方便。

前期准备

其实没有任何需要准备的,如果对于规模相当小的代码来说。

官方的入门提示也十分详尽,基本可以涵盖到跑起自己的服务来的每一个步骤。

添加的文件

最重要的添加的文件有两个,PipfileProcfile。前者用来创建一个 pipenv 环境,安装依赖等等。后者用来定义应用类型以及执行部署的命令。

过程

  1. heroku login 登陆。

  2. 进入到需要部署的项目目录,并添加好必要文件。heroku create 创建新的 App。

  3. 在 Heroku 的 Dashboard 上进行全局变量的添加。比如不在代码中出现的密钥,api_key 之类的。

  4. Commit 后 Push 到 Heroku。git push heroku master

  5. 这样 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 上面没有太多好评。🤔