В этой статье мы рассмотрим процесс разработки Slack-бота на Python с использованием популярных библиотек и фреймворков, таких как Flask и Slack SDK. Мы начнем с выбора инструментов, необходимых для создания бота, и шаг за шагом пройдем через все этапы разработки: от настройки окружения и написания кода до тестирования и деплоя на сервер.

Что будет делать наш Slack-бот?

Наш Slack-бот будет предоставлять собой многофункциональный инструмент, интегрированный в рабочие процессы Slack. Он будет обладать следующим функционалом:

  1. Приветствие и взаимодействие с пользователями:

    • При получении команды /hello, бот отправляет персонализированное приветствие и предоставляет интерактивные опции. Пользователю предлагается выбор между получением метеорологической сводки или обзором текущих задач посредством интерактивных элементов интерфейса.

  2. Получение прогноза погоды:

    • По команде /weather или через выбор кнопки "Получить погоду", бот получает данные о текущей погоде в заданном городе (по умолчанию Москва) и отправляет их пользователю.

  3. Управление задачами:

    • Бот позволяет пользователям добавлять задачи в базу данных и просматривать их через команду /taskили через соответствующую кнопку. Это полезно для организации личных дел и мелких задач прямо внутри Slack.

  4. Реакция на сообщения:

    • Бот может реагировать на определенные текстовые сообщения (например, "привет"), отправляя соответствующий ответ в канал.

Развертывание мы осуществим в 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 "Не удалось получить данные о погоде."

Основные моменты кода:

  1. API OpenWeatherMap: Мы используем публичный API сервиса OpenWeatherMap для получения данных о погоде. Для этого необходим ключ API, который хранится в файле конфигурации config.py.

  2. Запрос данных о погоде: Функция fetch_weather принимает город (по умолчанию — "Москва") и выполняет HTTP-запрос для получения данных о текущей погоде. API возвращает данные в формате JSON, которые мы обрабатываем.

  3. Обработка ответа: Если запрос выполнен успешно (код ответа 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

Основные моменты кода:

  1. Инициализация базы данных: Функция init_db создает таблицу tasks, если она еще не существует. Таблица будет хранить задачи, которые привязываются к пользователю через его user_id.

  2. Добавление задач: Функция add_task добавляет новую задачу в базу данных, связывая ее с пользователем через user_id.

  3. Получение списка задач: Функция get_tasks возвращает все задачи, которые пользователь добавил в базу данных.

Теперь, когда у нас есть код для работы с базой данных, мы можем интегрировать его в наше основное приложение (app.py). Бот будет реагировать на команды /task, добавляя новые задачи или возвращая список задач пользователя.

Для полноценной работы нашего Slack-приложения и взаимодействия с API нам потребуется сделать последний шаг, а именно получить несколько токенов для работы всех API.

Как получить необходимые токены ?

Для работы вашего Slack-бота вам понадобятся три токена:

  1. SLACK_BOT_TOKEN — токен вашего бота для взаимодействия с API Slack.

  2. SLACK_SIGNING_SECRET — секрет для проверки подлинности запросов от Slack.

  3. WEATHER_API_KEY — ключ API для получения данных о погоде от OpenWeather.

1. Как получить SLACK_BOT_TOKEN

  1. Перейдите на API.Slack (api.slack.com) и войдите в свой аккаунт Slack.

  2. Выберите или создайте приложение для вашего бота.

  3. В меню слева перейдите в раздел OAuth & Permissions.

  4. Прокрутите вниз до раздела OAuth Tokens for Your Workspace.

  5. Нажмите Install App to Workspace и подтвердите разрешения.

  6. После успешной установки вам будет предоставлен Bot User OAuth Token — это и есть ваш SLACK_BOT_TOKEN. Сохраните его.

2. Как получить SLACK_SIGNING_SECRET

  1. На той же странице приложения в панели управления Slack перейдите в раздел Basic Information.

  2. Прокрутите вниз до раздела App Credentials.

  3. Там вы найдете поле Signing Secret. Это ваш SLACK_SIGNING_SECRET. Скопируйте и сохраните его

3. Как получить WEATHER_API_KEY

  1. Перейдите на сайт OpenWeather и зарегистрируйтесь, если у вас нет аккаунта.

  2. После регистрации войдите в свою учетную запись и перейдите в раздел API keys.

  3. Создайте новый ключ или используйте уже существующий. Этот ключ и будет вашим WEATHER_API_KEY.

4. Тестирование на локальном сервере

Чтобы протестировать наш бот на локальной машине, выполните команду:

python app.py

Ваше Flask-приложение будет запущено на порту 3000. Однако, чтобы Slack мог отправлять события вашему боту, он должен быть доступен из интернета. Для этого вы можете использовать инструмент ngrok, который создаст туннель к вашему локальному серверу

Установка и настройка Ngrok на Mac и Windows

Ngrok — это инструмент, который позволяет создавать безопасный туннель от вашего локального сервера к публичному интернету. Это удобно для разработки веб-приложений и ботов, когда вам нужно протестировать вебхуки или интеграцию с внешними сервисами, например, с Slack.

Шаг 1: Установка Ngrok

Установка на Mac

  1. Откройте терминал и установите Homebrew (если он еще не установлен) с помощью команды:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. Установите ngrok с помощью Homebrew:

brew install ngrok/ngrok/ngrok
  1. Проверьте, что ngrok установлен:

ngrok version

Установка на Windows

  1. Скачайте последнюю версию ngrok с официального сайта: ngrock

  2. Разархивируйте файл ngrok.zip.

  3. Переместите файл ngrok.exe в любую директорию по вашему выбору, например, C:\ngrok.

  4. Откройте Командную строку (cmd) и перейдите в директорию с ngrok:

cd C:\ngrok
  1. Проверьте версию ngrok:

ngrok version

Шаг 2: Аутентификация в Ngrok

Ngrok требует аутентификации, чтобы управлять туннелями через ваш аккаунт.

  1. Зарегистрируйтесь на сайте ngrok.com.

  2. На главной странице аккаунта скопируйте ваш auth token.

  3. Введите следующую команду в терминале (на Mac) или в командной строке (на Windows) для подключения вашего аккаунта к ngrok:

ngrok config add-authtoken YOURTOKEN

Замените YOUR_TOKEN на ваш токен, скопированный из аккаунта ngrok.

Шаг 3: Запуск Ngrok

Теперь, когда ngrok установлен и аутентифицирован, вы можете запустить туннель.

  1. Убедитесь, что ваше Flask-приложение работает на порту 3000:

 python app.py
  1. Откройте терминал (или командную строку) и запустите ngrok для проксирования вашего локального сервера:

ngrok http 3000

После запуска мы получим такое окно со всеми данными по нашему боту



Теперь вы можете использовать этот URL для настройки вебхуков и взаимодействия со Slack.

Шаг 4: Настройка Slack

  1. Перейдите в панель управления вашего приложения на api.slack.com/apps.

  2. В меню слева выберите Event Subscriptions.

  3. Включите события, переключив тумблер Enable Events.

  4. В поле Request URL вставьте публичный URL, который вам выдал ngrok, добавив к нему /slack/events. Например:

http://your-ngrok-url.ngrok.io/slack/events
  1. После этого Slack начнет проверку URL. Если все прошло успешно, вы можете продолжить настройку событий.

  2. Прокрутите ниже до раздела Subscribe to Bot Events и добавьте нужные события, такие как message.im (для получения личных сообщений).

  3. Сохраните изменения, и теперь ваше приложение будет получать события от Slack через ngrok.

Теперь бот настроен для взаимодействия со Slack через локальный сервер!

Деплой на сервера Amvera

После успешного тестирования Slack-бота на локальном сервере с использованием ngrok, следующим шагом станет развертывание его на удаленном сервере, чтобы обеспечить его доступность 24/7 и избавиться от зависимости от вашего локального компьютера.
В данном разделе мы рассмотрим процесс деплоя на серверы Amvera, включая настройку виртуальной машины, установку зависимостей и настройку автоматического запуска приложения.

Почему Amvera?

  • это наш блог)

  • развертывание кода и накатывание обновлений намного проще чем настройка VPS. Базовый CI/СD уже всторен и осуществляется через git push amvera master

  • есть множество уже встроенных возможностей, упрощающих использование (бесплатные SSL сертификаты, кластеры баз данных с бэкапами и т.д.).

Регистрация в сервисе

  1. Создание аккаунт:

    • Перейдите на сайт Amvera и нажмите на кнопку "Регистрация". Заполните поля и подтвердите почту.

    • После входа на платформу, на главной странице нажмите на кнопку "Создать" или "Создать первый!".

  2. Настройка проекта:

    • Присвойте вашему проекту название (лучше на английском языке).

    • Выберите тарифный план. Для развертывания бота будет достаточно самого простого тарифа.

    • Начального баланса хватит для того, чтобы наш бот работал бесплатно и непрерывно первое время .

  3. Подготовка кода для развертывания:

  • 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.

Автор: Алексей Пономарев


Релевантные статьи:

Комментарии (0)