microwin7 / texture-provider
Предосталяет реализацию GravitLauncher TextureProvider и TextureLoader JSON
Installs: 64
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 1
Forks: 3
Open Issues: 0
Type:project
Requires
- php: ^8.3
- ext-gd: *
- ext-json: *
- ext-mbstring: *
- firebase/php-jwt: ^6.10
- guzzlehttp/psr7: ^2.6
- microwin7/php-utils: 1.7.0.6
- nesbot/carbon: ^3.3
- nikic/fast-route: ^2.0@dev
- sentry/sentry: ^4.6
- symfony/console: ^7.0
- symfony/http-foundation: 7.2.x-dev
Requires (Dev)
- vimeo/psalm: 5.x-dev
README
✔ Выдача по USERNAME, UUID, (id пользователя, хеша sha1 и sha256) из БД.
✔ Поддеркжа выдачи из файловой системы, либо по USERNAME с Mojang
✔ Возможность выдавать рандомный скин пользователям, которые ещё не установили его сами
✔ Выдача скина и плаща по умолчанию, если не обнаружен в файловой системе, Mojang и выключено получение скина из рандомной коллекции скинов
✔ Работает с любыми общепринятыми размерами скинов и плащей
✔ Автоматическое обнаружение SLIM типов скинов (тонкие руки)
✔ Встроенный TextureLoader
Поддерживаемые методы
normal
Отдаёт только из файловой системы, рандомной коллекции скинов (если оное включено), скинов и плащей по умолчанию.mojang
Отдаёт текстуры с Mojang- Использование в вызове скрипта:
&method=mojang
- Использование в вызове скрипта:
hybrid
=normal
+mojang
- Использование в вызове скрипта:
&method=hybrid
- Использование в вызове скрипта:
- ОБЩЕЕ
- Отдача скинов из рандомной коллекции, при отсутствии установленных пользователями. Если включено
- Отдача скинов и плащей по умолчанию. Если включено
Требования
- GravitLauncher 5.2.9+
- Консольный доступ SSH к хостингу. Для развёртывания библиотек
Если не используете Docker (развернуть)
- PHP 8.3+
- Расширение Multibyte String
php-mbstring
. Пример:sudo apt-get install php8.3-mbstring
- Расширение GD
php-gd
. Пример:sudo apt-get install php8.3-gd
- Расширения для работы с БД:
- [ MySQL Database ] Если DB_SUD_DB = 'mysql' -
mysql
. Пример :sudo apt-get install php8.3-mysql
- Установка с игнорированием
pgsql
расширения PHP, так как оно не будет использоваться в системе: -
composer install --ignore-platform-req=ext-pgsql
- Установка с игнорированием
- [ PostgreSQL Database ] Если DB_SUD_DB = 'pgsql' -
pgsql
. Пример:sudo apt-get install php8.3-pgsql
- Установка с игнорированием
mysql
расширения PHP, так как оно не будет использоваться в системе: -
composer install --ignore-platform-req=ext-mysql
- Установка с игнорированием
- Если вы не используете БД, можете игнорировать расширения:
-
composer install --ignore-platform-req=ext-mysql --ignore-platform-req=ext-pgsql
- [ MySQL Database ] Если DB_SUD_DB = 'mysql' -
- Composer Ссылка на иструкцию по установке Composer
Установка
Установка в Docker контейнер:
- Является более оптимальным вариантом установки, так как все модули и сам php будет установлен в изолированных контейнерах
Предварительная настройка | Установка Docker
- Выполнение команд от sudo (Перейти в root, если является пользователем не по умолчанию):
sudo -s
- Следующая команда:
- Обновляет зависимости
- Установка утилит
- Скачивает скрипт установки Docker
- Выдача прав запуска скрипта и запуск установки Docker
- Запуск службы
apt update ; apt install gnupg2 apt-transport-https curl -y; curl -fsSL https://get.docker.com -o get-docker.sh ; chmod +x get-docker.sh ; ./get-docker.sh ; service docker start
Выбираем где будет располагаться скрипт, лучше всего вне сайта. И устанавливаем texture-provider
git clone --branch new https://github.com/microwin7/GravitLauncher-TextureProvider.git texture-provider
cd texture-provider
Скачивание слоёв, компиляция и запуск контейнеров php-fpm и nginx:
docker compose up -d --build
Остановка контейнеров:
docker compose stop
Запуск контейнеров / Перезапуск (если изменился файл docker-compose.yml):
docker compose up -d
Для установки на сайт:
- Над разделом server {...}
upstream dockerTextureProvider { server 127.0.0.1:29300; }
- А в разделе server {...}
location /texture-provider/ { proxy_pass http://dockerTextureProvider/; }
- Изменить APP_URL в
.env
- ссылка на домен
Для установки на под-домен:
- Пример
/etc/nginx/conf.d/textures.conf
:
upstream dockerTextureProvider { server 127.0.0.1:29300; } server { listen 80; server_name textures.ВАШ_ДОМЕН; charset utf-8; location / { proxy_pass http://dockerTextureProvider/; } }
- Изменить ВАШ_ДОМЕН
- Изменить APP_URL в
.env
- ссылка на домен - Выставить SCRIPT_PATH= пустым полем в
.env
- ссылка для обращения к провидеру, по отношениею к конрю сайта - Подпись домена вы можете выполнить через [ CertBot ]
Перезагрузить NGINX
service nginx restart
Использование Composer | ❗❗❗ Не рекомендуется для неопытных пользователей ❗❗❗
- Composer Ссылка на иструкцию по установке Composer
- ❗❗❗ Для использования у вас уже должен быть установлен php со всеми необходимыми модулями
composer create-project microwin7/texture-provider
- Для инициализации всех пакетов, используется команда:
composer install
НАСТРОЙКА СКРИПТА
Описание TextureStorageType's
- STORAGE
- Локальное файловое хранилище скинов и плащей
- Имеет 5 типов для определения имени хранимого файла, они же StorageType's:
- USERNAME - [username.png] (Задан по умолчанию)
- Поиск происходит вне зависимости от регистра, если файл не будет найден
- UUID - [uuid.png]
- DB_USER_ID - [user_id.png] работает только с связью с БД
- DB_SHA1 - [sha1.png] работает только с связью с БД
- DB_SHA256 - [sha256.png] работает только с связью с БД
- Настройка в конфиге
.env
:USER_STORAGE_TYPE
- Для DB_USER_ID используется таблица пользователей по UUID, настройка подключения к БД производиться в конфигурации библиотеки:
config/php-utils/^1.7.0/MainConfig.php
константа MODULES['TextureProvider']
- Для DB_SHA1 и DB_SHA256 используется таблица
user_assets
, поиск пользователя производиться по UUID в таблице пользователей, запись в эту таблицу осуществляется с привязыванием к id колонке пользователя- Настройка подключения к БД производиться в конфигурации библиотеки:
config/php-utils/^1.7.0/MainConfig.php
константа MODULES['TextureProvider']
- Для реализации в вашем ЛК:
- в поле
uuid
вы должны записать UUID пользователя - в поле
name
вы должны записать тип текстуры: SKIN, CAPE - в поле
hash
вы должны записать соответствующую хеш сумму файла - в поле
slim
вы должны записать является ли скин SLIM: '1' или 'SLIM' (Да), '0' (Нет) - Поддержка поля
slim
пока что не реализована
- в поле
- Создание таблицы для хранения хешей:
CREATE TABLE user_assets ( user_id INT, type ENUM('SKIN','CAPE'), hash TINYTEXT NOT NULL, meta ENUM('SLIM'), PRIMARY KEY (user_id, type), INDEX uid (user_id), INDEX uid_name (user_id, type), FOREIGN KEY (user_id) REFERENCES users(user_id) ON UPDATE CASCADE ON DELETE CASCADE );
- Изменить имя таблицы и колонки id с ключом для связывания с
PRIMARY KEY
в этой части:REFERENCES users(user_id)
- Этот тип рекомендован. Так же желательно не удалять старые файлы текстур.
- Позже будет реализован скрипт очистки старых неиспользуемых файлов, с N периодом времени
- Настройка подключения к БД производиться в конфигурации библиотеки:
- USERNAME - [username.png] (Задан по умолчанию)
- MOJANG
- Поиск текстур в Mojang по USERNAME
- Для использования только этого типа хранения
- В конце запроса добавьте
&method=mojang
- В конце запроса добавьте
- Для использования этого типа хранения, вместе со всеми другими
- В конце запроса добавьте
&method=hybrid
- Cперва будет поиск по локальному файловому хранилищу, потом Mojang
- В конце запроса добавьте
- COLLECTION
- Выдава скина из коллекции рандомных скинов, созданную администратором.
- Последние 12 символов от UUID переводяться в DEC и деляться на количество скинов в коллекции
- после чего остаток и будет являться номером из коллекции.
- Включение хранилища в
.env
: GIVE_FROM_COLLECTION=true
- DEFAULT
- Выдача скинов и плащей по умолчанию, если не найдены ни в локальном хранилище, ни в Mojang, ни в коллекции скинов.
- Включение в
.env
: GIVE_DEFAULT_SKIN=true и GIVE_DEFAULT_CAPE=true. По умолчанию скины отдаются всегда
Ссылка на скрипт
- Протокол и
ДОМЕН
/IP
.env
константа: APP_URL - Путь от корня домена
.env
константа: SCRIPT_PATH. Сделайть пустой SCRIPT_PATH= если используете под-домен
Настройка пути корня до сайта
- Путь до корня сайта или texture-provider'a в конфиге
.env
константа: ROOT_FOLDER. По умолчанию: /var/www/html
Хранилище текстур
- Хранилище от корня сайта в конфиге
.env
: STORAGE_DIR. По умолчанию: storage
Если у вас своя папка storage
- Удалите текущую папку storage
rm -rf storage
- Создайте ссылку на папку storage. ПРИМЕР для Azuriom:
ln -s /var/www/html/Azuriom_SITE/storage/app/public storage
- Пути от корня хранилища в конфиге
.env
: TEXTURE_{ТИП_ТЕКСТУРЫ}_PATH. Примеры есть в.env.example
Для включения поддержки версий 5.2.9-5.4.x
- Включите изменение хеша для старых версий в
.env
: LEGACY_DIGEST
Настройка NGINX (ТОЛЬКО ДЛЯ ТЕХ КТО НЕ ИСПОЛЬЗУЕТ DOCKER)
На домен example.com/texture-provider/:
location /texture-provider/ { rewrite "^(/texture-provider)/(.*)$" $1/index.php?$2 last; alias /var/www/html/texture-provider/public/; location ~ \.php$ { fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_buffering off; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; } }
На СУБ-домен (под-домен):
server { listen 80; server_name textures.ВАШ_ДОМЕН; charset utf-8; #access_log /var/log/nginx/texture-provider.access.log; #error_log /var/log/nginx/texture-provider.error.log notice; root /путь/до/public; # Example: /var/www/html/texture-provider/public location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } location / { rewrite "^/(.*)$" /index.php?$1 last; location ~ \.php$ { fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_index index.php; fastcgi_buffering off; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } } }
- alias путь заменить на путь, где располагается папка public/, слеш в конце обязателен
Настройка LaunchServer'a
При использовании в сайте:
"textureProvider": { "url": "https://example.com/texture-provider/%username%/%uuid%", "type": "json" }, "mixes": { "textureLoader": { "urls": { "SKIN": "https://example.com/texture-provider/upload/SKIN", "CAPE": "https://example.com/texture-provider/upload/CAPE" }, "slimSupportConf": "SERVER", "type": "uploadAsset" } },
При использовании на под-домене:
"textureProvider": { "url": "https://textures.example.com/%username%/%uuid%", "type": "json" }, "mixes": { "textureLoader": { "urls": { "SKIN": "https://textures.example.com/upload/SKIN", "CAPE": "https://textures.example.com/upload/CAPE" }, "slimSupportConf": "SERVER", "type": "uploadAsset" } },
Настройка публичного ключа доступа для загрузки скинов и плащей из лаунчера:
- Перейдите в папку лаунчсервера, далее в папку
.keys
. Она может быть скрыта - Скопируйте себе на ПК файл
ecdsa_id.pub
- Через сайт [ base64.guru ] преобразуйте файл в строку Base64
- В файле
.env
в корне текстур провидера, выставите переменную, по примеру:
LAUNCH_SERVER_ECDSA256_PUBLIC_KEY_BASE64=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJDi51DKs5f6ERSrDDjns00BkI963L9OS9wLA2Ak/nACZCgQma+FsTsbYtZQm4nk+rtabM8b9JgzSi3sPINb8fg==
Описание глобальных переменных для настройки скрипта
- Все доступные параметры находятся в
.env.example
- файл пример, с значениями по умолчанию в текстур провидере и библиотеке. За исключением:config/php-utils/^1.7.0/MainConfig.php
в котором осталась:- Настройка баз данных и таблиц с именами столбцов
- Настройка списка серверов (Не требуется для текстур провидера)
- Настройка параметров подключения к бд
config/php-utils/^1.7.0/TextureConfig.php
в котором настраивается:- SKIN_SIZE - доступные размеры для загрузки обычный скинов
- CAPE_SIZE - доступные размеры для загрузки обычный плащей
- SKIN_SIZE_HD - доступные размеры для загрузки HD скинов
- CAPE_SIZE_HD - доступные размеры для загрузки HD плащей
- P.S. При использовании Docker, после изменений конфигов, помимо
.env
выполнитеup -d --build
снова
## Global Settings APP_URL=https://gravit-support.ru/ - Ссылка на сайт ROOT_FOLDER=/var/www/html - Указания корня сайта/корня текстур провидера SCRIPT_PATH=texture-provider - Указание URL location для ссылок при генерации JSON для лаунчсервера(лаунчера) ## DataBase Settings DB_HOST=localhost - Хост базы данных (БД) DB_NAME=test - Имя базы данных DB_USER=test - Имя пользователя для подключения к БД DB_PASS=test - Имя пользователя для подключения к БД # 0-65535 - допустимые порты DB_PORT=3306 - Порт для подключения к БД # mysql/pgsql DB_SUD_DB=mysql - Тип драйвера для работы с БД DB_PREFIX_SERVERS=server_ - Префикс для баз данных серверов (Не используется для текстур провидера) DB_DEBUG=true - Включение записи логов запросов и ошибок, которые вызываются в скрипте и поступают в БД # Logs SQL and Errors DB_LOG_FOLDER=/var/www/db_logs - Путь для хранения логов BEARER_TOKEN=null - Токен доступа для ограничения запросов (Выключено) PRIVATE_API_KEY= - Похожее что и выше (Не используется для текстур провидера) ## SENTRY Settings SENTRY_ENABLE=true SENTRY_DSN=https://dce66e1d574a0066589421bda5c36b2f@o484368.ingest.us.sentry.io/4506491534573568 LAUNCH_SERVER_ECDSA256_PUBLIC_KEY_BASE64=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJDi51DKs5f6ERSrDDjns00BkI963L9OS9wLA2Ak/nACZCgQma+FsTsbYtZQm4nk+rtabM8b9JgzSi3sPINb8fg== ## ItemShop - Для модуля на сайт DLE (Не используется для текстур провидера) SITE_TEMPLATES_FOLDER=templates/имя_шаблона ITEM_SHOP_PATH_IN_TEMPLATES=images/item_shop ## Storage Textures - Настройка Хранилища для текстур провидера STORAGE_DIR=storage # SKIN|CAPE|AVATAR|FRONT|FRONT_CAPE|FRONT_WITH_CAPE|BACK| # BACK_CAPE|BACK_WITH_CAPE|CAPE_RESIZE|MOJANG|COLLECTION TEXTURE_SKIN_PATH=skins TEXTURE_CAPE_PATH=capes TEXTURE_AVATAR_PATH=avatars TEXTURE_FRONT_PATH=fronts TEXTURE_FRONT_CAPE_PATH=front_capes TEXTURE_FRONT_WITH_CAPE_PATH=front_with_capes TEXTURE_BACK_PATH=backs TEXTURE_BACK_CAPE_PATH=back_capes TEXTURE_BACK_WITH_CAPE_PATH=back_with_capes TEXTURE_CAPE_RESIZE_PATH=cape_resizes TEXTURE_MOJANG_PATH=mojang TEXTURE_COLLECTION_PATH=collection # .png TEXTURE_EXTENSTION=png - Расширения для хранимых файлов LEGACY_DIGEST=false - Подпись хеш-сумма файлов, старого образца с версии 5.2.9 до 5.4.x MAX_SIZE_BYTES=2M - Максимальный размер загружаемого файла, так же изменить в nginx и php-fpm контейнере, если используете Docker. В папке config/ # Скин в формате Base64 для DEFAULT хранилища (Посетите сайт https://base64.guru/converter/encode/image) SKIN_DEFAULT=iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAWlBMVEVHcEwsHg51Ri9qQC+HVTgjIyNOLyK7inGrfWaWb1udZkj///9SPYmAUjaWX0FWScwoKCgAzMwAXl4AqKgAaGgwKHImIVtGOqU6MYkAf38AmpoAr68/Pz9ra2t3xPtNAAAAAXRSTlMAQObYZgAAAZJJREFUeNrUzLUBwDAUA9EPMsmw/7jhNljl9Xdy0J3t5CndmcOBT4Mw8/8P4pfB6sNg9yA892wQvwzSIr8f5JRzSeS7AaiptpxazUq8GPQB5uSe2DH644GTsDFsNrqB9CcDgOCAmffegWWwAExnBrljqowsFBuGYShY5oakgOXs/39zF6voDG9r+wLvTCVUcL+uV4m6uXG/L3Ut691697tgnZgJavinQHOB7DD8awmaLWEmaNuu7YGf6XcIITRm19P1ahbARCRGEc8x/UZ4CroXAQTVIGL0YySrREBADFGicS8XtG8CTS+IGU2F6EgSE34VNKoNz8348mzoXGDxpxkQBpg2bWobjgZSm+uiKDYH2BAO8C4YBmbgAjpq5jUl4yGJC46HQ7HJBfkeTAImIEmgmtpINi44JsHx+CKA/BTuArISXeBTR4AI5gK4C2JqRfPs0HNBkQnG8S4Yxw8IGoIZfXEBOW1D4YJDAdNSXgRevP+ylK6fGBCwsWywmA19EtBkJr8K2t4N5pnAVwH0jptsBp+2gUFj4tL5ywAAAABJRU5ErkJggg== # Плащ в формате Base64 для DEFAULT хранилища (Посетите сайт https://base64.guru/converter/encode/image) CAPE_DEFAULT=iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgAQMAAACYU+zHAAAAA1BMVEVHcEyC+tLSAAAAAXRSTlMAQObYZgAAAAxJREFUeAFjGAV4AQABIAABL3HDQQAAAABJRU5ErkJggg== ## Texture-Provider - Настройки провидера (Описание можно найти в файле src/Config.php) ROUTERING=true MINIMIZE_ENUM_REQUEST=false # null|80-512 Default: 128px AVATAR_CANVAS=null # USERNAME - [username.png] # UUID - [uuid.png] # DB_USER_ID - [user_id.png] работает только с связью с БД # DB_SHA1 - [sha1.png] работает только с связью с БД # DB_SHA256 - [sha256.png] работает только с связью с БД USER_STORAGE_TYPE=UUID GIVE_FROM_COLLECTION=false TRY_REGENERATE_CACHE=true GIVE_DEFAULT_SKIN=true GIVE_DEFAULT_CAPE=false SKIN_RESIZE=true ### Texture-Provider Loader HD_TEXTURES_ALLOW=true LUCKPERMS_USE_PERMISSION_HD_SKIN=false # Min 0 LUCKPERMS_MIN_WEIGHT=10 ### Texture-Provider Returner BLOCK_CANVAS=128 CAPE_CANVAS=16 BOUND_WIDTH_CANVAS=512 # Min 10 sec IMAGE_CACHE_TIME=null
ПРОЧЕЕ...
Удаление чересстрочной развёртки. И сжатие
Предупреждения:
- (Эти предупреждения связаны с библиотекой libpng, которая используется для работы с изображениями в формате PNG)
libpng warning: Interlace handling should be turned on when using png_read_image
- Это предупреждение говорит о том, что вам следует включить межстрочное сканирование (interlace) при использовании функцииpng_read_image
. Межстрочное сканирование позволяет пошагово загружать изображение, что может быть полезным для оптимизации процесса отображения.
Способ починить:
apt install optipng
- Команды приведены от самой долгой по обратоке к самой быстрой
- Вызывать в папке с скинами или плащами
find . -type f -iname '*.png' -exec optipng -i0 -o7 -zm1-9 {} \; find . -type f -iname '*.png' -exec optipng -i0 -o1 -zm1-9 {} \; find . -type f -iname '*.png' -exec optipng -i0 -o1 {} \;
Починка профиля изображения
Предупреждения:
- (Эти предупреждения связаны с библиотекой libpng, которая используется для работы с изображениями в формате PNG)
-
libpng warning: iCCP: known incorrect sRGB profile
- Это предупреждение указывает на то, что профиль цвета sRGB в изображении не соответствует ожидаемому или считается некорректным. Возможно, изображение содержит нестандартный профиль цвета, и это может повлиять на отображение цветов. -
libpng warning: iCCP: cHRM chunk does not match sRGB
- Это предупреждение также связано с профилем цвета и указывает на то, что информация о цветовом пространстве (cHRM chunk) не соответствует ожидаемому для sRGB. Это может также привести к неправильному отображению цветов.
Способ починить:
apt install pngcrush
- Вызывать в папке с скинами или плащами
find . -type f -iname '*.png' -exec pngcrush -ow -rem allb -reduce {} \;
...БУДЕТ ДОПОЛНЕНО...
- Предположительно команда для использования на PRODUCTION, будет проверяться
- Оптимизирует импорты и кеширует классы автозагрузчика, если включен OpCache composer install -n -v -o -a --no-dev