Полноценный стек для Discord-бота:
bot(discord.py) с slash-командами, модерацией, автоматизациями и интеграциями.api(FastAPI) для веб-панели и защищенного доступа.frontend(React + Vite) для управления сервером через браузер.postgres+redis.- новая система внешних плагинов из GitHub Release через раздел Плагины в панели.
Discord -> bot (discord.py)
|
v
postgres <-> api (FastAPI) <-> frontend (React)
^
|
redis cache
api <-> bot management API (enable/disable/reload plugin)
api <-> /plugins volume (download/install plugin package)
bot <-> /plugins volume (runtime load plugin)
- Базовые cogs: админ-функции, модерация, опросы, welcome/events, voice, feeds.
- Вход в веб-панель через одноразовый код
/site. - Панель управления сервером, участниками, модерацией, опросами, статистикой, настройками.
- Plugin Marketplace Runtime:
- установка плагина из GitHub release-архива (
.zip/.tar.gz), - статусы плагина (
enabled,disabled,error), - включение/выключение/перезагрузка/удаление без ручного редактирования кода,
- авто-подгрузка включенных плагинов после рестарта бота.
- установка плагина из GitHub release-архива (
api/ FastAPI backend
bot/ Discord bot + built-in cogs + plugin runtime
db/ SQL schema + migrations
frontend/ React web panel
plugins/ Каталог установленных внешних плагинов (runtime)
Требования:
- Docker 24+
- Docker Compose v2+
Шаги:
- Скопируйте
.env.exampleв.env. - Заполните все обязательные переменные (см. раздел ниже).
- Запустите:
docker compose up -d --buildПроверка:
- API health:
http://localhost:8000/health - Frontend:
http://localhost:3000
Остановка:
docker compose downsudo apt update
sudo apt install -y python3 python3-venv python3-pip nodejs npm postgresql redis-server- API:
cd api
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000- Bot:
cd bot
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python main.py- Frontend:
cd frontend
npm install
npm run build
npm run dev- Установите: Python 3.11+, Node.js 20+, PostgreSQL, Redis.
- API:
cd api
py -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000- Bot:
cd bot
py -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python main.py- Frontend:
cd frontend
cmd /c npm install
cmd /c npm run devbrew install python node postgresql redisДальше шаги те же, что для Linux.
Минимум для старта:
DISCORD_TOKEN=
SERVER_ID=
DATABASE_URL=postgresql://discord_bot:secure_password@postgres:5432/discord_bot_db
REDIS_URL=redis://redis:6379/0
API_SECRET_KEY=
BOT_MANAGEMENT_TOKEN=Подробно по ключам:
DISCORD_TOKEN- токен бота из Discord Developer Portal.BOT_PREFIX- префикс текстовых команд (для slash не обязателен).SERVER_ID- ID сервера для мгновенного sync slash-команд.WELCOME_CHANNEL_ID,BOOST_CHANNEL_ID,TRIGGER_VOICE_CHANNEL_ID,DYNAMIC_VOICE_CATEGORY_ID- ID каналов/категорий.TELEGRAM_FORWARD_CHANNEL_ID,YOUTUBE_FORWARD_CHANNEL_ID- default каналы для пересылки.
POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB- параметры Postgres.DATABASE_URL- строка подключения для API и бота.
API_HOST,API_PORT- адрес API.API_SECRET_KEY- секрет JWT (обязательно заменить).API_ADMIN_USER,API_ADMIN_PASSWORD- legacy параметры (можно оставить).
WEB_PANEL_URL- публичный URL панели (используется в сообщениях бота).VITE_API_URL(в контейнере frontend) - URL API, обычно/apiчерез reverse proxy.
TELEGRAM_API_TOKEN,TELEGRAM_CHANNELS,TELEGRAM_CHECK_INTERVALYOUTUBE_API_KEY,YOUTUBE_CHANNELS,YOUTUBE_CHECK_INTERVAL
PLUGINS_DIR- общий путь к установленным плагинам (/pluginsв Docker).BOT_MANAGEMENT_URL- URL внутреннего управления ботом (для API), по умолчаниюhttp://bot:8091.BOT_MANAGEMENT_HOST/BOT_MANAGEMENT_PORT- на чем бот поднимает внутренний plugin API.BOT_MANAGEMENT_TOKEN- общий токен API<->бот (обязательно длинный случайный).
ENVIRONMENT-productionилиdevelopment.DEBUG-true/false.
/site,/stats,/afk,/ping,/panel,/serverrules,/serverinfo/userinfo,/userinfox,/avatar/setup,/templates,/welcomepreset,/setwelcome,/setwelcomevariants/setchannelcfg,/setsetting,/permissions,/setfeedstyle/announce,/language,/time,/roll,/choose,/remind,/botinfo,/help
/warn,/masswarn,/warnings,/modlog/kick,/ban,/unban/purge,/clear,/slowmode,/slowmodepreset,/lock,/unlock/timeout,/untimeout,/nick,/roleadd,/roleremove,/note,/clearwarns
/poll
- Откройте раздел
Плагины. - Вставьте
Release Asset URL(например,https://github.com/org/repo/releases/download/v1.0.0/plugin.zip). - Нажмите
Установить плагин. - Управляйте кнопками:
EnableDisableReloadDelete
Статусы:
enabled- загружен в runtime.disabled- установлен, но не активен.error- ошибка загрузки/инициализации (см.last_error).
Архив релиза должен содержать plugin.json:
{
"slug": "coin-flip",
"name": "Coin Flip",
"version": "1.0.0",
"description": "Slash команда /coin",
"entrypoint": "coin_plugin.py"
}Требования:
slug:a-z,0-9,_,-.entrypoint: путь к.pyвнутри архива.entrypointдолжен экспортироватьsetup(bot).- Для корректного выключения рекомендуется
teardown(bot).
- Клонируйте репозиторий на сервер.
- Создайте
.env. - Запустите:
docker compose up -d --build- Настройте reverse proxy (
nginx) для:
frontend:3000api:8000
- Добавьте TLS (Let's Encrypt).
- Проверьте health endpoints.
Перед push:
- убедитесь, что
.envне попал в git, - не коммитьте
node_modules,__pycache__, временные архивы, - оставьте в
plugins/только.gitkeep.
Проверка:
git status
git add .
git commit -m "feat: plugin system and web plugin manager"
git push origin main- Никогда не публикуйте
.env. - Сразу меняйте
API_SECRET_KEYиBOT_MANAGEMENT_TOKEN. - Устанавливайте плагины только из проверенных GitHub релизов.
- Для чувствительных плагинов делайте ревью кода перед установкой.
- Проверка сервиса:
docker compose logs -f apidocker compose logs -f botdocker compose logs -f frontend
- Проверка plugin runtime:
- если статус
error, смотритеlast_errorв панели и логи бота.
- если статус
Если нужен enterprise-режим (подпись релизов, allowlist репозиториев, sandbox для плагинов), это можно надстроить отдельным security-слоем в следующей итерации.