Полнофункциональная экосистема для создания и управления собственным Minecraft лаунчером.
Этот проект предоставляет полный набор инструментов для запуска своего Minecraft проекта: от мощного бэкенда и удобной админ-панели до кроссплатформенного десктопного клиента и Telegram-бота для взаимодействия с пользователями.
- Состав проекта
- Установка и запуск
- Доступ администратора и игроки
- Управление Docker Compose
- Кастомизация и ребрендинг
- Инфраструктура и Nginx
- Развертывание
- Технический стек
Система состоит из четырех взаимосвязанных компонентов:
-
🖥️ Server (Backend):
- API на FastAPI (Python).
- Авторизация через Yggdrasil API (совместимость с любыми клиентами).
- Хранение файлов в MinIO (S3-compatible) с дедупликацией.
- База данных PostgreSQL и кэширование в Redis.
- Поддержка RCON для управления игровыми серверами.
-
⚙️ Admin Web Panel:
- Современный интерфейс на React + Vite.
- Управление сборками, загрузка модов (drag & drop).
- Настройка синхронизации файлов (SFTP) и RCON.
- Файловый менеджер с редактором конфигов.
-
🎮 Desktop Client:
- Кроссплатформенный лаунчер на Electron + React.
- Автоматическая установка Java, Minecraft, Forge/Fabric.
- Система зеркал для быстрой загрузки.
- Оптимизация RAM и "стелс-режим".
-
🤖 Telegram Bot:
- Бот на aiogram для взаимодействия с пользователями.
- Авторизация администраторов.
- Система обратной связи.
- Docker Engine с Compose plugin либо Docker Desktop.
- Linux-сервер нужен для публичного развертывания с Nginx; локальный запуск возможен на Windows, macOS и Linux.
- Node.js нужен только для ручной сборки admin-web или desktop.
Все команды ниже выполняются из каталога vgltu_launcher, а не из корня репозитория.
cd vgltu_launcher
cp .env.example .envВ .env задайте пароли PostgreSQL, Redis и MinIO, а также SECRET_KEY. До первого SFTP/RCON-подключения задайте SFTP_ENCRYPTION_KEY: этот ключ шифрует сохранённые секреты, поэтому менять его после запуска нельзя.
Для локальной проверки без Telegram-бота запустите основной контур:
docker compose up -d --build postgres minio redis backend admin-web
docker compose psПосле запуска доступны:
- admin-панель:
http://localhost:5173; - OpenAPI backend:
http://localhost:8000/openapi.json.
Для входа администратора заполните BOT_TOKEN, ADMIN_IDS и BOT_CALLBACK_SECRET в .env. В ADMIN_IDS указываются числовые Telegram ID через запятую. BOT_CALLBACK_SECRET должен быть одинаковым у backend и bot.
Ограничение текущей конфигурации:
BOT_USERNAMEиз.env.exampleпока не передаётся Compose-сервисуbackend, поэтому ссылка из панели ведёт к@vgltuminecraftbot. Если у запущенного бота другой username, откройте его вручную и отправьте/start <код>.
docker compose up -d botОткройте admin-панель, перейдите по ссылке на бота или отправьте ему команду /start с показанным кодом. Код действует пять минут и после успешного входа удаляется.
install.sh предназначен только для нового или одноразового хоста. Перед началом он требует CLEANUP и удаляет Docker Engine, все Docker-контейнеры и volumes, /var/lib/docker, Nginx, локальный .env и docker-data. Не запускайте его на рабочем сервере или локальном компьютере с нужными Docker-данными.
cd vgltu_launcher
chmod +x install.sh
./install.shИгровые учётные записи создаёт авторизованный администратор через POST /api/admin/players. У игрока должен быть пароль длиной не менее 12 символов; сервер хранит только его hash. Desktop-клиент передаёт введённый игроком пароль в Yggdrasil API, саморегистрация отсутствует.
Пример запроса и команды обслуживания приведены в инструкции Docker Compose.
Управление проектом осуществляется через стандартные команды Docker Compose.
| Действие | Команда |
|---|---|
| Запуск | docker compose up -d |
| Остановка | docker compose stop |
| Перезапуск | docker compose restart |
| Статус | docker compose ps |
| Логи | docker compose logs -f [service] (backend, bot, admin-web) |
| Полный сброс | docker compose down -v ( |
Подробнее о командах Docker читайте в DOCKER_COMMANDS.md.
Вы можете легко изменить название, ID приложения и другие параметры под свой проект.
-
Настройка
branding.json: Откройте файлbranding.jsonи измените значения:{ "name": "My Super Launcher", "shortName": "mylauncher", "appId": "com.mylauncher.app", "adminTitle": "My Admin Panel" } -
Применение изменений: Запустите скрипт ребрендинга, который автоматически обновит файлы проекта.
python3 rebrand.py
Для работы в продакшене (с SSL и красивым доменом) используется Nginx.
На новом выделенном хосте install.sh устанавливает Docker и Nginx, генерирует окружение и подготавливает конфигурацию. Его полный сброс хоста описан в разделе установки выше.
Для существующего сервера настройте Nginx вручную после запуска Compose:
- Установите Nginx:
sudo apt install nginx. - Скопируйте конфиг:
sudo cp nginx/launcher.conf /etc/nginx/sites-available/launcher - Отредактируйте доменное имя в конфиге:
sudo nano /etc/nginx/sites-available/launcher - Активируйте сайт:
sudo ln -s /etc/nginx/sites-available/launcher /etc/nginx/sites-enabled/ - Проверьте конфигурацию:
sudo nginx -t - Перезапустите Nginx:
sudo systemctl reload nginx
Для получения SSL сертификата от Let's Encrypt:
sudo apt install python3-certbot-nginx
sudo certbot --nginx -d your-domain.com| Сервис | Локальный адрес на хосте с Docker | Через Nginx |
|---|---|---|
| Admin Panel | http://localhost:5173 |
https://your-domain.com/ |
| Backend API | http://localhost:8000 |
https://your-domain.com/api/ |
| MinIO API и Console | Только внутренняя сеть Docker | Не публикуются |
Перед публичным запуском:
-
.envфайл настроен, пароли изменены, аBOT_CALLBACK_SECRETиSFTP_ENCRYPTION_KEYсгенерированы. -
branding.jsonактуализирован. - Firewall (UFW) настроен (открыты порты 80, 443, 22).
- SSL сертификат получен и работает.
- Создана и проверена резервная копия PostgreSQL.
-
docker compose configиdocker compose psзавершаются без ошибок.
- Backend: Python 3.11, FastAPI, SQLAlchemy, Alembic
- Database: PostgreSQL 16
- Cache: Redis 7
- Storage: MinIO (S3)
- Frontend (Admin): React 18, Vite, Tailwind CSS, Shadcn UI
- Desktop: Electron 30, React, TypeScript
- Infrastructure: Docker, Nginx
Примечание: Проект находится в активной стадии разработки. Возможны изменения в API и структуре базы данных.