В этой статье мы рассмотрим процесс разработки Slack-бота на Python с использованием популярных библиотек и фреймворков, таких как Flask и Slack SDK. Мы начнем с выбора инструментов, необходимых для создания бота, и шаг за шагом пройдем через все этапы разработки: от настройки окружения и написания кода до тестирования и деплоя на сервер.
Что будет делать наш Slack-бот?
Наш Slack-бот будет предоставлять собой многофункциональный инструмент, интегрированный в рабочие процессы Slack. Он будет обладать следующим функционалом:
-
Приветствие и взаимодействие с пользователями:
-
При получении команды
/hello
, бот отправляет персонализированное приветствие и предоставляет интерактивные опции. Пользователю предлагается выбор между получением метеорологической сводки или обзором текущих задач посредством интерактивных элементов интерфейса.
-
-
Получение прогноза погоды:
-
По команде
/weather
или через выбор кнопки «Получить погоду», бот получает данные о текущей погоде в заданном городе (по умолчанию Москва) и отправляет их пользователю.
-
-
Управление задачами:
-
Бот позволяет пользователям добавлять задачи в базу данных и просматривать их через команду
/task
или через соответствующую кнопку. Это полезно для организации личных дел и мелких задач прямо внутри Slack.
-
-
Реакция на сообщения:
-
Бот может реагировать на определенные текстовые сообщения (например, «привет»), отправляя соответствующий ответ в канал.
-
Развертывание мы осуществим в Amvera, так как это облако + app engine, где развертывание и обновление проектов кардинально проще настройки VPS. Развертывание осуществляется через git push amvera master (или через перетягивание файлов в интерфейсе), и все само настраивается и развертывается.
Выбор инструментов и настройка окружения
Перед тем как приступить к разработке нашего Slack-бота, необходимо выбрать подходящие инструменты и настроить окружение для разработки. Мы будем использовать Python 3, который обладает мощным набором библиотек и фреймворков для работы с API и создания веб-приложений. Рассмотрим основные компоненты, которые понадобятся для разработки нашего бота:
1. Python и библиотеки
Для создания бота мы будем использовать следующие библиотеки:
-
Flask — Это популярный веб-фреймворк для Python, который позволяет легко создавать веб-приложения и API. В нашем случае Flask будет использоваться для обработки HTTP-запросов от Slack.
-
Slack SDK — Набор инструментов, предоставляемый Slack, для взаимодействия с их API. С его помощью мы сможем отправлять и получать сообщения, обрабатывать команды и события.
-
Requests — Легковесная библиотека для выполнения HTTP-запросов. Мы будем использовать её для взаимодействия с внешними API, такими как сервис погоды.
-
python-dotenv -Эта библиотека позволяет загружать конфиденциальные данные (например, токены и ключи API) из файла
.env
. Это важно для безопасности вашего проекта. -
SQLite -Встроенная база данных Python, которая будет использоваться для хранения задач, добавленных пользователями. SQLite проста в использовании и идеально подходит для небольших проектов.
2. Установка Python и pip
Если у вас еще не установлен Python 3, скачайте и установите его с официального сайта python.org. Вместе с Python будет установлен и пакетный менеджер pip
, который понадобится для установки нужных библиотек.
Проверьте установку Python и pip, выполнив в терминале следующие команды:
python3 --version pip3 --version
3. Создание виртуального окружения
Чтобы избежать конфликтов с другими проектами и изолировать зависимости, создадим виртуальное окружение для нашего бота. Это можно сделать с помощью команды:
python3 -m venv venv
Затем активируйте виртуальное окружение:
-
На Windows:
venv\Scripts\activate
-
На macOS и Linux:
source venv/bin/activate
После активации виртуального окружения вы увидите префикс (venv)
перед строкой командного интерфейса.
4. Установка зависимостей
Создайте файл requirements.txt
, в котором будут перечислены все необходимые библиотеки:
Flask==3.0.3 slack-sdk==3.11.0 requests==2.26.0 python-dotenv==0.19.2
Установите все зависимости командой:
pip install -r requirements.txt
5. Создание файла .env
Для хранения конфиденциальных данных создайте файл .env
в корне вашего проекта. Этот файл не должен попадать в систему контроля версий, поэтому добавьте его в .gitignore
.
Пример содержимого файла .env
:
SLACK_BOT_TOKEN=YOUR_SLACK_BOT_TOKEN SLACK_SIGNING_SECRET=YOUR_SECRET_SLACK_BOT_TOKEN WEATHER_API_KEY=YOUR_WEATHER_BOT_TOKEN
6. Настройка Git и .gitignore
Для того чтобы ваш проект был защищен от случайного добавления конфиденциальных данных в систему контроля версий, таких как токены API и настройки окружения, важно правильно настроить .gitignore
. Этот файл определяет, какие файлы и директории Git должен игнорировать, чтобы они не попали в ваш репозиторий.
7. Инициализация Git-репозитория
Если вы еще не инициализировали Git-репозиторий в вашем проекте, сделайте это, выполнив следующую команду в корневой папке проекта:
git init
Эта команда создаст скрытую директорию .git
, которая будет хранить всю информацию о вашем репозитории.
8. Создание и настройка .gitignore
Создайте файл .gitignore
в корневой директории вашего проекта. В этот файл нужно вписать все файлы и директории, которые не должны отслеживаться Git.
Вот пример содержимого файла .gitignore
:
# Игнорируем виртуальное окружение venv/ # Игнорируем конфиденциальные файлы .env # Игнорируем файлы кеша и временные файлы __pycache__/ *.pyc # Игнорируем файлы редакторов кода .idea/`
-
venv/
: Эта строка указывает Git игнорировать директорию виртуального окружения, чтобы файлы виртуального окружения не попали в репозиторий. -
.env
: Этот файл содержит ваши конфиденциальные данные, такие как токены API и ключи доступа. Добавление его в.gitignore
предотвращает случайную утечку этих данных. -
__pycache__/
и*.pyc
: Эти файлы и директории создаются Python для кеширования байт-кода, и их не нужно хранить в репозитории. -
Редакторские файлы: Если вы используете IDE, такие как VS Code или PyCharm, они могут создавать служебные директории (
*.vscode/
,.idea/
), которые также не нужны в репозитории.
9. Проверка .gitignore
После создания .gitignore
выполните команду git status
, чтобы убедиться, что файлы, указанные в .gitignore
, больше не отображаются в списке файлов для коммита.
git status
Если всё настроено правильно, вы не увидите в списке игнорируемые файлы, такие как venv/
и .env
.
10. Настройка конфигурационного файла
Создайте файл config.py
, который будет загружать данные из .env
и хранить их в переменных:
import os from dotenv import load_dotenv load_dotenv() SLACK_BOT_TOKEN = os.getenv("SLACK_BOT_TOKEN") SLACK_SIGNING_SECRET = os.getenv("SLACK_SIGNING_SECRET") WEATHER_API_KEY = os.getenv("WEATHER_API_KEY")`
Теперь ваше окружение настроено, и вы готовы приступить к разработке Slack-бота! В следующем разделе мы начнем реализовывать основные функции нашего бота.
Реализация базовой структуры Slack-бота
Теперь, когда мы настроили окружение и конфигурационные файлы, можно приступить к реализации базовой структуры нашего Slack-бота. В этом разделе мы создадим основу нашего бота с использованием Flask и Slack SDK. Мы настроим обработку команд, отправку сообщений и взаимодействие с пользователями.
1. Создание структуры проекта
Для удобства разработки и поддержки кода важно организовать проект в соответствии с общепринятыми стандартами. Создадим следующую структуру директорий и файлов:
`slack_bot/ │ ├── app.py # Главный файл приложения ├── config.py # Конфигурационный файл ├── requirements.txt # Зависимости проекта ├── .env # Файл с переменными окружения ├── .gitignore # Файл для исключения из контроля версий ├── venv/ # Виртуальное окружение └── __pycache__/ # Кэш Python (будет создан автоматически)`
2. Настройка Flask-приложения
Файл app.py
будет основным файлом нашего бота. В нем мы настроим Flask-приложение и подключим Slack SDK для обработки событий и команд. Начнем с написания кода, который настроит сервер и обеспечит базовую обработку команд Slack.
Flask-приложение — это веб-сервер, который будет принимать HTTP-запросы от Slack, обрабатывать команды и отправлять ответы через API Slack. Также мы используем библиотеку Slack SDK для управления событиями и сообщениями.
Начнем нашу разработку с имортов и создание приложения:
from flask import Flask, request, jsonify from slack_sdk import WebClient from slack_sdk.errors import SlackApiError import logging from weather import fetch_weather from db import init_db, add_task, get_tasks from config import SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET # Создание Flask-приложения app = Flask(__name__) # Инициализация Slack клиента с токеном бота client = WebClient(token=SLACK_BOT_TOKEN) # Настройка логирования для удобства отладки logging.basicConfig(level=logging.INFO) # Инициализация базы данных для задач init_db()
-
Flask-приложение: Инициализируется экземпляр Flask, который будет обрабатывать запросы от Slack.
-
Slack SDK: Используется клиент
WebClient
для отправки сообщений в Slack. -
Логирование: Позволяет отслеживать работу бота и возможные ошибки.
-
Инициализация базы данных: Вызывается функция
init_db
для создания таблиц.
Теперь перейдем к обработчику команд Slack:
@app.route('/slack/command', methods=['POST']) def command_handler(): # Получение данных о команде data = request.form command = data.get('command') user_id = data.get('user_id') # Определение команды if command == '/hello': return hello_command(user_id) elif command == '/weather': return weather_command(user_id) elif command == '/task': return task_command(user_id) else: return jsonify(response_type='ephemeral', text="Команда не поддерживается."), 200
-
Маршруты: Flask принимает запросы по маршруту
/slack/command
. -
Команды: Бот обрабатывает команды
/hello
,/weather
, и/task
, вызывая соответствующие функции. Пришло время заняться обработчиками команд для нашего бота
Обработка команды /hello
:
def hello_command(user_id): try: client.chat_postMessage( channel=user_id, text="Привет! Как я могу помочь вам сегодня?", attachments=[ { "text": "Выберите опцию:", "fallback": "Выберите опцию", "callback_id": "hello_options", "actions": [ { "name": "option", "text": "Получить погоду", "type": "button", "value": "weather" }, { "name": "option", "text": "Просмотреть задачи", "type": "button", "value": "tasks" } ] } ] ) return jsonify(response_type='in_channel', text="Опции отправлены."), 200 except SlackApiError as e: logging.error(f"Ошибка отправки сообщения: {e.response['error']}") return jsonify(response_type='ephemeral', text="Произошла ошибка при отправке сообщения."), 500
-
Отправка сообщений: Slack-бот отправляет сообщение с предложением выбрать действие через кнопки.
-
Кнопки действий: Пользователь может выбрать действия для получения прогноза погоды или просмотра задач.
Обработка интерактивных действий:
@app.route('/slack/interactive', methods=['POST']) def interactive_handler(): payload = request.json actions = payload.get('actions', []) action = actions[0] if actions else None if action and action['value'] == 'weather': return weather_command(payload['user']['id']) elif action and action['value'] == 'tasks': return task_command(payload['user']['id']) else: return jsonify(text="Неизвестное действие."), 200
-
Интерактивные действия: Обрабатываются нажатия кнопок пользователем и вызываются функции для выполнения соответствующих команд.
Обработчик команды /weather
:
def weather_command(user_id): weather_info = fetch_weather() try: client.chat_postMessage( channel=user_id, text=weather_info ) return jsonify(response_type='in_channel', text="Прогноз погоды отправлен."), 200 except SlackApiError as e: logging.error(f"Ошибка отправки сообщения: {e.response['error']}") return jsonify(response_type='ephemeral', text="Произошла ошибка при отправке сообщения."), 500
-
Погода: Бот вызывает функцию
fetch_weather
, которая возвращает прогноз погоды, и отправляет его пользователю в Slack.
Обработка команды /task
:
def task_command(user_id): tasks = get_tasks(user_id) if tasks: tasks_list = "\n".join([task[0] for task in tasks]) message = f"Ваши задачи:\n{tasks_list}" else: message = "У вас нет задач." try: client.chat_postMessage( channel=user_id, text=message ) return jsonify(response_type='in_channel', text="Список задач отправлен."), 200 except SlackApiError as e: logging.error(f"Ошибка отправки сообщения: {e.response['error']}") return jsonify(response_type='ephemeral', text="Произошла ошибка при отправке сообщения."), 500
-
Задачи**: Функция
task_command
запрашивает список задач для конкретного пользователя через базу данных и отправляет его в Slack.
Обработка событий Slack:
@app.route('/slack/events', methods=['POST']) def slack_events(): if 'challenge' in request.json: return jsonify({'challenge': request.json['challenge']}) event = request.json.get('event', {}) if event.get('type') == 'message' and not event.get('bot_id'): user = event.get('user') text = event.get('text') channel = event.get('channel') if 'привет' in text.lower(): try: client.chat_postMessage( channel=channel, text=f"Привет, <@{user}>! Как дела?" ) except SlackApiError as e: logging.error(f"Ошибка отправки сообщения: {e.response['error']}") return '', 200
-
События: Бот реагирует на текстовые сообщения, отправленные пользователями, и отвечает, если пользователь пишет «привет».
Осталось самое основное — это запуск нашего приложения приложения
if __name__ == "__main__": app.run(port=3000)
Файл weather.py
Файл weather.py
содержит логику для получения актуальной информации о погоде с помощью внешнего API. Мы используем сервис OpenWeatherMap, который предоставляет погодные данные по городам, такие как температура, состояние погоды и другие метрики.
import requests from config import WEATHER_API_KEY # Функция для получения данных о погоде def fetch_weather(city="Москва"): # Формирование URL для запроса к API OpenWeatherMap url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={WEATHER_API_KEY}&units=metric&lang=ru" # Выполнение GET-запроса к API response = requests.get(url) # Преобразование ответа в JSON data = response.json() # Проверка успешности запроса if response.status_code == 200: weather = data['weather'][0]['description'] # Описание погоды temperature = data['main']['temp'] # Температура return f"Погода в {city}: {weather}, {temperature}°C" else: return "Не удалось получить данные о погоде."
Основные моменты кода:
-
API OpenWeatherMap: Мы используем публичный API сервиса OpenWeatherMap для получения данных о погоде. Для этого необходим ключ API, который хранится в файле конфигурации
config.py
. -
Запрос данных о погоде: Функция
fetch_weather
принимает город (по умолчанию — «Москва») и выполняет HTTP-запрос для получения данных о текущей погоде. API возвращает данные в формате JSON, которые мы обрабатываем. -
Обработка ответа: Если запрос выполнен успешно (код ответа 200), функция возвращает строку с описанием текущей погоды и температурой. В случае ошибки возвращается сообщение о невозможности получить данные.
Пояснение работы с OpenWeatherMap:
-
Параметры запроса:
-
q={city}
— задает название города. -
appid={WEATHER_API_KEY}
— API-ключ, который вы должны получить, зарегистрировавшись на сайте OpenWeatherMap. -
units=metric
— возвращает температуру в градусах Цельсия. -
lang=ru
— возвращает описание погоды на русском языке.
-
Этот файл служит для интеграции с внешним сервисом и используется в основном приложении (app.py
) для отправки пользователю прогноза погоды в Slack.
После настройки базового Flask-приложения следующим шагом будет подключение других компонентов, таких как работа с базой данных для задач и настройка API для получения данных о погоде, что мы рассмотрим в следующих разделах.
3. Настройка базы данных для задач
Для управления задачами в нашем Slack-боте мы будем использовать SQLite — встроенную базу данных, которая отлично подходит для небольших проектов. База данных будет хранить задачи пользователей, а бот сможет добавлять и извлекать их по запросу.
Создадим файл db.py
, который будет содержать логику для работы с базой данных:
import sqlite3 def init_db(): conn = sqlite3.connect('bot.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY, user_id TEXT NOT NULL, task TEXT NOT NULL ) ''') conn.commit() conn.close() def add_task(user_id, task): conn = sqlite3.connect('bot.db') cursor = conn.cursor() cursor.execute('INSERT INTO tasks (user_id, task) VALUES (?, ?)', (user_id, task)) conn.commit() conn.close() def get_tasks(user_id): conn = sqlite3.connect('bot.db') cursor = conn.cursor() cursor.execute('SELECT task FROM tasks WHERE user_id = ?', (user_id,)) tasks = cursor.fetchall() conn.close() return tasks
Основные моменты кода:
-
Инициализация базы данных: Функция
init_db
создает таблицуtasks
, если она еще не существует. Таблица будет хранить задачи, которые привязываются к пользователю через егоuser_id
. -
Добавление задач: Функция
add_task
добавляет новую задачу в базу данных, связывая ее с пользователем черезuser_id
. -
Получение списка задач: Функция
get_tasks
возвращает все задачи, которые пользователь добавил в базу данных.
Теперь, когда у нас есть код для работы с базой данных, мы можем интегрировать его в наше основное приложение (app.py
). Бот будет реагировать на команды /task
, добавляя новые задачи или возвращая список задач пользователя.
Для полноценной работы нашего Slack-приложения и взаимодействия с API нам потребуется сделать последний шаг, а именно получить несколько токенов для работы всех API.
Как получить необходимые токены ?
Для работы вашего Slack-бота вам понадобятся три токена:
-
SLACK_BOT_TOKEN — токен вашего бота для взаимодействия с API Slack.
-
SLACK_SIGNING_SECRET — секрет для проверки подлинности запросов от Slack.
-
WEATHER_API_KEY — ключ API для получения данных о погоде от OpenWeather.
1. Как получить SLACK_BOT_TOKEN
-
Перейдите на API.Slack (api.slack.com) и войдите в свой аккаунт Slack.
-
Выберите или создайте приложение для вашего бота.
-
В меню слева перейдите в раздел OAuth & Permissions.
-
Прокрутите вниз до раздела OAuth Tokens for Your Workspace.
-
Нажмите Install App to Workspace и подтвердите разрешения.
-
После успешной установки вам будет предоставлен Bot User OAuth Token — это и есть ваш
SLACK_BOT_TOKEN
. Сохраните его.
2. Как получить SLACK_SIGNING_SECRET
-
На той же странице приложения в панели управления Slack перейдите в раздел Basic Information.
-
Прокрутите вниз до раздела App Credentials.
-
Там вы найдете поле Signing Secret. Это ваш
SLACK_SIGNING_SECRET
. Скопируйте и сохраните его
3. Как получить WEATHER_API_KEY
-
Перейдите на сайт OpenWeather и зарегистрируйтесь, если у вас нет аккаунта.
-
После регистрации войдите в свою учетную запись и перейдите в раздел API keys.
-
Создайте новый ключ или используйте уже существующий. Этот ключ и будет вашим
WEATHER_API_KEY
.
4. Тестирование на локальном сервере
Чтобы протестировать наш бот на локальной машине, выполните команду:
python app.py
Ваше Flask-приложение будет запущено на порту 3000. Однако, чтобы Slack мог отправлять события вашему боту, он должен быть доступен из интернета. Для этого вы можете использовать инструмент ngrok, который создаст туннель к вашему локальному серверу
Установка и настройка Ngrok на Mac и Windows
Ngrok — это инструмент, который позволяет создавать безопасный туннель от вашего локального сервера к публичному интернету. Это удобно для разработки веб-приложений и ботов, когда вам нужно протестировать вебхуки или интеграцию с внешними сервисами, например, с Slack.
Шаг 1: Установка Ngrok
Установка на Mac
-
Откройте терминал и установите Homebrew (если он еще не установлен) с помощью команды:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
Установите ngrok с помощью Homebrew:
brew install ngrok/ngrok/ngrok
-
Проверьте, что ngrok установлен:
ngrok version
Установка на Windows
-
Скачайте последнюю версию ngrok с официального сайта: ngrock
-
Разархивируйте файл
ngrok.zip
. -
Переместите файл
ngrok.exe
в любую директорию по вашему выбору, например,C:\ngrok
. -
Откройте Командную строку (cmd) и перейдите в директорию с ngrok:
cd C:\ngrok
-
Проверьте версию ngrok:
ngrok version
Шаг 2: Аутентификация в Ngrok
Ngrok требует аутентификации, чтобы управлять туннелями через ваш аккаунт.
-
Зарегистрируйтесь на сайте ngrok.com.
-
На главной странице аккаунта скопируйте ваш auth token.
-
Введите следующую команду в терминале (на Mac) или в командной строке (на Windows) для подключения вашего аккаунта к ngrok:
ngrok config add-authtoken YOURTOKEN
Замените YOUR_TOKEN
на ваш токен, скопированный из аккаунта ngrok.
Шаг 3: Запуск Ngrok
Теперь, когда ngrok установлен и аутентифицирован, вы можете запустить туннель.
-
Убедитесь, что ваше Flask-приложение работает на порту 3000:
python app.py
-
Откройте терминал (или командную строку) и запустите ngrok для проксирования вашего локального сервера:
ngrok http 3000
После запуска мы получим такое окно со всеми данными по нашему боту
Теперь вы можете использовать этот URL для настройки вебхуков и взаимодействия со Slack.
Шаг 4: Настройка Slack
-
Перейдите в панель управления вашего приложения на api.slack.com/apps.
-
В меню слева выберите Event Subscriptions.
-
Включите события, переключив тумблер Enable Events.
-
В поле Request URL вставьте публичный URL, который вам выдал ngrok, добавив к нему
/slack/events
. Например:
http://your-ngrok-url.ngrok.io/slack/events
-
После этого Slack начнет проверку URL. Если все прошло успешно, вы можете продолжить настройку событий.
-
Прокрутите ниже до раздела Subscribe to Bot Events и добавьте нужные события, такие как
message.im
(для получения личных сообщений). -
Сохраните изменения, и теперь ваше приложение будет получать события от Slack через ngrok.
Теперь бот настроен для взаимодействия со Slack через локальный сервер!
Деплой на сервера Amvera
После успешного тестирования Slack-бота на локальном сервере с использованием ngrok, следующим шагом станет развертывание его на удаленном сервере, чтобы обеспечить его доступность 24/7 и избавиться от зависимости от вашего локального компьютера.
В данном разделе мы рассмотрим процесс деплоя на серверы Amvera, включая настройку виртуальной машины, установку зависимостей и настройку автоматического запуска приложения.
Почему Amvera?
-
это наш блог)
-
развертывание кода и накатывание обновлений намного проще чем настройка VPS. Базовый CI/СD уже всторен и осуществляется через git push amvera master
-
есть множество уже встроенных возможностей, упрощающих использование (бесплатные SSL сертификаты, кластеры баз данных с бэкапами и т.д.).
Регистрация в сервисе
-
Создание аккаунт:
-
Перейдите на сайт Amvera и нажмите на кнопку «Регистрация». Заполните поля и подтвердите почту.
-
После входа на платформу, на главной странице нажмите на кнопку «Создать» или «Создать первый!».
-
-
Настройка проекта:
-
Присвойте вашему проекту название (лучше на английском языке).
-
Выберите тарифный план. Для развертывания бота будет достаточно самого простого тарифа.
-
Начального баланса хватит для того, чтобы наш бот работал бесплатно и непрерывно первое время .
-
-
Подготовка кода для развертывания:
-
Amvera использует git для доставки кода в облако. Вам потребуется создать файл конфигурации
amvera.yml
, который подскажет облаку, как запускать ваш проект. -
Для упрощения создания этого файла воспользуйтесь графическим инструментом генерации.
Задание конфигурации
-
Выбор окружения и зависимостей:
-
Укажите версию Python и путь до файла
requirements.txt
, который содержит все необходимые пакеты. -
Укажите путь до основного файла вашего проекта, например
main.py
.
-
-
Генерация и загрузка файла:
-
Нажмите «Generate YAML» для создания файла
amvera.yml
и загрузите его в корень вашего проекта.
-
Файл конфигурации amvera.yml
служит для того, чтобы платформа Amvera знала, как правильно собрать и запустить ваш проект. Этот файл содержит ключевую информацию об окружении, зависимостях, а также инструкциях для запуска приложения.
Структура файла amvera.yml
:
meta: environment: python # Указывает, что проект использует Python в качестве окружения. toolchain: name: pip # Определяет менеджер пакетов для установки зависимостей. version: "3.8" # Задает версию Python для окружения проекта. build: requirementsPath: requirements.txt # Путь к файлу, где указаны все необходимые зависимости. run: scriptName: app.py # Основной файл вашего проекта, который будет запущен после сборки. persistenceMount: /data # Директория для хранения постоянных данных. containerPort: 3000 # Порт, на котором будет доступен ваш проект в контейнере.
Для того чтобы наш проект корректно работал в среде Amvera, важно указать все необходимые пакеты в файле requirements.txt
. Этот файл определяет все зависимости Python, которые нужны для выполнения кода.
Вот так выглядит наш файл requirements.txt
:
Flask==3.0.3 slack-sdk==3.11.0 requests==2.26.0 python-dotenv==0.19.2
Инициализация и отправка проекта в репозиторий:
-
Инициализируйте git репозиторий в корне вашего проекта, если это еще не сделано:
git init
-
Привяжите локальный репозиторий к удаленному на Amvera:
git remote add amvera <https://git.amvera.ru/ваш_юзернейм/ваш_проект>
-
Добавьте и зафиксируйте изменения:
git add . git commit -m "Initial commit"
-
Отправьте проект в облако:
git push amvera master
Сборка и развертывание проекта:
-
После отправки проекта в систему, на странице проекта статус изменится на «Выполняется сборка». После завершения сборки проект перейдет в стадию «Выполняется развертывание», а затем в статус «Успешно развернуто».
-
Если проект не развернулся, проверьте логи сборки и логи приложения для отладки.
-
Если проект завис на этапе «Сборка», убедитесь в корректности файла
amvera.yml
Ну что, подведем итоги?
Итак, мы с вами прошли весь путь от создания Slack-бота на домашнем устройстве до его запуска на настоящем сервере. Круто, да? Вы теперь знаете, как собрать Flask-приложение, которое будет отвечать на команды в Slack, показывать погоду и даже управлять списком дел.
А еще мы разобрались, как использовать ngrok для тестирования и как запустить бота на Amvera для работы 24/7.
Автор: Алексей Пономарев
Релевантные статьи:
ссылка на оригинал статьи https://habr.com/ru/articles/841652/
Добавить комментарий