microwin7/texture-provider

提供GravitLauncher TextureProvider和TextureLoader JSON的实现

v5.6.2.0 2024-07-04 07:51 UTC

README

PHP 8.3+ Gravit Launcher

✔ 从数据库按USERNAME, UUID(用户id、sha1哈希和sha256哈希)提供。

✔ 支持从文件系统提供,或者通过USERNAME使用Mojang。

✔ 可以为尚未自行安装皮肤的用户提供随机皮肤。

✔ 如果在文件系统、Mojang中未发现,或未启用从随机皮肤集合获取皮肤,则提供默认皮肤和斗篷。

✔ 与任何标准皮肤和斗篷尺寸兼容。

✔ 自动检测SLIM皮肤类型(瘦手)。

✔ 内置TextureLoader。

demo

支持的方法

  • 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数据库 ] 如果 DB_SUD_DB = 'mysql' - mysql。例如:sudo apt-get install php8.3-mysql
      • 忽略PHP的pgsql扩展安装,因为它在系统中不会使用
      • composer install --ignore-platform-req=ext-pgsql
    • [ PostgreSQL数据库 ] 如果 DB_SUD_DB = 'pgsql' - pgsql。例如:sudo apt-get install php8.3-pgsql
      • 忽略PHP的mysql扩展安装,因为它在系统中不会使用
      • composer install --ignore-platform-req=ext-mysql
    • 如果您不使用数据库,可以忽略扩展
    • composer install --ignore-platform-req=ext-mysql --ignore-platform-req=ext-pgsql
  • Composer Composer安装指南链接

安装

在Docker容器中安装

Docker

  • 这是安装的最佳选择,因为所有模块和PHP本身都将安装在隔离的容器中

预先配置 | 安装Docker

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

Git

选择脚本的位置,最好在网站外。并安装texture-provider

git clone --branch new https://github.com/microwin7/GravitLauncher-TextureProvider.git texture-provider
cd texture-provider

Docker

下载层,编译并启动php-fpm和nginx容器

docker compose up -d --build

停止容器

docker compose stop

启动容器/重新启动(如果docker-compose.yml文件已更改)

docker compose up -d

NGINX

用于网站安装

  • 在server {...}部分上方
upstream dockerTextureProvider {
    server 127.0.0.1:29300;
}
  • 在server {...}部分中
    location /texture-provider/ {
        proxy_pass http://dockerTextureProvider/;
    }
  • .env中更改APP_URL - 域名链接

用于子域名安装

  • 例如:/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/;
    }
}
  • 更改ВАШ_ДОМЕН
  • .env中更改APP_URL - 域名链接
  • .env中将SCRIPT_PATH=设置为空字段 - 对应于网站请求提供者的链接
  • 您可以通过[ CertBot ]执行域名签名

重新加载NGINX

service nginx restart

使用Composer | ❗❗❗ 不建议非经验用户使用 ❗❗❗

Composer

composer create-project microwin7/texture-provider
  • 用于初始化所有包的命令是
composer install

脚本设置

TextureStorageType的说明

  1. STORAGE
  • 本地文件存储皮肤和披风
  • 有5种类型用于确定存储文件的名称,它们也是StorageType
    • 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_SHA1DB_SHA256,使用user_assets表,通过UUID在用户表中查找用户,通过将记录与用户id列绑定来记录到该表中
      • 数据库连接设置在库的配置中
        • config/php-utils/^1.7.0/MainConfig.php 常量 MODULES['TextureProvider']
      • 在您的个人中心实现
        • 在字段uuid中,您必须记录用户的UUID
        • 在字段name中,您必须记录纹理类型: SKINCAPE
        • 在字段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时间周期删除旧的未使用文件
  1. MOJANG
  • 根据USERNAME在Mojang中搜索纹理
  • 仅用于此类型存储
    • 在请求末尾添加&method=mojang
  • 用于使用此类型存储,与所有其他存储一起使用
    • 在请求末尾添加&method=hybrid
    • 首先在本地文件存储中进行搜索,然后在Mojang中搜索
  1. COLLECTION
  • 从管理员创建的随机皮肤集合中发出皮肤。
  • UUID的最后12个字符转换为DEC并除以集合中皮肤的个数
  • 然后余数将成为集合中的编号。
  • .env中启用存储: GIVE_FROM_COLLECTION=true
  1. DEFAULT
  • 默认情况下发放皮肤和披风,如果找不到本地存储、Mojang或皮肤集合中的任何内容
  • .env中启用: GIVE_DEFAULT_SKIN=trueGIVE_DEFAULT_CAPE=true。默认情况下始终提供皮肤

脚本的链接

  • 协议和DOМЕН/IP .env常量:APP_URL
  • 从域名根部的路径.env常量:SCRIPT_PATH。如果您使用子域名,请将其留空:SCRIPT_PATH=

设置网站根路径

  • 网站根路径或texture-provider在配置文件.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_{TEXTURE_TYPE}_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

在网站中使用

      "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 披风的可用大小
    • 备注。当使用 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

其他...

删除回车换行符并压缩

警告

  • (这些警告与用于处理 PNG 格式图像的 libpng 库相关)
  1. libpng warning: Interlace handling should be turned on when using png_read_image - 这条警告表明,当使用 png_read_image 函数时,应启用交错(interlace)。交错允许逐步加载图像,这可能在优化显示过程中很有用。

修复方法

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 {} \;

修复图像配置文件

警告

  • (这些警告与用于处理 PNG 格式图像的 libpng 库相关)
  1. libpng warning: iCCP: known incorrect sRGB profile - 这条警告表明,图像中的 sRGB 颜色配置文件不符合预期或被认为是错误的。可能图像包含非标准颜色配置文件,这可能会影响颜色显示。

  2. 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