k0baya / X-for-serv00

Xray-for-Serv00
338 stars 119 forks source link

可能还是有个bug,发生场景是用户名含有大写字母时 #22

Closed huomqh closed 2 months ago

huomqh commented 3 months ago

当用户名含有大写字母时,sh脚本会重新建立一个domains下含有大写字母域名的目录,把内容都装到那里去,然后打开status网页就打不开。

k0baya commented 3 months ago

那就奇怪了,用户名含有大写字母的时候,原本的用户域名是小写字母吗?

Wesley-nathan commented 2 months ago

是的,我尝试将在大写域名中public_nodejs文件夹的文件移动至原本域名的public_nodejs文件夹并进行https://github.com/k0baya/X-for-serv00/issues/19#ref-issue-2446835830中的加权操作后可以正常访问网页的 /status

huomqh commented 2 months ago

那就奇怪了,用户名含有大写字母的时候,原本的用户域名是小写字母吗?

对的,用户名有大写字母的时候,原本的域名也是小写字母。

k0baya commented 2 months ago

已修复:093e96b

Wesley-nathan commented 2 months ago

好像没有解决吧,我这边脚本直接强制我用户名的大写字母变成小写搜寻文件路径,结果显而易见的找不到路径No such file or directory

k0baya commented 2 months ago

好像没有解决吧,我这边脚本直接强制我用户名的大写字母变成小写搜寻文件路径,结果显而易见的找不到路径No such file or directory

我现在完全没能理解你们用户名含有大写字母的到底是什么情况了。

我尝试使用 serv00 提供的 devil 命令添加含有大写字母的域名时,确实被强制替换成了小写字母。难道强制替换的处理不正确吗?

你们的域名实际绝对路径是什么?请提供给我作为参考,方便我对这个问题进行修复。

Wesley-nathan commented 2 months ago

好的,假如我的用户名是User,脚本会提示fatal: could not create leading directories of '/home/user/domains/user.serv00.net/public_nodejs/public': Permission denied
但是实际路径是在/home/User/domains/user.serv00.net/public_nodejs/public 后续的命令也都会按小写用户名执行导致找不到正确路径

k0baya commented 2 months ago

好的,假如我的用户名是User,脚本会提示fatal: could not create leading directories of '/home/user/domains/user.serv00.net/public_nodejs/public': Permission denied 但是实际路径是在/home/User/domains/user.serv00.net/public_nodejs/public 后续的命令也都会按小写用户名执行导致找不到正确路径

意思是,正确的路径下,用户目录和用户名一样,但是域名文件夹中的大写字母被替换成了小写字母,是吗?

Wesley-nathan commented 2 months ago

是,和你说的一样

k0baya commented 2 months ago

已修复:43e99f6

Wesley-nathan commented 2 months ago

今天尝试再次部署,文件安装时没什么问题但是打开网页出现图中情况 屏幕截图 2024-08-07 221421

我去网站的error.log文件发现下列内容,以下用户名我会用User代替 Error: ENOENT: no such file or directory, chdir '/usr/home/User/domains/user.serv00.net/public_nodejs' -> '/home/User/domains/User.serv00.net/public_nodejs' at process.wrappedChdir [as chdir] (node:internal/bootstrap/switches/does_own_process_state:130:14) at Object. (/usr/home/User/domains/user.serv00.net/public_nodejs/app.js:50:9) at Module._compile (node:internal/modules/cjs/loader:1467:14) at Module._extensions..js (node:internal/modules/cjs/loader:1551:10) at Module.load (node:internal/modules/cjs/loader:1282:32) at Module._load (node:internal/modules/cjs/loader:1098:12) at TracingChannel.traceSync (node:diagnostics_channel:315:14) at wrapModuleLoad (node:internal/modules/cjs/loader:215:24) at Module.require (node:internal/modules/cjs/loader:1304:12) at Module.require (/usr/local/lib/ruby/gems/3.3/gems/passenger-6.0.22/src/helper-scripts/node-loader.js:98:25) 可能是运行路径出了什么问题有个" ->"

k0baya commented 2 months ago

??? 非要删文件重新部署,就要去面板把www websites全删掉再部署。能好好用真不用这样折腾的。

Wesley-nathan commented 2 months ago

删除(purge web site files)之后/status 页面并且重新部署还是一样错误,errorlog也是一样的错误,正常页面可以运行,难道还得把端口也重新删了?另外我也是s8的机器 image image

k0baya commented 2 months ago

删除(purge web site files)之后/status 页面并且重新部署还是一样错误,errorlog也是一样的错误,正常页面可以运行,难道还得把端口也重新删了?另外我也是s8的机器 image image

...是我表述有问题么,请你把文件全部删掉,并且在面板里把 www websites 全删掉,然后再重新部署。

LeeDespo commented 2 months ago

佬,我发现大小写的问题所在了。您在app.js的49行代码如下: const WORKDIR = path.join('/home', USERNAME, 'domains', ${USERNAME}.serv00.net, 'public_nodejs'); 需要改为: const WORKDIR = path.join('/home', USERNAME, 'domains', ${os.userInfo().username.toLowerCase()}.serv00.net, 'public_nodejs');

k0baya commented 2 months ago

佬,我发现大小写的问题所在了。您在app.js的49行代码如下: const WORKDIR = path.join('/home', USERNAME, 'domains', ${USERNAME}.serv00.net, 'public_nodejs'); 需要改为: const WORKDIR = path.join('/home', USERNAME, 'domains', ${os.userInfo().username.toLowerCase()}.serv00.net, 'public_nodejs');

已修改。为了更符合域名的情况,增加了一点处理:

const USERNAME = os.userInfo().username;
const USERNAME_DOMAIN = USERNAME.toLowerCase().replace(/[^a-z0-9-]/g, '');
const WORKDIR = path.join('/home', USERNAME, 'domains', `${USERNAME_DOMAIN}.serv00.net`, 'public_nodejs');
LeeDespo commented 2 months ago

大佬辛苦了

Wesley-nathan commented 2 months ago

首先感谢大佬们的错误修复,部署完毕,大写字母用户可以正常使用。 image_1 另外可能我也没附图导致误会,按钮 delete(purge web site files)是删除域名并清除域名文件夹内容的意思,自己太弱鸡不会看代码和写程序,一直提问题也不是很容易理解,给大佬添麻烦了