Хостинг: 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.
Натисніть на “New Project”.
Встановіть GitHub-застосунок Deno Deploy на свій обліковий запис або організацію та виберіть свій репозиторій.
Виберіть гілку, яку ви хочете розгорнути.
Виберіть вхідний файл
main
і натисніть “Deploy Project”, щоб розгорнути проєкт..ts
2-й метод: за допомогою deployctl
Це метод для більш досвідчених користувачів або якщо ви не хочете розміщувати свій код на GitHub. Він дозволяє розгорнути проєкт через командний рядок або GitHub Actions.
Встановіть
deployctl
.Створіть токен доступу в розділі “Access Tokens” в налаштуваннях облікового запису.
Перейдіть до каталогу вашого проєкту і виконайте наступну команду:
shdeployctl deploy --project=<назва-проєкту> --entrypoint=./main.ts --prod --token=<токен-доступу>
Налаштування змінних середовища
Змінні середовища можна встановити, перейшовши до налаштувань вашого проєкту після розгортання.
Також це можна зробити з командного рядка:
- Ви можете призначити змінні оточення з dotenv-файлу, додавши аргумент
-
.-env -file = <файл> - Ви також можете вказати їх окремо за допомогою аргументу
-
.-env = <ключ = значення>
- Ви можете призначити змінні оточення з dotenv-файлу, додавши аргумент
Щоб налаштувати Github Actions, дивіться це.
Перегляньте документацію deployctl для отримання додаткової інформації.
Примітка
Після запуску застосунку вам потрібно налаштувати вебхук вашого бота так, щоб він вказував на URL-адресу вашого застосунку. Для цього надішліть запит на адресу
curl https://api.telegram.org/bot<токен-бота>/setWebhook?url=<адреса>
замінивши <токен
на токен вашого бота, а <адреса>
— на повну URL-адресу вашого застосунку разом з шляхом до обробника вебхуків.