Хостинг: Deno Deploy
В этом руководстве рассказывается о том, как вы можете разместить своих ботов grammY на Deno Deploy.
Обратите внимание, что это руководство предназначено только для пользователей Deno, и для создания учетной записи Deno Deploy вам необходимо иметь аккаунт Git
Deno Deploy идеально подходит для большинства простых ботов, но следует учитывать, что не все функции Deno доступны для приложений, работающих на Deno Deploy. Например, платформа поддерживает только ограниченный набор API файловой системы, доступных в Deno. Она похожа на другие многочисленные бессерверные платформы, но предназначена для приложений Deno.
Результат этого руководства можно увидеть в нашем примере репозитория ботов.
Подготовка кода
Помните, что вам нужно запускать бота на вебхукам, поэтому в коде следует использовать
webhook
, а не вызыватьCallback bot
..start()
- Убедитесь, что у вас есть файл, который экспортирует ваш объект
Bot
, чтобы вы могли импортировать его позже для запуска. - Создайте файл с именем
main
или.ts main
, или вообще любым другим именем, которое вам нравится (но вы должны запомнить и использовать его как основной файл для развертывания), со следующим содержимым:.js
import { webhookCallback } from "https://deno.land/x/grammy@v1.33.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
Мы советуем располагать обработчик не в корне (/
), а по какому-то секретному пути. Здесь мы используем токен бота (/<токен>
).
Развертывание
Метод 1: через GitHub
Это рекомендуемый и самый простой метод. Основное преимущество этого метода заключается в том, что Deno Deploy будет следить за изменениями в вашем репозитории, включающем код вашего бота, и автоматически развертывать новые версии.
Создайте репозиторий на GitHub, он может быть как приватным, так и публичным.
Разместите свой код.
Рекомендуется иметь одну стабильную ветку, а тестирование проводить в других ветках, чтобы не случилось непредвиденных ситуаций.
Зайдите на свою панель Deno Deploy dashboard.
Нажмите на “New Project”.
Установите подключение на свой аккаунт или организацию и выберите репозиторий.
Выберите ветку, которую вы хотите развернуть.
Выберите файл начальной точки
main
и нажмите «Deploy Project» для развертывания..ts
Метод 2: с помощью deployctl
Это метод для более опытных пользователей или если вы не хотите загружать свой код на GitHub. Он позволяет развернуть проект через командную строку или GitHub Actions.
Установите
deployctl
.Создайте токен доступа в разделе «Токены доступа» в настройках учетной записи.
Перейдите в каталог проекта и выполните следующую команду:
shdeployctl deploy --project=<project> --entrypoint=./main.ts --prod --token=<токен>
Установка переменных окружения
Переменные окружения можно установить, зайдя в настройки проекта после развертывания.
Но это возможно и из командной строки:
- Вы можете назначить переменные окружения из файла dotenv, добавив аргумент
-
.-env -file = <file> - Вы также можете указать их по отдельности, используя аргумент
-
.-env = <ключ = значение>
- Вы можете назначить переменные окружения из файла dotenv, добавив аргумент
Чтобы настроить GitHub Actions, обратитесь к этому README.
Для получения дополнительной информации ознакомьтесь с документацией deployctl.
Примечание
После запуска приложения необходимо настроить параметры веб-хука бота так, чтобы он указывал на вашего бота. Для этого отправьте запрос на
curl https://api.telegram.org/bot<токен>/setWebhook?url=<url>
заменив <токен>
на токен вашего бота, а <url>
на полный URL вашего приложения вместе с путем к обработчику вебхука.