вступление

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

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

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


Скоро выйдет вторая часть (30 августа)


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


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

Если у вас есть Домашний менеджер пакетов установлен, flyctl можно установить, запустив:

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

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

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

curl -L  | sh
Войти в полноэкранный режим

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


Окна

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

iwr  -useb | iex
Войти в полноэкранный режим

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


Арх Линукс

Запустите установщик пакета:

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

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


линукс

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

curl -L  | sh
Войти в полноэкранный режим

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

Больше информации:


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

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


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


Способ 1: требования.txt

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

Пример Discord.py:

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

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

Пример следующего шнура:

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 для зависимостей, ваш 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
Войти в полноэкранный режим

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

Видеть

Готово!

Чтобы развернуть дополнительные версии, вы можете запустить 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 при нажатии. Вы можете назвать его как хотите, например, 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
Войти в полноэкранный режим

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

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

Больше информации:



Вывод

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

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

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

Видео об автоматическом развертывании с GitHub выйдет 30 августа, так что обязательно вернитесь позже, если оно вас заинтересует.

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

Гитхаб: ДенверКодер1

YouTube: Джона Лоуренс — советы Dev Pro

Дискорд сервер: