Compare commits
1 Commits
master
...
145622e8ec
| Author | SHA1 | Date | |
|---|---|---|---|
| 145622e8ec |
73
.drone.yml
73
.drone.yml
@@ -9,6 +9,8 @@ clone:
|
|||||||
# Запускать только если были изменения в папке backend/
|
# Запускать только если были изменения в папке backend/
|
||||||
trigger:
|
trigger:
|
||||||
event: [push, pull_request]
|
event: [push, pull_request]
|
||||||
|
path:
|
||||||
|
- backend/**
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: force-init-submodules
|
- name: force-init-submodules
|
||||||
@@ -54,6 +56,8 @@ clone:
|
|||||||
|
|
||||||
trigger:
|
trigger:
|
||||||
event: [push, pull_request]
|
event: [push, pull_request]
|
||||||
|
path:
|
||||||
|
- ping-helper/**
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: force-init-submodules
|
- name: force-init-submodules
|
||||||
@@ -82,78 +86,45 @@ steps:
|
|||||||
- ${DRONE_COMMIT_SHA:0:7}
|
- ${DRONE_COMMIT_SHA:0:7}
|
||||||
|
|
||||||
---
|
---
|
||||||
# --- Пайплайн №3: Сборка Docker-образа для frontend ---
|
# --- Пайплайн №3: Развертывание на продакшен-сервере ---
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: build-frontend
|
|
||||||
|
|
||||||
clone:
|
|
||||||
depth: 0
|
|
||||||
recursive: true
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
event: [push, pull_request]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: force-init-submodules
|
|
||||||
image: alpine/git
|
|
||||||
commands:
|
|
||||||
- git submodule deinit --all --force
|
|
||||||
- git submodule sync --recursive
|
|
||||||
- git submodule update --init --recursive --force
|
|
||||||
- echo "Submodule status after forced update:"
|
|
||||||
- git submodule status
|
|
||||||
- name: build-and-publish-frontend
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
repo: gitea.mrixs.me/minecraft-platform/frontend
|
|
||||||
registry: gitea.mrixs.me
|
|
||||||
dockerfile: frontend/Dockerfile
|
|
||||||
context: frontend
|
|
||||||
username: { from_secret: gitea_username }
|
|
||||||
password: { from_secret: gitea_password }
|
|
||||||
tags:
|
|
||||||
- latest
|
|
||||||
- ${DRONE_COMMIT_SHA:0:7}
|
|
||||||
|
|
||||||
---
|
|
||||||
# --- Пайплайн №4: Развертывание на продакшен-сервере ---
|
|
||||||
kind: pipeline
|
kind: pipeline
|
||||||
type: ssh
|
type: ssh
|
||||||
name: deploy-production
|
name: deploy-production
|
||||||
|
|
||||||
# Запускать только при пуше в ветку master
|
# Запускать только при пуше в ветку main
|
||||||
trigger:
|
trigger:
|
||||||
ref:
|
branch: [main]
|
||||||
- refs/heads/master
|
|
||||||
event: [push]
|
event: [push]
|
||||||
|
|
||||||
# Этот пайплайн зависит от успешного выполнения сборок
|
# Этот пайплайн зависит от успешного выполнения сборок
|
||||||
depends_on:
|
depends_on:
|
||||||
- build-backend
|
- build-backend
|
||||||
- build-ping-helper
|
- build-ping-helper
|
||||||
- build-frontend
|
|
||||||
|
|
||||||
# Настройки подключения к вашему серверу
|
# Настройки подключения к вашему серверу
|
||||||
server:
|
server:
|
||||||
host: { from_secret: ssh_host }
|
host: { from_secret: ssh_host }
|
||||||
user: { from_secret: ssh_user }
|
user: { from_secret: ssh_user }
|
||||||
ssh_key: { from_secret: ssh_key }
|
key: { from_secret: ssh_key }
|
||||||
|
|
||||||
# Команды, которые будут выполнены на сервере
|
# Команды, которые будут выполнены на сервере
|
||||||
|
# ВАЖНО: Замените /home/user/platform на реальный путь к вашему проекту на сервере
|
||||||
commands:
|
commands:
|
||||||
- echo "--- Starting deployment ---"
|
- echo "--- Starting deployment ---"
|
||||||
- cd $DEPLOY_PATH # Переходим в директорию проекта
|
- cd /home/user/platform # Переходим в директорию проекта
|
||||||
- echo "1. Updating repository..."
|
- echo "1. Updating repository..."
|
||||||
- git pull origin master # Обновляем основной репозиторий
|
- git pull origin main # Обновляем основной репозиторий
|
||||||
- git submodule update --init --recursive # Обновляем все субмодули
|
- git submodule update --init --recursive # Обновляем все субмодули
|
||||||
- echo "2. Pulling new Docker images..."
|
- echo "2. Building frontend static files..."
|
||||||
- docker compose pull # Скачиваем свежесобранные образы (backend, frontend, ping-helper)
|
# Запускаем одноразовый контейнер для сборки фронтенда
|
||||||
- echo "3. Restarting services..."
|
- docker run --rm -v $(pwd)/frontend:/app -v /app/node_modules -w /app node:18-alpine sh -c "npm install && npm run build"
|
||||||
- docker compose up -d --remove-orphans # Перезапускаем все сервисы
|
# Перемещаем собранную статику в папку data/frontend, которую использует Caddy
|
||||||
- echo "4. Cleaning up old images..."
|
- rm -rf ./data/frontend/*
|
||||||
|
- mv ./frontend/dist/* ./data/frontend/
|
||||||
|
- echo "3. Pulling new Docker images..."
|
||||||
|
- docker-compose pull # Скачиваем свежесобранные образы backend и ping-helper
|
||||||
|
- echo "4. Restarting services..."
|
||||||
|
- docker-compose up -d # Перезапускаем все сервисы в фоновом режиме
|
||||||
|
- echo "5. Cleaning up old images..."
|
||||||
- docker image prune -f # Удаляем неиспользуемые образы
|
- docker image prune -f # Удаляем неиспользуемые образы
|
||||||
- echo "--- Deployment finished ---"
|
- echo "--- Deployment finished ---"
|
||||||
|
|
||||||
environment:
|
|
||||||
DEPLOY_PATH: { from_secret: deploy_path }
|
|
||||||
|
|||||||
84
Caddyfile
84
Caddyfile
@@ -1,34 +1,52 @@
|
|||||||
# Внутренний Caddy (TLS обрабатывается внешним)
|
# Глобальный блок настроек
|
||||||
:80 {
|
{
|
||||||
# --- Заголовки безопасности ---
|
# Email для получения SSL-сертификатов от Let's Encrypt
|
||||||
header {
|
acme_email mrixs@mrixs.me
|
||||||
X-Frame-Options "SAMEORIGIN"
|
}
|
||||||
X-Content-Type-Options "nosniff"
|
|
||||||
Strict-Transport-Security "max-age=31536000;"
|
# Основной блок для вашего домена
|
||||||
}
|
mc.mrixs.me {
|
||||||
|
# Включаем сжатие для ускорения загрузки
|
||||||
# --- Маршрутизация запросов (route для явного порядка) ---
|
encode zstd gzip
|
||||||
route {
|
|
||||||
# 1. API бэкенда (Yggdrasil, Web, Admin)
|
# --- Маршрутизация запросов ---
|
||||||
reverse_proxy /api/* backend:8080
|
|
||||||
reverse_proxy /authserver/* backend:8080
|
# 1. API бэкенда (Yggdrasil, Web, Admin)
|
||||||
reverse_proxy /sessionserver/* backend:8080
|
handle_path /api/* /authserver/* /sessionserver/* {
|
||||||
|
reverse_proxy backend:8080
|
||||||
# 2. WebSocket для измерения пинга
|
}
|
||||||
reverse_proxy /ws/ping ping-helper:8081
|
|
||||||
|
# 2. WebSocket для измерения пинга
|
||||||
# 3. Раздача файлов (скины, модпаки)
|
handle_path /ws/ping* {
|
||||||
@files path /files/*
|
reverse_proxy ping-helper:8081
|
||||||
handle @files {
|
}
|
||||||
uri strip_prefix /files
|
|
||||||
root * /srv
|
# 3. Раздача файлов (скины, модпаки)
|
||||||
file_server
|
handle_path /files/* {
|
||||||
}
|
# Указываем корень, где лежат папки textures и modpacks
|
||||||
|
root * /srv
|
||||||
# 4. Фронтенд (Vue.js SPA) - все остальные запросы
|
# Включаем файловый сервер
|
||||||
reverse_proxy frontend:80
|
file_server
|
||||||
}
|
}
|
||||||
|
|
||||||
# Включаем сжатие
|
# 4. Раздача статики фронтенда (Vue.js SPA)
|
||||||
encode zstd gzip
|
# Этот блок обрабатывает все остальные запросы
|
||||||
|
handle {
|
||||||
|
root * /srv/frontend
|
||||||
|
# Если файл не найден, отдаем index.html (стандартное поведение для SPA)
|
||||||
|
try_files {path} /index.html
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Заголовки безопасности (рекомендация из ТЗ) ---
|
||||||
|
header {
|
||||||
|
# Запрещает встраивать сайт в iframe на других доменах
|
||||||
|
X-Frame-Options "SAMEORIGIN"
|
||||||
|
# Защита от MIME-сниффинга
|
||||||
|
X-Content-Type-Options "nosniff"
|
||||||
|
# Включает HSTS, заставляя браузеры использовать только HTTPS
|
||||||
|
Strict-Transport-Security "max-age=31536000;"
|
||||||
|
# Базовая политика безопасности контента
|
||||||
|
# Content-Security-Policy "..."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
62
README.md
62
README.md
@@ -2,58 +2,22 @@
|
|||||||
|
|
||||||
[](https://drone.mrixs.me/minecraft-platform/platform)
|
[](https://drone.mrixs.me/minecraft-platform/platform)
|
||||||
|
|
||||||
Единая платформа для создания, управления и распространения сборок Minecraft. Включает в себя систему авторизации (совместимую с Authlib Injector), управление модпаками, скинами и мониторинг игровых серверов.
|
Этот репозиторий является центральной точкой для проекта "Платформа Minecraft". Он объединяет все компоненты системы с помощью Git-субмодулей и содержит основную конфигурацию для развертывания и CI/CD.
|
||||||
|
|
||||||
---
|
## Архитектура
|
||||||
|
|
||||||
## Возможности
|
Проект построен на микросервисной архитектуре с использованием Docker и Docker Compose. Автоматическая сборка и развертывание осуществляется с помощью Drone CI.
|
||||||
|
|
||||||
### 🔐 Авторизация и Лаунчер
|
### Компоненты (субмодули)
|
||||||
- **Yggdrasil API**: Полная совместимость с лаунчерами, поддерживающими Authlib Injector APIs (HMCL, Prism Launcher и др.).
|
|
||||||
- **Система профилей**: Поддержка скинов (загрузка через веб-интерфейс).
|
|
||||||
- **Восстановление сессий**: Лаунчер запоминает вход пользователя.
|
|
||||||
|
|
||||||
### 📦 Управление Модпаками
|
* `backend/`: Основной бэкенд-сервер на Go. Реализует Yggdrasil API, Web API и Admin API.
|
||||||
- **Автоматический импорт**: Поддержка импорта сборок с **CurseForge** и **Modrinth** (.mrpack).
|
* `frontend/`: Веб-интерфейс на Vue.js для пользователей и администраторов.
|
||||||
- **Обновления**: Система версионирования сборок. Автоматическое обновление клиентов.
|
* `ping-helper/`: Вспомогательный WebSocket-сервис на Go для измерения пинга.
|
||||||
- **Оптимизация**: Дедупликация файлов для экономии места на сервере.
|
* `launcher/`: Кастомный игровой лаунчер (форк HMCL).
|
||||||
|
|
||||||
### 🖥️ Веб-интерфейс
|
### Конфигурация
|
||||||
- **Личный кабинет**: Управление профилем и скинами.
|
|
||||||
- **Админ-панель**: Управление пользователями, серверами и модпаками.
|
|
||||||
- **Мониторинг**: Отображение статуса серверов и онлайн-карты (**BlueMap**).
|
|
||||||
|
|
||||||
### ⚙️ Технические особенности
|
* `.drone.yml`: Пайплайн для Drone CI.
|
||||||
- **Микросервисная архитектура** (Go, Vue.js, PostgreSQL).
|
* `docker-compose.yml`: Описание сервисов для Docker.
|
||||||
- **Асинхронная обработка**: Фоновые задачи для тяжелых операций (импорт сборок) с WebSocket-уведомлениями.
|
* `Caddyfile`: Конфигурация веб-сервера Caddy.
|
||||||
- **Безопасность**: JWT авторизация, Rate Limiting, защита паролей (Argon2/Bcrypt).
|
* `scripts/`: Вспомогательные скрипты (миграции, бэкапы).
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Документация
|
|
||||||
|
|
||||||
Вся детальная документация находится в папке `docs/`:
|
|
||||||
|
|
||||||
* [🚀 Руководство по развертыванию](docs/DEPLOYMENT.md): Инструкции по установке, настройке Docker Compose и переменных окружения.
|
|
||||||
* [📖 Руководство пользователя и администратора](docs/USER_GUIDE.md): Инструкции по работе с сайтом, лаунчером и администрированию платформы.
|
|
||||||
* [🔌 OpenAPI Specification](backend/internal/api/openapi.yaml): Описание API для разработчиков.
|
|
||||||
|
|
||||||
## Быстрый старт (Dev)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Клонирование репозитория
|
|
||||||
git clone --recursive https://git.mrixs.me/minecraft-platform/platform.git
|
|
||||||
cd platform
|
|
||||||
|
|
||||||
# 2. Настройка переменных окружения
|
|
||||||
cp .env.example .env
|
|
||||||
# (Отредактируйте .env)
|
|
||||||
|
|
||||||
# 3. Генерация ключей
|
|
||||||
mkdir -p secrets
|
|
||||||
openssl genrsa -out secrets/private_key.pem 2048
|
|
||||||
openssl rsa -in secrets/private_key.pem -pubout -out secrets/public_key.pem
|
|
||||||
|
|
||||||
# 4. Запуск
|
|
||||||
docker-compose up -d --build
|
|
||||||
```
|
|
||||||
|
|||||||
2
backend
2
backend
Submodule backend updated: a1e022e966...29e85570f8
@@ -11,20 +11,11 @@ services:
|
|||||||
- "443:443/udp"
|
- "443:443/udp"
|
||||||
volumes:
|
volumes:
|
||||||
- ./Caddyfile:/etc/caddy/Caddyfile
|
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||||
|
- ./data/frontend:/srv/frontend
|
||||||
- ./data/textures:/srv/files/textures
|
- ./data/textures:/srv/files/textures
|
||||||
- ./data/modpack_files:/srv/files/modpacks
|
- ./data/modpack_files:/srv/files/modpacks
|
||||||
- caddy_data:/data
|
- caddy_data:/data
|
||||||
- caddy_config:/config
|
- caddy_config:/config
|
||||||
depends_on:
|
|
||||||
- frontend
|
|
||||||
- backend
|
|
||||||
networks:
|
|
||||||
- platform-net
|
|
||||||
|
|
||||||
frontend:
|
|
||||||
image: gitea.mrixs.me/minecraft-platform/frontend:latest
|
|
||||||
container_name: platform-frontend
|
|
||||||
restart: unless-stopped
|
|
||||||
networks:
|
networks:
|
||||||
- platform-net
|
- platform-net
|
||||||
|
|
||||||
@@ -67,7 +58,6 @@ volumes:
|
|||||||
caddy_data:
|
caddy_data:
|
||||||
caddy_config:
|
caddy_config:
|
||||||
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
platform-net:
|
platform-net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
# Настройка CI/CD (Drone CI)
|
|
||||||
|
|
||||||
Проект настроен для автоматической сборки Docker-образов и их развертывания с помощью Drone CI.
|
|
||||||
|
|
||||||
## Обзор пайплайна (.drone.yml)
|
|
||||||
|
|
||||||
Конфигурация состоит из 4-х пайплайнов:
|
|
||||||
|
|
||||||
1. **build-backend**: Собирает образ `backend`, тегирует его (latest + commit SHA) и пушит в Docker Registry.
|
|
||||||
2. **build-frontend**: Многоэтапная сборка (Node.js build -> Nginx image), пуш в Registry.
|
|
||||||
3. **build-ping-helper**: Сборка микросервиса `ping-helper`.
|
|
||||||
4. **deploy-production**: Запускается только при пуше в `master` после успешного завершения всех сборок. Подключается к серверу по SSH, обновляет код, скачивает новые образы и перезапускает контейнеры.
|
|
||||||
|
|
||||||
## Настройка интеграции (Gitea + Drone)
|
|
||||||
|
|
||||||
1. **Активация репозитория**:
|
|
||||||
* Зайдите в ваш Drone CI.
|
|
||||||
* Найдите репозиторий `minecraft-platform/platform` и нажмите "Activate".
|
|
||||||
|
|
||||||
2. **Настройка секретов (Secrets)**:
|
|
||||||
В настройках репозитория в Drone добавьте следующие секреты:
|
|
||||||
|
|
||||||
| Имя Секрета | Описание |
|
|
||||||
| :--- | :--- |
|
|
||||||
| `gitea_username` | Логин пользователя Gitea, от имени которого будут пушиться образы в Registry. |
|
|
||||||
| `gitea_password` | Пароль (или токен) этого пользователя. |
|
|
||||||
| `ssh_host` | IP адрес или домен вашего продакшен-сервера. |
|
|
||||||
| `ssh_user` | Имя пользователя на сервере (например, `root` или `ubuntu`). |
|
|
||||||
| `ssh_key` | **Приватный** SSH ключ для доступа к серверу (Private Key, который соответствует Public Key в `~/.ssh/authorized_keys` на сервере). |
|
|
||||||
|
|
||||||
3. **Docker Registry**:
|
|
||||||
Убедитесь, что `gitea.mrixs.me` поддерживает Docker Registry и у пользователя есть права на запись в пакеты `minecraft-platform/backend`, `frontend`, `ping-helper`.
|
|
||||||
|
|
||||||
4. **Настройка Вебхука (Webhooks)**:
|
|
||||||
Чтобы Drone автоматически запускал сборку при пуше (push):
|
|
||||||
* В Gitea перейдите в **Settings** (Настройки) репозитория -> **Webhooks**.
|
|
||||||
* Проверьте, есть ли там вебхук для Drone. Если нет, он должен был создаться автоматически при активации репозитория в Drone.
|
|
||||||
* Если вебхука нет, добавьте его вручную:
|
|
||||||
* **Target URL**: `https://drone.mrixs.me/hook` (адрес вашего Drone сервера)
|
|
||||||
* **HTTP Method**: `POST`
|
|
||||||
* **Content Type**: `application/json`
|
|
||||||
* **Trigger On**: `All Events` (или как минимум Push и Pull Request)
|
|
||||||
* Нажмите "Test Delivery", чтобы проверить связь. Обратите внимание на код ответа (должен быть 200 OK).
|
|
||||||
|
|
||||||
## Процесс развертывания
|
|
||||||
|
|
||||||
1. Сделайте изменения в коде.
|
|
||||||
2. Закоммитьте и запушьте в ветку `master`.
|
|
||||||
3. Drone автоматически:
|
|
||||||
* Соберет новые образы.
|
|
||||||
* Запушит их в Registry.
|
|
||||||
* Зайдет на сервер, сделает `docker-compose pull` и `docker-compose up -d`.
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
# Руководство по развертыванию
|
|
||||||
|
|
||||||
## Предварительные требования
|
|
||||||
|
|
||||||
Для запуска платформы вам потребуются:
|
|
||||||
- **Docker** и **Docker Compose**
|
|
||||||
- **Git**
|
|
||||||
- Сгенерированная пара RSA ключей для подписи профилей (private.pem, public.pem)
|
|
||||||
- Доменное имя (для корректной работы SSL и Yggdrasil API)
|
|
||||||
|
|
||||||
## Структура проекта
|
|
||||||
|
|
||||||
Проект использует Git Submodules. После клонирования репозитория необходимо инициализировать подмодули:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone --recursive https://git.mrixs.me/minecraft-platform/platform.git
|
|
||||||
# Или если уже склонировали:
|
|
||||||
git submodule update --init --recursive
|
|
||||||
```
|
|
||||||
|
|
||||||
## Конфигурация
|
|
||||||
|
|
||||||
### 1. Переменные окружения (.env)
|
|
||||||
|
|
||||||
Создайте файл `.env` в корне проекта на основе примера. Основные переменные:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
APP_DOMAIN=yourdomain.com
|
|
||||||
DATABASE_URL=postgres://user:password@db:5432/platform?sslmode=disable
|
|
||||||
JWT_SECRET_KEY=super_secret_key_change_me
|
|
||||||
CURSEFORGE_API_KEY=your_curseforge_api_key_here
|
|
||||||
RSA_PRIVATE_KEY_PATH=/app/secrets/private_key.pem
|
|
||||||
MODPACKS_STORAGE_PATH=/app/data/modpacks
|
|
||||||
SKINS_STORAGE_PATH=/app/data/skins
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. RSA Ключи
|
|
||||||
|
|
||||||
Сгенерируйте ключи для подписи профилей Yggdrasil:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mkdir -p secrets
|
|
||||||
openssl genrsa -out secrets/private_key.pem 2048
|
|
||||||
openssl rsa -in secrets/private_key.pem -pubout -out secrets/public_key.pem
|
|
||||||
```
|
|
||||||
|
|
||||||
Файл `private_key.pem` должен быть доступен бэкенду (см. `docker-compose.yml`).
|
|
||||||
|
|
||||||
### 3. База данных
|
|
||||||
|
|
||||||
При первом запуске необходимо применить миграции. Скрипты миграций находятся в `backend/scripts/migrations/`.
|
|
||||||
|
|
||||||
Если вы используете Docker Compose, миграции можно применить вручную или добавить init-контейнер. Для ручного применения (пример с `psql`):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Подключение к контейнеру БД
|
|
||||||
docker-compose exec db psql -U user -d platform
|
|
||||||
|
|
||||||
# Внутри psql примените SQL файлы из backend/scripts/migrations/
|
|
||||||
```
|
|
||||||
|
|
||||||
*Примечание: в будущих версиях планируется автоматическая миграция.*
|
|
||||||
|
|
||||||
## Запуск в Docker Compose
|
|
||||||
|
|
||||||
Сборка и запуск всех сервисов:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose up -d --build
|
|
||||||
```
|
|
||||||
|
|
||||||
Сервисы:
|
|
||||||
- **frontend**: Статика и UI (доступен по http://localhost:80 или через Caddy)
|
|
||||||
- **backend**: API сервер (http://backend:8080)
|
|
||||||
- **db**: PostgreSQL
|
|
||||||
- **caddy**: Reverse Proxy (автоматический HTTPS)
|
|
||||||
|
|
||||||
## Настройка Caddy (Reverse Proxy)
|
|
||||||
|
|
||||||
В корне проекта находится `Caddyfile`. Отредактируйте его, указав ваш домен:
|
|
||||||
|
|
||||||
```caddyfile
|
|
||||||
yourdomain.com {
|
|
||||||
reverse_proxy /api/* backend:8080
|
|
||||||
reverse_proxy /authserver/* backend:8080
|
|
||||||
reverse_proxy /sessionserver/* backend:8080
|
|
||||||
|
|
||||||
# Frontend files
|
|
||||||
root * /srv
|
|
||||||
file_server
|
|
||||||
try_files {path} /index.html
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Обновление
|
|
||||||
|
|
||||||
Для обновления версий (после `git pull`):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git submodule update --remote --merge
|
|
||||||
docker-compose up -d --build
|
|
||||||
```
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
# Руководство пользователя и администратора
|
|
||||||
|
|
||||||
## Для Пользователей
|
|
||||||
|
|
||||||
### Регистрация и Вход
|
|
||||||
1. Перейдите на страницу регистрации.
|
|
||||||
2. Введите имя пользователя, email и пароль.
|
|
||||||
3. После регистрации используйте email и пароль для входа.
|
|
||||||
|
|
||||||
### Управление профилем (Скины)
|
|
||||||
1. В личном кабинете вы можете загрузить **Скин** для вашего персонажа.
|
|
||||||
2. Поддерживаются стандартные PNG файлы скинов.
|
|
||||||
3. Загруженный скин будет автоматически отображаться в игре на серверах платформы.
|
|
||||||
|
|
||||||
### Использование Лаунчера
|
|
||||||
1. Скачайте наш кастомный лаунчер (на базе HMCL).
|
|
||||||
2. Запустите лаунчер.
|
|
||||||
3. Выберите метод авторизации: **Authlib Injector** (или Yggdrasil).
|
|
||||||
4. Введите адрес API платформы (например, `https://yourdomain.com/api/yggdrasil` - уточните у администратора).
|
|
||||||
5. Введите ваши Email и Пароль от платформы.
|
|
||||||
6. Выберите нужный модпак из списка и нажмите "Играть".
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Для Администраторов
|
|
||||||
|
|
||||||
Административный интерфейс доступен пользователям с ролью `admin`.
|
|
||||||
|
|
||||||
### Управление Модпаками
|
|
||||||
|
|
||||||
В разделе "Модпаки" вы можете добавлять новые сборки и обновлять существующие.
|
|
||||||
|
|
||||||
#### Импорт нового модпака
|
|
||||||
1. Нажмите "Импорт модпака".
|
|
||||||
2. Выберите тип импортера:
|
|
||||||
- **Simple ZIP**: Обычный архив с файлами игры.
|
|
||||||
- **CurseForge**: Импорт по ссылке или файлу манифеста CurseForge.
|
|
||||||
- **Modrinth**: Импорт `.mrpack` файлов.
|
|
||||||
3. Загрузите файл или укажите URL (для CurseForge).
|
|
||||||
4. Система запустит фоновую задачу по скачиванию и обработке файлов. Следите за прогресс-баром.
|
|
||||||
|
|
||||||
#### Обновление модпака
|
|
||||||
1. В списке модпаков нажмите кнопку "Обновить" напротив нужной сборки.
|
|
||||||
2. В модальном окне выберите новый файл обновления (например, новую версию `.mrpack` или ZIP).
|
|
||||||
3. При желании измените версию Minecraft.
|
|
||||||
4. После подтверждения, система удалит старые файлы сборки и загрузит новые. Клиенты получат обновление автоматически при следующем запуске лаунчера.
|
|
||||||
|
|
||||||
### Управление Пользователями
|
|
||||||
1. В разделе "Пользователи" отображается список всех зарегистрированных игроков.
|
|
||||||
2. Вы можете менять роли пользователей (например, выдать права администратора) через меню действий.
|
|
||||||
|
|
||||||
### Игровые Сервера и Карта
|
|
||||||
1. В разделе "Сервера" отображается статус подключенных игровых серверов (онлайн, игроки).
|
|
||||||
2. Если для сервера настроен **BlueMap**, появится кнопка "Карта мира", открывающая веб-карту в браузере.
|
|
||||||
2
frontend
2
frontend
Submodule frontend updated: 635941f635...5c3df7a2a4
Submodule ping-helper updated: 59d64a724a...3f1e4942dd
@@ -1,6 +0,0 @@
|
|||||||
ALTER TABLE modpacks ADD COLUMN updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
|
|
||||||
|
|
||||||
CREATE TRIGGER set_timestamp_modpacks
|
|
||||||
BEFORE UPDATE ON modpacks
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION trigger_set_timestamp();
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
CREATE TABLE modpack_import_jobs (
|
|
||||||
id SERIAL PRIMARY KEY,
|
|
||||||
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
|
||||||
progress INT NOT NULL DEFAULT 0,
|
|
||||||
error_message TEXT,
|
|
||||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
||||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TRIGGER set_timestamp_import_jobs
|
|
||||||
BEFORE UPDATE ON modpack_import_jobs
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION trigger_set_timestamp();
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
-- Add bluemap_url column to game_servers table
|
|
||||||
ALTER TABLE game_servers ADD COLUMN bluemap_url VARCHAR(255);
|
|
||||||
Reference in New Issue
Block a user