托管:Deno Deploy
这个指南告诉你如何将你的 grammY bots 托管到 Deno Deploy.
请注意,这个指南只适用于 Deno 用户,你需要一个 Git
Deno Deploy 是大多数简单 bot 的理想选择,并且你应该注意,Deno Deploy 上运行的应用程序不一定完整支持 Deno 的所有功能。 例如,平台仅支持 Deno 中可用的文件系统 API 的 有限集。 它就像其他许多 serverless 平台一样,但专门用于 Deno 应用程序。
这个教程的结果 可以在我们的示例 bot 仓库中看到。
准备你的代码
请注意,你需要 在 webhooks 上运行你的 bot,所以你应该调用
webhook
,而不是Callback bot
。.start()
- 确保你有一个文件可以导出你的
Bot
对象,这样你就可以在以后导入它来运行它。 - 创建一个名为
main
或.ts main
的文件,或任何你喜欢的名字(但你应该记住并使用这个文件作为部署的主要文件),其内容如下:.js
import { webhookCallback } from "https://deno.land/x/grammy@v1.30.0/mod.ts";
// 你可以将其修改为正确的方式来导入你的 `Bot` 对象。
import bot from "./bot.ts";
const handleUpdate = webhookCallback(bot, "std/http");
Deno.serve(async (req) => {
if (req.method === "POST") {
const url = new URL(req.url);
if (url.pathname.slice(1) === bot.token) {
try {
return await handleUpdate(req);
} catch (err) {
console.error(err);
}
}
}
return new Response();
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
我们建议你将你的处理程序放在一个相对隐蔽的路径而不是根路径(/
)。 这里,我们使用 bot token 作为路径(/<bot token>
)。
部署
方法 1:使用 GitHub
这是推荐的方法,也是最容易操作的方法。 使用这种方法的主要优势是,Deno Deploy 将会自动监视你的仓库变化,其中包括你的代码,并自动部署新版本。
在 GitHub 上创建一个新的仓库,它可以是私有的或公开的。
将你的代码推送到这个仓库。
建议你有一个单一且稳定的分支,然后在其他分支中进行测试,这样你就不会发送一些意外的事情。
访问你的 Deno Deploy 仪表台。
点击 “New Project”。
安装 GitHub 应用程序到你的账户或组织,并选择你的仓库。
选择你想部署的分支,然后选择你要部署的
mod
文件。.ts 选择入口文件
main
,然后点击 “Deploy Project” 进行部署。.ts
方法 2: 使用 deployctl
这是一种适用于更高级用户或者不想将代码上传到 GitHub 的方法。 它允许你通过命令行或 Github Actions 来部署项目。
安装
deployctl
。从 account settings 中的 “Access Tokens” 部分创建访问令牌。
转到你的项目目录并运行以下命令:
shdeployctl deploy --project=<project> --entrypoint=./main.ts --prod --token=<token>
设置环境变量
部署后可以前往项目的设置来设置环境变量。
但这也可以通过命令行实现:
- 你可以通过添加
-
参数从 dotenv 文件添加环境变量。-env -file = <file> - 你还可以使用
-
参数单独指定它们。-env = <key = value>
- 你可以通过添加
要设置 GitHub Actions,请参考 这里。
查看 deployctl 文档 了解更多信息。
注意
在部署完成后,你需要配置你的 bot 的 webhook 设置来指向你的 app。 为了配置 webhook,发送一个请求到
curl https://api.telegram.org/bot<token>/setWebhook?url=<url>
将 <token>
替换为你的 bot 的 token,并将 <url>
替换为你的 app 的完整的 URL 以及 webhook 处理程序的路径。