部署Blessing skin server中遇到的问题
浅浅记录一下给社团安装Blessing skin server时踩的坑
1. 选择Apache还是Nginx还是Caddy
原本打算使用Nginx,但由于php的fastcgi在Nginx上配置麻烦,于是转而使用了Caddy
也不是麻烦,只是没有仔细阅读https://www.digitalocean.com/community/tutorials/php-fpm-nginx
2. 为什么访问页面403
检查目录权限问题
3. 为什么访问不到页面/为什么访问页面后直接下载了index.php
检查配置文件中(Caddyfile)是否有如下对php-fastcgi的配置php_fastcgi unix//run/php/php8.1-fpm.sock
尤其注意是否与路径/etc/php/8.1/fpm/pool.d/www.conf中listen = /run/php/php8.1-fpm.sock对应
4. 为什么setup时配置服务器后显示could not find driver
缺少了PDO拓展,检查是否安装了php-pgsql / php-mysql插件,然后重启php
5. 为什么配置了https就没法访问但配置了http就可以
社团有一个https透明代理,如果Caddyfile还是用https://就会导致问题,具体表现可能有502重定向次数过多,只需要用http://就行
如果使用Nginx的话应该就没有这个问题 – syh
6. caddy start和systemctl start caddy有什么区别
caddy start是将Caddy作为后台进程给运行,而systemctl start caddy是系统进程,如果当前会话中断,由caddy start启动的Caddy进程也会结束
7. 在配置Yggdrasil API插件后,启动器尝试认证是显示服务器响应解析失败
从启动器(HMCL)中导出日志:
1 | <html lang="zh-CN"> |
可以看到直接定位到了问题位置,在/var/www/blessing-skin/plugins/yggdrasil-api/src/Controllers/AuthController.php,由于我对php和项目都不熟悉,所以接下来用ChatGPT-4o解决问题。
首先定位到代码:
1 | JWT\Signer\Key\InMemory::plainText(config('jwt.secret', '')) |
config('jwt.secret', '')试图从配置文件中获取jwt.secret配置项的值。而问题的根本原因是config('jwt.secret', '')返回了null,导致plainText()接收到不正确的参数,而这实际上是因为.env文件中没有JWT_SECRET项导致的(后来发现没有JWT_SECRET=xxxx),解决方法很明显,把这个项补上就行了。
在config/jwt.php中有如下代码:
1 | /* | |
只需输入注释中的指令php artisan jwt:secret就能生成JWT_SECRET,但在我的情况中,我并没有成功运行,而是得到了如下报错:ERROR There are no commands defined in the "jwt" namespace.
这是可能是因为没有安装jwt-auth包,运行
1 | composer require tymon/jwt-auth |
如果像我一样还出现了依赖问题,可以运行
1 | composer require tymon/jwt-auth -W |
-W选项允许Composer同时升级、降级或删除当前锁定的依赖,确保可以安装兼容的版本,更新composer.lock文件中所有依赖,并安装兼容的tymon/jwt-auth和lcobucci/jwt版本,如果有需求的话也可以指定版本(例:4.0):composer require lcobucci/jwt:^4.0 tymon/jwt-auth。
完成安装后继续重新设置jwt-auth,运行一下命令发布配置文件:
1 | php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" |
最后再生成JWT_SECRET:
1 | php artisan jwt:secret |
