Раздача ресурсов RAGE:MP через собственное S3-совместимое хранилище
Содержание
- 1 Раздача ресурсов RAGE:MP через self-hosted S3 (fastdl)
- 1.1 Описание
- 1.2 Требования
- 1.3 Установка Docker (Ubuntu 24.04)
- 1.4 Запуск MinIO
- 1.5 Создание бакета, пользователя и публичного доступа
- 1.6 Проверка (на Linux-сервере)
- 1.7 Установка AWS CLI на Windows (игровой сервер)
- 1.8 Настройка учётных данных AWS CLI
- 1.9 Настройка RAGE:MP-сервера
- 1.10 Заливка ресурсов
- 1.11 Проверка отдачи файлов
Раздача ресурсов RAGE:MP через self-hosted S3 (fastdl)
Инструкция описывает, как поднять self-hosted S3-хранилище (MinIO) в Docker на отдельном Linux-сервере и настроить RAGE:MP-сервер так, чтобы клиенты качали ресурсы (client_packages) с этого хранилища, а не с самого игрового сервера.
Описание
Схема:
Игрок -> MinIO (S3 API, порт 9000, публичный анонимный доступ на чтение) Игровой сервер -> fastdl_snapshot -> заливка в MinIO через AWS CLI (S3 API)
- MinIO разворачивается в Docker, S3 API слушает порт 9000.
- Бакет с ресурсами открыт на анонимное скачивание - RAGE:MP-клиент качает файлы обычным
GET, без авторизации. - Заливка ресурсов выполняется с Windows-сервера через
aws s3 sync, вручную или по расписанию.
Требования
- Linux-сервер, Ubuntu 24.04, с установленным Docker - под S3-хранилище.
- Windows-сервер с RAGE:MP - игровой сервер, отсюда же выполняется заливка ресурсов.
- Порт 9000 открыт наружу на Linux-сервере (S3 API).
Установка Docker (Ubuntu 24.04)
sudo apt update sudo apt install -y docker.io sudo systemctl enable --now docker
Запуск MinIO
MINIO_ROOT_PASSWORD=$(openssl rand -hex 16) echo "root password: $MINIO_ROOT_PASSWORD" docker run -d --name minio \ --restart unless-stopped \ -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=ragempadmin \ -e MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \ -v minio-data:/data \ pgsty/minio:latest server /data --console-address ":9001"
-
--restart unless-stopped- контейнер поднимается автоматически после перезагрузки сервера. -
-p 9000:9000- S3 API. Сюда стучится и заливка ресурсов, и игроки при скачивании. -
-p 9001:9001- веб-консоль администратора. -
-v minio-data:/data- данные в отдельном docker-volume, переживают пересоздание контейнера. -
$MINIO_ROOT_PASSWORDвыводится один раз и больше нигде не хранится - сохранить сразу.
Создание бакета, пользователя и публичного доступа
Выполняется через одноразовые контейнеры minio/mc, подключённые к сети контейнера minio.
UPLOADER_SECRET=$(openssl rand -hex 16)
echo "uploader secret: $UPLOADER_SECRET"
MC_AUTH="MC_HOST_local=http://ragempadmin:${MINIO_ROOT_PASSWORD}@localhost:9000"
docker run --rm --network container:minio -e "$MC_AUTH" minio/mc mb local/ragemp
docker run --rm --network container:minio -e "$MC_AUTH" minio/mc anonymous set download local/ragemp
docker run --rm --network container:minio -e "$MC_AUTH" minio/mc admin user add local ragemp-uploader "$UPLOADER_SECRET"
docker run --rm --network container:minio -e "$MC_AUTH" minio/mc admin policy attach local readwrite --user ragemp-uploader
| Команда | Назначение |
|---|---|
mb local/ragemp |
создаёт бакет ragemp
|
anonymous set download |
разрешает скачивание объектов из бакета без авторизации |
admin user add |
создаёт пользователя ragemp-uploader с secret key для заливки файлов
|
admin policy attach ... readwrite |
даёт пользователю права на чтение и запись в бакет |
Проверка (на Linux-сервере)
docker run --rm --network container:minio -e "$MC_AUTH" minio/mc ls local docker run --rm --network container:minio -e "$MC_AUTH" minio/mc admin user list local
Первая команда должна показать бакет ragemp, вторая - пользователя ragemp-uploader.
Установка AWS CLI на Windows (игровой сервер)
PowerShell от администратора:
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi /qn
Закрыть и заново открыть терминал, проверить:
aws --version
Настройка учётных данных AWS CLI
aws configure
- AWS Access Key ID:
ragemp-uploader - AWS Secret Access Key: значение
$UPLOADER_SECRET, полученное на шаге создания пользователя - Default region name:
us-east-1(MinIO регион строго не проверяет, поле не должно быть пустым) - Default output format:
json
Настройка RAGE:MP-сервера
В conf.json:
"fastdl-host": "http://<IP_Linux_сервера>:9000/ragemp/", "create-fastdl-snapshot": true
Перезапустить сервер - в директории сервера появится папка fastdl_snapshot.
Заливка ресурсов
Выполняется на Windows-сервере после каждого обновления ресурсов:
aws --endpoint-url http://<IP_Linux_сервера>:9000 s3 sync fastdl_snapshot\ s3://ragemp/
s3 sync заливает только новые и изменённые файлы, а не всю папку заново при каждом запуске.
Проверка отдачи файлов
curl -I http://<IP_Linux_сервера>:9000/ragemp/file/<id>
Ожидается 200 OK без заголовков авторизации - именно так к файлу обращается RAGE:MP-клиент.