microwin7 / texture-provider
提供GravitLauncher TextureProvider和TextureLoader JSON的实现
v5.6.2.0
2024-07-04 07:51 UTC
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数据库 ] 如果 DB_SUD_DB = 'mysql' -
mysql。例如:sudo apt-get install php8.3-mysql- 忽略PHP的
pgsql扩展安装,因为它在系统中不会使用 -
composer install --ignore-platform-req=ext-pgsql
- 忽略PHP的
- [ PostgreSQL数据库 ] 如果 DB_SUD_DB = 'pgsql' -
pgsql。例如:sudo apt-get install php8.3-pgsql- 忽略PHP的
mysql扩展安装,因为它在系统中不会使用 -
composer install --ignore-platform-req=ext-mysql
- 忽略PHP的
- 如果您不使用数据库,可以忽略扩展
-
composer install --ignore-platform-req=ext-mysql --ignore-platform-req=ext-pgsql
- [ MySQL数据库 ] 如果 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/; }
- 在
.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安装指南链接
- ❗❗❗ 为了使用,您必须已经安装了包含所有必需模块的php
composer create-project microwin7/texture-provider
- 用于初始化所有包的命令是
composer install
脚本设置
TextureStorageType的说明
- 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_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
- 根据USERNAME在Mojang中搜索纹理
- 仅用于此类型存储
- 在请求末尾添加
&method=mojang
- 在请求末尾添加
- 用于使用此类型存储,与所有其他存储一起使用
- 在请求末尾添加
&method=hybrid - 首先在本地文件存储中进行搜索,然后在Mojang中搜索
- 在请求末尾添加
- COLLECTION
- 从管理员创建的随机皮肤集合中发出皮肤。
- UUID的最后12个字符转换为DEC并除以集合中皮肤的个数
- 然后余数将成为集合中的编号。
- 在
.env中启用存储: GIVE_FROM_COLLECTION=true
- DEFAULT
- 默认情况下发放皮肤和披风,如果找不到本地存储、Mojang或皮肤集合中的任何内容
- 在
.env中启用: GIVE_DEFAULT_SKIN=true 和 GIVE_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 库相关)
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 库相关)
-
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