Хостинг: Vercel Serverless Functions
В этом руководстве вы узнаете, как развернуть своего бота на Vercel с помощью Vercel Serverless Functions, предполагая, что у вас уже есть аккаунт Vercel.
Структура проекта
Единственным условием для начала работы с Vercel Serverless Functions является перемещение вашего кода в директорию api
, как показано ниже. Вы также можете посмотреть документацию Vercel, чтобы узнать больше об этом.
.
├── node_modules/
├── build/
├── api/
│ └── bot.ts
├── package.json
├── package-lock.json
└── tsconfig.json
Если вы используете TypeScript, вы можете установить @vercel
в качестве dev-зависимости, но это не обязательно для выполнения данного руководства.
Настройка Vercel
Следующим шагом будет создание файла vercel
на верхнем уровне вашего проекта. Для нашего примера структуры его содержимое будет таким:
{
"functions": {
"api/bot.ts": {
"memory": 1024,
"maxDuration": 10
}
}
}
2
3
4
5
6
7
8
Если вы хотите использовать бесплатную подписку Vercel, ваши конфигурации
memory
иmax
могут выглядеть так, как указано выше, чтобы не обходить ограничения.Duration
Если вы хотите узнать больше о конфигурационном файле vercel
, смотрите его документацию.
Настройка TypeScript
В нашем tsconfig
мы должны указать выходной каталог как build
, а корневой каталог как api
. Это важно, поскольку мы будем указывать их в опциях развертывания Vercel.
{
"compilerOptions": {
"target": "ES2019",
"module": "commonjs",
"rootDir": "./api",
"moduleResolution": "node",
"resolveJsonModule": true,
"outDir": "./build",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"strict": true,
"skipLibCheck": true
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
Главный файл
Независимо от использования TypeScript или JavaScript, у нас должен быть исходный файл, через который запускается наш бот. Он должен выглядеть примерно так:
import { Bot, webhookCallback } from "grammy";
const token = process.env.BOT_TOKEN;
if (!token) throw new Error("BOT_TOKEN не установлен");
const bot = new Bot(token);
export default webhookCallback(bot, "std/http");
2
3
4
5
6
7
8
Vercel Edge Functions обеспечивает ограниченную поддержку grammY
Вы все еще можете использовать основной пакет grammY и ряд плагинов, но другие могут быть несовместимы из-за зависимостей только от Node.js, которые могут не поддерживаться Vercel Edge Runtime.
В настоящее время у нас нет полного списка совместимых плагинов, поэтому вам нужно проверить это самостоятельно.
Добавьте эту строку к приведенному выше сниппету, если вы хотите перейти на Edge Functions:
export const config = {
runtime: "edge",
};
2
3
В Vercel Dashboard
Предполагая, что у вас уже есть аккаунт Vercel, к которому подключен GitHub, добавьте новый проект и выберите репозиторий вашего бота. В разделе Build & Development Settings:
- Output directory:
build
- Install command:
npm install
Не забудьте добавить секреты, такие как токен вашего бота, в качестве переменных окружения в настройках. Как только вы это сделаете, вы сможете развернуть его!
Настройка вебхука
Последний шаг — подключение приложения Vercel к Telegram. Измените приведенный ниже URL на свои учетные данные и зайдите на него через браузер:
https://api.telegram.org/bot<токен>/setWebhook?url=<URL_ХОСТА>
С URL
все немного сложнее, потому что вам нужно использовать ваш домен приложения Vercel с маршрутом к коду бота, например https://
. Где bot
ссылается на ваш файл bot
или bot
.
После этого вы увидите следующий ответ:
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
2
3
4
5
Поздравляем! Теперь ваш бот должен быть запущен.