Бесплатный хостинг Python Discord Bot с помощью Fly.io


Вступление

Поскольку Heroku перестанет быть бесплатным после 28 ноября 2022 года, я предлагаю вам другой способ бесплатного размещения бота Discord 24/7.

Вы сможете разместить любой вид бота на Fly.io с небольшими ограничениями, выполнив следующие шаги. Вы также можете подключить базу данных PostgreSQL для хранения данных.

Развертывание Python Discord Bot на Fly.io

Эта статья изначально была видеоуроком, который вы можете посмотреть здесь:

1. Установите инструмент командной строки flyctl.

Mac OS

Если у вас установлен менеджер пакетов Homebrew, flyctl можно установить, выполнив следующие действия:

brew install flyctl
Войти в полноэкранный режим Выйти из полноэкранного режима

Если нет, вы можете запустить сценарий установки:

curl -L https://fly.io/install.sh | sh
Войти в полноэкранный режим Выйти из полноэкранного режима

Windows

Запустите сценарий установки Powershell:

iwr https://fly.io/install.ps1 -useb | iex
Войти в полноэкранный режим Выйти из полноэкранного режима

Arch Linux

Запустите программу установки пакета:

yay -S flyctl-bin
Войдите в полноэкранный режим Выйти из полноэкранного режима

Linux

Запустите сценарий установки:

curl -L https://fly.io/install.sh | sh
Войти в полноэкранный режим Выйти из полноэкранного режима

Дополнительная информация: https://fly.io/docs/getting-started/installing-flyctl/

2. Создайте учетную запись, выполнив команду flyctl auth signup и завершив работу через браузер.

После установки flyctl вы должны иметь возможность использовать его в командной строке. Используйте flyctl auth signup для запуска браузера и завершения шагов по созданию учетной записи. Если у вас уже есть учетная запись, вы можете использовать flyctl auth login.

3. Добавьте Dockerfile с версией Python и методом установки зависимостей.

Метод 1: requirements.txt

Создайте список ваших зависимостей в файле requirements.txt. Вы можете узнать, что у вас установлено, используя pip freeze.

Пример Discord.py:

discord.py>=2.0.0,<3
python-dotenv==0.20.0
Вход в полноэкранный режим Выход из полноэкранного режима

Пример Nextcord:

nextcord>=2.1.0,<3
python-dotenv==0.20.0
Вход в полноэкранный режим Выход из полноэкранного режима

Чтобы указать Fly.io установить эти зависимости, создайте файл Dockerfile (без расширения) со следующим содержимым:

FROM python:3.10
WORKDIR /bot
COPY requirements.txt /bot/
RUN pip install -r requirements.txt
COPY . /bot
CMD python bot.py
Войти в полноэкранный режим Выйти из полноэкранного режима

В данном случае python bot.py — это команда, используемая для запуска бота. Если ваш бот запускается в другом файле, вам следует изменить его здесь.

Метод 2: Использование Poetry

Если вы используете Poetry для работы с зависимостями, ваш Dockerfile будет выглядеть примерно так:

FROM python:3.10
RUN pip install poetry
WORKDIR /bot
COPY poetry.lock pyproject.toml /bot/
RUN poetry config virtualenvs.create false && poetry install --no-interaction --no-ansi
COPY . /bot
CMD python bot.py
Вход в полноэкранный режим Выход из полноэкранного режима

(Poetry Dockerfile основан на этом руководстве от Replicate.com)

4. flyctl launch.

В папке проекта выполните команду flyctl launch.

Дайте проекту имя, введите Y или N в зависимости от того, нужна ли вам база данных Postgresql или нет, введите N, чтобы не развертывать проект.

Будет создан файл fly.toml, но вы можете удалить большую его часть, чтобы он выглядел примерно так:

app = "my-bot-name"
kill_signal = "SIGINT"
kill_timeout = 5
processes = []

[env]
Войдите в полноэкранный режим Выход из полноэкранного режима

5. flyctl deploy

Введите flyctl deploy, чтобы развернуть первую версию!

После этого ваш бот будет запущен на Fly.io!

6. Установите параметры окружения

Если вы будете разворачивать бота без вашего .env или конфигурационных файлов, вам нужно будет установить секреты, о которых будет знать fly.io.

Сюда войдут все переменные окружения, например:

flyctl secrets set DISCORD_TOKEN=My.TOken.3213.example LOG_CHANNEL_ID=1234567890
Войти в полноэкранный режим Выйти из полноэкранного режима

Посмотреть https://fly.io/docs/reference/secrets/#setting-secrets

Вы закончили!

Чтобы развернуть последующие версии, вы можете запустить flyctl deploy или смотрите ниже об автоматическом развертывании с GitHub.


Непрерывное развертывание с GitHub

Вы можете найти видео по этой части здесь:

  1. Запустите flyctl auth token, чтобы получить токен Fly API
  2. Перейдите в раздел Settings > Secrets > Actions вашего репозитория и нажмите New repository secret.
  3. Введите FLY_API_TOKEN в качестве имени и ваш токен из шага 1 в качестве значения
  4. Создайте папку .github/workflows/ и внутри неё создайте файл, который использует действие flyctl при push. Вы можете назвать его как угодно, например, fly.yml.

Пример fly.yml:

name: Fly Deploy
on:
  push:
    branches:
      - main

env:
  FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

jobs:
  deploy:
    name: Deploy app
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: superfly/flyctl-actions/setup-flyctl@master
      - run: flyctl deploy --remote-only
Вход в полноэкранный режим Выход из полноэкранного режима

Убедитесь, что имя ветки корректно для вашей ветки по умолчанию.

Дополнительная информация: https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/


Заключение

Спасибо за прочтение!

Надеюсь, вы нашли это руководство полезным.

Посмотрите полное видео для дальнейших объяснений и не забудьте поставить лайк и подписаться!

Часть 1 (Установка и хостинг) — https://youtu.be/J7Fm7MdZn_E

Часть 2 (Непрерывное развертывание) — https://youtu.be/6u9BrDaSHJc

— Джона Лоуренс

GitHub: DenverCoder1

YouTube: Jonah Lawrence — Dev Pro Tips

Сервер Discord: https://discord.gg/fPrdqh3Zfu

Оцените статью
devanswers.ru
Добавить комментарий