OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
This commit is contained in:
56
.dev/remote-deploy/01_unpack_db.sh
Normal file
56
.dev/remote-deploy/01_unpack_db.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
APP_DIR=/var/www/onebot
|
||||
SRC_TAR=/home/rui/onebot-src.tar.gz
|
||||
|
||||
echo "=== 1. 解压源码 ==="
|
||||
sudo rm -rf "$APP_DIR"
|
||||
sudo mkdir -p "$APP_DIR"
|
||||
sudo tar -xzf "$SRC_TAR" -C "$APP_DIR" --strip-components=1
|
||||
sudo chown -R "$USER":www-data "$APP_DIR"
|
||||
echo "解压完成,目录内容:"
|
||||
ls "$APP_DIR" | head -20
|
||||
|
||||
echo "=== 2. 初始化 MySQL 数据库 ==="
|
||||
DB_NAME=onebot
|
||||
DB_USER=onebot
|
||||
DB_PASS='OneBot_Db_7xKpQ9z'
|
||||
|
||||
sudo mysql <<SQL
|
||||
CREATE DATABASE IF NOT EXISTS ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
|
||||
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
SQL
|
||||
|
||||
echo "数据库 ${DB_NAME} 创建完成,验证连接:"
|
||||
mysql -u"$DB_USER" -p"$DB_PASS" -e "SELECT VERSION();" "$DB_NAME" 2>/dev/null && echo "DB_CONNECT_OK"
|
||||
|
||||
echo "=== 3. 创建 .env ==="
|
||||
cat > "$APP_DIR/.env" <<ENV
|
||||
APP_ENV=production
|
||||
APP_DEBUG=false
|
||||
APP_URL=http://119.29.53.45:8081
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=${DB_NAME}
|
||||
DB_USERNAME=${DB_USER}
|
||||
DB_PASSWORD=${DB_PASS}
|
||||
|
||||
LEAN_DB_HOST=127.0.0.1
|
||||
LEAN_DB_USER=${DB_USER}
|
||||
LEAN_DB_PASSWORD=${DB_PASS}
|
||||
LEAN_DB_DATABASE=${DB_NAME}
|
||||
LEAN_APP_URL=http://119.29.53.45:8081
|
||||
LEAN_SITENAME='OneBot'
|
||||
LEAN_LANGUAGE='zh-CN'
|
||||
LEAN_SESSION_PASSWORD='OneBot_Session_4tHwLq8z'
|
||||
ENV
|
||||
|
||||
echo ".env 写入完成:"
|
||||
cat "$APP_DIR/.env"
|
||||
|
||||
echo "=== 全部完成 ==="
|
||||
18
.dev/remote-deploy/02_install_mysql.sh
Normal file
18
.dev/remote-deploy/02_install_mysql.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== 检查 mysql-server 包是否可用 ==="
|
||||
apt-cache policy mysql-server 2>&1 | head -5
|
||||
|
||||
echo "=== 安装 mysql-server ==="
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get install -y mysql-server 2>&1 | tail -30
|
||||
|
||||
echo "=== 检查安装结果 ==="
|
||||
which mysql mysqld 2>&1 || echo "MYSQL_NOT_FOUND"
|
||||
dpkg -l 2>/dev/null | grep -E 'mysql-server|mysql-common' | head
|
||||
|
||||
echo "=== 启动 mysql ==="
|
||||
systemctl start mysql 2>&1 || true
|
||||
sleep 3
|
||||
systemctl is-active mysql 2>&1
|
||||
21
.dev/remote-deploy/03_init_db.sh
Normal file
21
.dev/remote-deploy/03_init_db.sh
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
DB_NAME=onebot
|
||||
DB_USER=onebot
|
||||
DB_PASS='OneBot_Db_7xKpQ9z'
|
||||
|
||||
echo "=== 创建数据库与用户 ==="
|
||||
sudo mysql <<SQL
|
||||
CREATE DATABASE IF NOT EXISTS ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
|
||||
ALTER USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
|
||||
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
SQL
|
||||
|
||||
echo "=== 验证连接 ==="
|
||||
mysql -u"$DB_USER" -p"$DB_PASS" -h127.0.0.1 -e "SELECT VERSION();" "$DB_NAME" && echo "DB_CONNECT_OK"
|
||||
|
||||
echo "=== 确认 .env 存在 ==="
|
||||
ls -la /var/www/onebot/.env
|
||||
48
.dev/remote-deploy/04_write_env.sh
Normal file
48
.dev/remote-deploy/04_write_env.sh
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
APP_DIR=/var/www/onebot
|
||||
DB_NAME=onebot
|
||||
DB_USER=onebot
|
||||
DB_PASS='OneBot_Db_7xKpQ9z'
|
||||
|
||||
echo "=== 写入 .env ==="
|
||||
cat > "$APP_DIR/.env" <<ENV
|
||||
APP_ENV=production
|
||||
APP_DEBUG=false
|
||||
APP_URL=http://119.29.53.45:8081
|
||||
|
||||
LEAN_APP_URL=http://119.29.53.45:8081
|
||||
LEAN_APP_DIR=
|
||||
|
||||
LEAN_DEBUG=0
|
||||
|
||||
LEAN_DB_HOST=127.0.0.1
|
||||
LEAN_DB_PORT=3306
|
||||
LEAN_DB_USER=${DB_USER}
|
||||
LEAN_DB_PASSWORD=${DB_PASS}
|
||||
LEAN_DB_DATABASE=${DB_NAME}
|
||||
|
||||
LEAN_SESSION_PASSWORD='OneBot_Session_4tHwLq8z'
|
||||
LEAN_SESSION_EXPIRATION=480
|
||||
|
||||
LEAN_SITENAME='OneBot'
|
||||
LEAN_LANGUAGE='zh-CN'
|
||||
LEAN_DEFAULT_TIMEZONE='Asia/Shanghai'
|
||||
LEAN_LOGO_PATH='/dist/images/logo.svg'
|
||||
LEAN_PRINT_LOGO_URL='/dist/images/logo.png'
|
||||
|
||||
LEAN_EMAIL_RETURN=''
|
||||
LEAN_USE_S3=false
|
||||
LEAN_USER_FILE_PATH='userfiles/'
|
||||
LEAN_DB_BACKUP_PATH='backupdb/'
|
||||
LEAN_USE_REDIS=false
|
||||
LEAN_NEWS_ENABLED=false
|
||||
ENV
|
||||
|
||||
echo "=== .env 内容 ==="
|
||||
cat "$APP_DIR/.env"
|
||||
echo "=== 权限 ==="
|
||||
sudo chown -R rui:www-data "$APP_DIR"
|
||||
sudo chmod -R 775 "$APP_DIR/storage" "$APP_DIR/bootstrap/cache" 2>/dev/null || true
|
||||
echo "DONE"
|
||||
14
.dev/remote-deploy/05_composer.sh
Normal file
14
.dev/remote-deploy/05_composer.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
APP_DIR=/var/www/onebot
|
||||
LOG=/tmp/composer_install.log
|
||||
|
||||
echo "=== composer install 开始 ==="
|
||||
cd "$APP_DIR"
|
||||
sudo -u rui composer install --no-dev --no-interaction --optimize-autoloader > "$LOG" 2>&1
|
||||
echo "COMPOSER_EXIT=$?"
|
||||
echo "=== 日志尾部 ==="
|
||||
tail -20 "$LOG"
|
||||
echo "=== vendor 目录大小 ==="
|
||||
du -sh "$APP_DIR/vendor" 2>/dev/null
|
||||
13
.dev/remote-deploy/06_npm_install.sh
Normal file
13
.dev/remote-deploy/06_npm_install.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
APP_DIR=/var/www/onebot
|
||||
LOG=/tmp/npm_install.log
|
||||
export PATH="/home/rui/.nvm/versions/node/v24.12.0/bin:$PATH"
|
||||
|
||||
cd "$APP_DIR"
|
||||
echo "npm install 开始 $(date)" > "$LOG"
|
||||
node -v >> "$LOG" 2>&1
|
||||
npm -v >> "$LOG" 2>&1
|
||||
npm install --no-audit --no-fund >> "$LOG" 2>&1
|
||||
echo "NPM_EXIT=$?" >> "$LOG"
|
||||
echo "完成 $(date)" >> "$LOG"
|
||||
8
.dev/remote-deploy/07_nginx.sh
Normal file
8
.dev/remote-deploy/07_nginx.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cp /home/rui/onebot-nginx.conf /etc/nginx/sites-available/onebot
|
||||
ln -sf /etc/nginx/sites-available/onebot /etc/nginx/sites-enabled/onebot
|
||||
nginx -t
|
||||
systemctl reload nginx
|
||||
echo "NGINX_OK"
|
||||
19
.dev/remote-deploy/08_npm_build.sh
Normal file
19
.dev/remote-deploy/08_npm_build.sh
Normal file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
APP_DIR=/var/www/onebot
|
||||
LOG=/tmp/npm_build.log
|
||||
export PATH="/home/rui/.nvm/versions/node/v24.12.0/bin:$PATH"
|
||||
|
||||
cd "$APP_DIR"
|
||||
echo "=== 前端构建开始 $(date) ===" > "$LOG"
|
||||
node -v >> "$LOG" 2>&1
|
||||
|
||||
# laravel-mix 生产构建
|
||||
npx mix --production >> "$LOG" 2>&1
|
||||
echo "BUILD_EXIT=$?" >> "$LOG"
|
||||
echo "=== 构建完成 $(date) ===" >> "$LOG"
|
||||
|
||||
echo "=== dist 目录 ==="
|
||||
ls -la "$APP_DIR/public/dist/" 2>/dev/null | head -20
|
||||
echo "=== dist/images logo ==="
|
||||
ls -la "$APP_DIR/public/dist/images/" 2>/dev/null | grep -i logo || echo "NO_LOGO_IN_DIST"
|
||||
19
.dev/remote-deploy/09_storage.sh
Normal file
19
.dev/remote-deploy/09_storage.sh
Normal file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
APP_DIR=/var/www/onebot
|
||||
|
||||
echo "=== 重建 storage 目录结构 ==="
|
||||
mkdir -p "$APP_DIR/storage/app"
|
||||
mkdir -p "$APP_DIR/storage/framework/cache"
|
||||
mkdir -p "$APP_DIR/storage/framework/sessions"
|
||||
mkdir -p "$APP_DIR/storage/framework/views"
|
||||
mkdir -p "$APP_DIR/storage/logs"
|
||||
mkdir -p "$APP_DIR/storage/backupdb"
|
||||
mkdir -p "$APP_DIR/userfiles"
|
||||
|
||||
chown -R rui:www-data "$APP_DIR/storage" "$APP_DIR/userfiles"
|
||||
chmod -R 775 "$APP_DIR/storage" "$APP_DIR/userfiles"
|
||||
|
||||
echo "=== storage 目录 ==="
|
||||
ls -la "$APP_DIR/storage/"
|
||||
echo "DONE"
|
||||
17
.dev/remote-deploy/10_verify.sh
Normal file
17
.dev/remote-deploy/10_verify.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
echo "=== HTTP 状态 ==="
|
||||
curl -s -o /dev/null -w "HTTP=%{http_code}\n" http://127.0.0.1:8081/
|
||||
|
||||
echo "=== 页面标题 ==="
|
||||
curl -s http://127.0.0.1:8081/ | grep -oE "<title>[^<]*</title>" | head -1
|
||||
|
||||
echo "=== 检查品牌关键词 ==="
|
||||
BODY=$(curl -s http://127.0.0.1:8081/)
|
||||
echo "$BODY" | grep -qi "onebot" && echo "含 OneBot" || echo "无 OneBot"
|
||||
echo "$BODY" | grep -qi "leantime" && echo "含 Leantime" || echo "无 Leantime"
|
||||
|
||||
echo "=== 检查数据库表是否已建 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW TABLES LIKE 'zp_bom%';" 2>/dev/null || echo "DB 查询失败"
|
||||
|
||||
echo "=== 检查 BOM 相关表 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW TABLES;" 2>/dev/null | grep -iE "zp_bom|zp_" | head -30
|
||||
12
.dev/remote-deploy/11_debug.sh
Normal file
12
.dev/remote-deploy/11_debug.sh
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
echo "=== laravel.log 尾部 ==="
|
||||
tail -50 /var/www/onebot/storage/logs/laravel.log 2>/dev/null || echo "无 laravel.log"
|
||||
|
||||
echo ""
|
||||
echo "=== .env 是否有 APP_KEY ==="
|
||||
grep -E "APP_KEY" /var/www/onebot/.env || echo "无 APP_KEY"
|
||||
|
||||
echo ""
|
||||
echo "=== 用 artisan 直接看报错 ==="
|
||||
cd /var/www/onebot
|
||||
sudo -u www-data php artisan about 2>&1 | head -40
|
||||
27
.dev/remote-deploy/12_diag.sh
Normal file
27
.dev/remote-deploy/12_diag.sh
Normal file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
echo "=== /var/www/onebot 完整文件列表(根目录)==="
|
||||
ls -la /var/www/onebot/
|
||||
|
||||
echo ""
|
||||
echo "=== 是否有 artisan ==="
|
||||
ls -la /var/www/onebot/artisan 2>&1
|
||||
|
||||
echo ""
|
||||
echo "=== index.php 内容 ==="
|
||||
cat /var/www/onebot/index.php
|
||||
|
||||
echo ""
|
||||
echo "=== config 目录 ==="
|
||||
ls -la /var/www/onebot/config/
|
||||
|
||||
echo ""
|
||||
echo "=== config/app.php 里 APP_KEY 相关 ==="
|
||||
grep -n "key\|APP_KEY\|cipher" /var/www/onebot/config/app.php 2>/dev/null | head -20 || echo "无 config/app.php"
|
||||
|
||||
echo ""
|
||||
echo "=== .env 里是否有 APP_KEY ==="
|
||||
grep -n "APP_KEY" /var/www/onebot/.env || echo "无 APP_KEY"
|
||||
|
||||
echo ""
|
||||
echo "=== bin 目录 ==="
|
||||
ls -la /var/www/onebot/bin/ 2>&1
|
||||
22
.dev/remote-deploy/13_debug_on.sh
Normal file
22
.dev/remote-deploy/13_debug_on.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
APP_DIR=/var/www/onebot
|
||||
|
||||
# 打开 debug,让 Laravel 直接渲染真实错误
|
||||
sed -i 's/^APP_DEBUG=.*/APP_DEBUG=true/' "$APP_DIR/.env"
|
||||
sed -i 's/^LEAN_DEBUG=.*/LEAN_DEBUG=1/' "$APP_DIR/.env"
|
||||
grep -E "APP_DEBUG|LEAN_DEBUG" "$APP_DIR/.env"
|
||||
|
||||
# 清空旧日志,重新请求
|
||||
rm -f "$APP_DIR/storage/logs/laravel.log"
|
||||
|
||||
echo "=== 直接 curl 看错误 ==="
|
||||
curl -s http://127.0.0.1:8081/ | grep -oE "(Fatal error|Parse error|Exception|Error|message)[^<]*" | head -20
|
||||
|
||||
echo ""
|
||||
echo "=== php-fpm 错误日志 ==="
|
||||
tail -30 /var/log/php8.3-fpm.log 2>/dev/null || echo "无 php-fpm.log"
|
||||
|
||||
echo ""
|
||||
echo "=== laravel.log ==="
|
||||
tail -40 "$APP_DIR/storage/logs/laravel.log" 2>/dev/null || echo "仍无 laravel.log"
|
||||
17
.dev/remote-deploy/14_realdbg.sh
Normal file
17
.dev/remote-deploy/14_realdbg.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
echo "=== nginx onebot.error.log ==="
|
||||
tail -50 /var/log/nginx/onebot.error.log 2>/dev/null || echo "无 onebot.error.log"
|
||||
|
||||
echo ""
|
||||
echo "=== nginx error.log (默认) ==="
|
||||
tail -30 /var/log/nginx/error.log 2>/dev/null || echo "无默认 error.log"
|
||||
|
||||
echo ""
|
||||
echo "=== 直接 CLI 方式执行 index.php 看真实错误 ==="
|
||||
cd /var/www/onebot/public
|
||||
sudo -u www-data php -d display_errors=1 -d error_reporting=E_ALL index.php 2>&1 | head -40
|
||||
|
||||
echo ""
|
||||
echo "=== 用 php 直接 require 入口 ==="
|
||||
cd /var/www/onebot
|
||||
sudo -u www-data php -r '$_SERVER["REQUEST_URI"]="/"; $_SERVER["REQUEST_METHOD"]="GET"; $_SERVER["SCRIPT_NAME"]="/index.php"; $_SERVER["DOCUMENT_ROOT"]="/var/www/onebot/public"; require "/var/www/onebot/public/index.php";' 2>&1 | head -60
|
||||
20
.dev/remote-deploy/15_verify2.sh
Normal file
20
.dev/remote-deploy/15_verify2.sh
Normal file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
# 清空 Laravel 缓存,避免旧的语言缓存/配置缓存导致错误
|
||||
cd /var/www/onebot
|
||||
rm -rf storage/framework/cache/data/* 2>/dev/null
|
||||
rm -rf storage/framework/views/* 2>/dev/null
|
||||
rm -f bootstrap/cache/config.php bootstrap/cache/routes*.php 2>/dev/null
|
||||
|
||||
echo "=== HTTP 状态 ==="
|
||||
curl -s -o /dev/null -w "HTTP=%{http_code}\n" http://127.0.0.1:8081/
|
||||
|
||||
echo "=== 页面标题 ==="
|
||||
curl -s http://127.0.0.1:8081/ | grep -oE "<title>[^<]*</title>" | head -1
|
||||
|
||||
echo "=== 品牌关键词 ==="
|
||||
BODY=$(curl -s http://127.0.0.1:8081/)
|
||||
echo "$BODY" | grep -qi "onebot" && echo "含 OneBot" || echo "无 OneBot"
|
||||
echo "$BODY" | grep -qi "leantime" && echo "含 Leantime" || echo "无 Leantime"
|
||||
|
||||
echo "=== 数据库表 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW TABLES;" 2>/dev/null | grep -iE "zp_bom|zp_" | head -30
|
||||
27
.dev/remote-deploy/16_parse_test.sh
Normal file
27
.dev/remote-deploy/16_parse_test.sh
Normal file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
echo "=== 用 PHP 直接测试语言文件解析 ==="
|
||||
for f in en-US zh-CN; do
|
||||
echo "--- $f.ini ---"
|
||||
sudo -u www-data php -r "
|
||||
\$r = @parse_ini_file('/var/www/onebot/app/Language/$f.ini', false, INI_SCANNER_RAW);
|
||||
if (\$r === false) {
|
||||
echo \"PARSE_FAILED\n\";
|
||||
} else {
|
||||
echo \"PARSE_OK, keys=\".count(\$r).\"\n\";
|
||||
}
|
||||
" 2>&1
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== 完整错误(不抑制)==="
|
||||
sudo -u www-data php -d display_errors=1 -d error_reporting=E_ALL -r "
|
||||
parse_ini_file('/var/www/onebot/app/Language/en-US.ini', false, INI_SCANNER_RAW);
|
||||
echo 'en-US OK\n';
|
||||
parse_ini_file('/var/www/onebot/app/Language/zh-CN.ini', false, INI_SCANNER_RAW);
|
||||
echo 'zh-CN OK\n';
|
||||
" 2>&1
|
||||
|
||||
echo ""
|
||||
echo "=== installation 缓存位置 ==="
|
||||
ls -la /var/www/onebot/storage/framework/cache/ 2>/dev/null
|
||||
find /var/www/onebot/storage/framework/cache -type f 2>/dev/null | head -20
|
||||
24
.dev/remote-deploy/17_verify3.sh
Normal file
24
.dev/remote-deploy/17_verify3.sh
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 清空所有缓存 ==="
|
||||
rm -rf storage/framework/cache/* 2>/dev/null
|
||||
rm -rf storage/framework/views/* 2>/dev/null
|
||||
rm -f bootstrap/cache/*.php 2>/dev/null
|
||||
echo "缓存已清空"
|
||||
|
||||
echo ""
|
||||
echo "=== 重新用 PHP 验证语言文件解析 ==="
|
||||
sudo -u www-data php -r "
|
||||
\$r = @parse_ini_file('/var/www/onebot/app/Language/en-US.ini', false, INI_SCANNER_RAW);
|
||||
echo 'en-US: ' . (\$r === false ? 'FAIL' : 'OK('.count(\$r).')') . PHP_EOL;
|
||||
\$r2 = @parse_ini_file('/var/www/onebot/app/Language/zh-CN.ini', false, INI_SCANNER_RAW);
|
||||
echo 'zh-CN: ' . (\$r2 === false ? 'FAIL' : 'OK('.count(\$r2).')') . PHP_EOL;
|
||||
" 2>&1
|
||||
|
||||
echo ""
|
||||
echo "=== HTTP 状态 ==="
|
||||
curl -s -o /dev/null -w "HTTP=%{http_code}\n" http://127.0.0.1:8081/
|
||||
|
||||
echo "=== 页面标题 ==="
|
||||
curl -s http://127.0.0.1:8081/ | grep -oE "<title>[^<]*</title>" | head -1
|
||||
9
.dev/remote-deploy/18_install_probe.sh
Normal file
9
.dev/remote-deploy/18_install_probe.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 可用 CLI 命令 ==="
|
||||
sudo -u www-data php /var/www/onebot/public/index.php list 2>&1 | head -50
|
||||
|
||||
echo ""
|
||||
echo "=== /install 页面表单 ==="
|
||||
curl -s http://127.0.0.1:8081/install 2>&1 | grep -oE "(name=\"[^\"]*\"|placeholder=\"[^\"]*\"|公司|Company|Email|First|Last|Password)" | head -40
|
||||
9
.dev/remote-deploy/19_install_form.sh
Normal file
9
.dev/remote-deploy/19_install_form.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 完整 CLI 命令列表 ==="
|
||||
sudo -u www-data php /var/www/onebot/public/index.php list 2>&1 | grep -iE "install|db:|migrate|seed"
|
||||
|
||||
echo ""
|
||||
echo "=== /install 表单完整字段(含 type=password)==="
|
||||
curl -s http://127.0.0.1:8081/install 2>&1 | grep -oE "<input[^>]*>" | grep -iE "password|name=" | head -40
|
||||
16
.dev/remote-deploy/20_install.sh
Normal file
16
.dev/remote-deploy/20_install.sh
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 提交安装表单 ==="
|
||||
RESP=$(curl -s -i -X POST http://127.0.0.1:8081/install \
|
||||
-d "email=admin@onebot.local" \
|
||||
-d "firstname=Admin" \
|
||||
-d "lastname=OneBot" \
|
||||
-d "company=OneBot" \
|
||||
-d "install=Install")
|
||||
|
||||
echo "$RESP" | head -20
|
||||
|
||||
echo ""
|
||||
echo "=== 检查数据库表是否已建 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW TABLES;" 2>/dev/null | head -50
|
||||
13
.dev/remote-deploy/21_error_log.sh
Normal file
13
.dev/remote-deploy/21_error_log.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== laravel.log 尾部 60 行 ==="
|
||||
tail -60 storage/logs/laravel.log 2>/dev/null || echo "无 laravel.log"
|
||||
|
||||
echo ""
|
||||
echo "=== 当前数据库表 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW TABLES;" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 是否有 zp_user 表 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT COUNT(*) AS cnt FROM zp_user;" 2>/dev/null || echo "无 zp_user 表"
|
||||
26
.dev/remote-deploy/22_cli_setupdb.sh
Normal file
26
.dev/remote-deploy/22_cli_setupdb.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== storage/logs 权限 ==="
|
||||
ls -la storage/ storage/logs/ 2>&1
|
||||
|
||||
echo ""
|
||||
echo "=== 检查日志配置 ==="
|
||||
grep -rE "LOG_CHANNEL|LEAN_LOG|LOG_PATH" .env config/ app/Core/Configuration/ 2>/dev/null | head -20
|
||||
|
||||
echo ""
|
||||
echo "=== 直接 CLI 调用 setupDB 捕获异常 ==="
|
||||
sudo -u www-data php -d display_errors=1 -d error_reporting=E_ALL -r '
|
||||
require "/var/www/onebot/vendor/autoload.php";
|
||||
$app = require "/var/www/onebot/bootstrap/app.php";
|
||||
\Leantime\Core\Bootloader::getInstance()->boot($app);
|
||||
$repo = app()->make(\Leantime\Domain\Install\Repositories\Install::class);
|
||||
try {
|
||||
$result = $repo->setupDB(["email"=>"admin@onebot.local","firstname"=>"Admin","lastname"=>"OneBot","company"=>"OneBot"]);
|
||||
echo "setupDB result: " . var_export($result, true) . PHP_EOL;
|
||||
} catch (\Throwable $e) {
|
||||
echo "EXCEPTION: " . $e->getMessage() . PHP_EOL;
|
||||
echo "FILE: " . $e->getFile() . ":" . $e->getLine() . PHP_EOL;
|
||||
echo $e->getTraceAsString() . PHP_EOL;
|
||||
}
|
||||
' 2>&1 | head -60
|
||||
13
.dev/remote-deploy/23_readlog.sh
Normal file
13
.dev/remote-deploy/23_readlog.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 日志文件列表 ==="
|
||||
ls -la storage/logs/
|
||||
|
||||
echo ""
|
||||
echo "=== leantime 日志尾部 80 行 ==="
|
||||
tail -80 storage/logs/leantime-2026-08-31.log 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 搜索 Error/Exception 关键词 ==="
|
||||
grep -nE "Error|Exception|error|failed|SQLSTATE|Access denied" storage/logs/leantime-2026-08-31.log 2>/dev/null | tail -40
|
||||
26
.dev/remote-deploy/24_fix_env.sh
Normal file
26
.dev/remote-deploy/24_fix_env.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
APP_DIR=/var/www/onebot
|
||||
|
||||
echo "=== 移动 .env 到 config/.env ==="
|
||||
mv "$APP_DIR/.env" "$APP_DIR/config/.env" 2>/dev/null || cp "$APP_DIR/.env" "$APP_DIR/config/.env"
|
||||
chown rui:www-data "$APP_DIR/config/.env"
|
||||
chmod 664 "$APP_DIR/config/.env"
|
||||
|
||||
echo "=== 确认位置 ==="
|
||||
ls -la "$APP_DIR/.env" 2>/dev/null && echo "根目录 .env 仍存在(需删除)" || echo "根目录 .env 已移除"
|
||||
ls -la "$APP_DIR/config/.env" && echo "config/.env 已就位"
|
||||
|
||||
echo ""
|
||||
echo "=== 清缓存 ==="
|
||||
rm -rf "$APP_DIR/storage/framework/cache/"* 2>/dev/null
|
||||
rm -f "$APP_DIR/bootstrap/cache/"*.php 2>/dev/null
|
||||
echo "缓存已清"
|
||||
|
||||
echo ""
|
||||
echo "=== 验证数据库连接配置 ==="
|
||||
grep -E "LEAN_DB_|DB_" "$APP_DIR/config/.env"
|
||||
|
||||
echo ""
|
||||
echo "=== HTTP 测试 ==="
|
||||
curl -s -o /dev/null -w "HTTP=%{http_code}\n" http://127.0.0.1:8081/
|
||||
12
.dev/remote-deploy/25_check_tables.sh
Normal file
12
.dev/remote-deploy/25_check_tables.sh
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
echo "=== 总表数 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='onebot';" 2>/dev/null
|
||||
|
||||
echo "=== BOM 表 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW TABLES LIKE 'zp_bom%';" 2>/dev/null
|
||||
|
||||
echo "=== zp_user ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, username, status, role FROM zp_user;" 2>/dev/null
|
||||
|
||||
echo "=== db-version ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT * FROM zp_settings WHERE \`key\`='db-version';" 2>/dev/null
|
||||
11
.dev/remote-deploy/26_activate_admin.sh
Normal file
11
.dev/remote-deploy/26_activate_admin.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 生成密码哈希并激活管理员 ==="
|
||||
HASH=$(php -r "echo password_hash('OneBot@2026', PASSWORD_DEFAULT);")
|
||||
echo "哈希: ${HASH:0:20}..."
|
||||
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "UPDATE zp_user SET password='${HASH}', status='a', forcePwReset=0 WHERE id=1;" 2>/dev/null
|
||||
|
||||
echo "=== 验证用户状态 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, username, status, role FROM zp_user WHERE id=1;" 2>/dev/null
|
||||
18
.dev/remote-deploy/27_verify_site.sh
Normal file
18
.dev/remote-deploy/27_verify_site.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
echo "=== 首页 HTTP 状态 ==="
|
||||
curl -s -o /dev/null -w "HTTP=%{http_code}\n" http://127.0.0.1:8081/
|
||||
|
||||
echo "=== 首页标题与品牌 ==="
|
||||
BODY=$(curl -s http://127.0.0.1:8081/)
|
||||
echo "$BODY" | grep -oE "<title>[^<]*</title>" | head -1
|
||||
echo "$BODY" | grep -qi "OneBot" && echo "✅ 含 OneBot 品牌" || echo "❌ 无 OneBot"
|
||||
echo "$BODY" | grep -qi "leantime" && echo "⚠️ 仍含 leantime" || echo "✅ 无 leantime 残留"
|
||||
|
||||
echo "=== logo 文件可达 ==="
|
||||
curl -s -o /dev/null -w "logo.svg HTTP=%{http_code} size=%{size_download}\n" http://127.0.0.1:8081/dist/images/logo.svg
|
||||
|
||||
echo "=== PDF 预览组件挂载 ==="
|
||||
echo "$BODY" | grep -q "ob-pdf" && echo "✅ pdfPreview 组件已挂载" || echo "⚠️ 未在首页检测到 pdfPreview(登录页可能不加载)"
|
||||
|
||||
echo "=== 登录页面字段 ==="
|
||||
echo "$BODY" | grep -oE "(name=\"(username|password|email)\")" | sort -u
|
||||
33
.dev/remote-deploy/28_login_test.sh
Normal file
33
.dev/remote-deploy/28_login_test.sh
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/onebot_cookies.txt
|
||||
rm -f "$JAR"
|
||||
|
||||
echo "=== 登录页品牌 ==="
|
||||
BODY=$(curl -s -c "$JAR" http://127.0.0.1:8081/auth/login)
|
||||
echo "$BODY" | grep -oE "<title>[^<]*</title>" | head -1
|
||||
echo "$BODY" | grep -qi "OneBot" && echo "✅ 登录页含 OneBot" || echo "⚠️ 登录页无 OneBot 文案(可能是标题/翻译)"
|
||||
echo "$BODY" | grep -qi "leantime" && echo "⚠️ 登录页仍含 leantime" || echo "✅ 登录页无 leantime 残留"
|
||||
|
||||
echo ""
|
||||
echo "=== 提取 CSRF token ==="
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
echo "CSRF: ${CSRF:0:20}..."
|
||||
|
||||
echo ""
|
||||
echo "=== 尝试登录 ==="
|
||||
LOGIN=$(curl -s -i -b "$JAR" -c "$JAR" -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=admin@onebot.local" \
|
||||
-d "password=OneBot@2026" \
|
||||
-d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" \
|
||||
-H "X-Requested-With: XMLHttpRequest")
|
||||
echo "$LOGIN" | head -10
|
||||
|
||||
echo ""
|
||||
echo "=== 登录后访问首页 ==="
|
||||
curl -s -b "$JAR" -o /dev/null -w "dashboard HTTP=%{http_code}\n" http://127.0.0.1:8081/dashboard/show
|
||||
|
||||
echo ""
|
||||
echo "=== 访问 BOM 页面 ==="
|
||||
curl -s -b "$JAR" -o /dev/null -w "bom/show HTTP=%{http_code}\n" http://127.0.0.1:8081/bom/show
|
||||
34
.dev/remote-deploy/29_final_check.sh
Normal file
34
.dev/remote-deploy/29_final_check.sh
Normal file
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/onebot_cookies2.txt
|
||||
rm -f "$JAR"
|
||||
|
||||
# 重新登录拿会话
|
||||
BODY=$(curl -s -c "$JAR" http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=admin@onebot.local" -d "password=OneBot@2026" \
|
||||
-d "_token=$CSRF" -H "X-CSRF-TOKEN: $CSRF" -o /dev/null
|
||||
|
||||
echo "=== BOM 页面内容检查 ==="
|
||||
BOM=$(curl -s -b "$JAR" http://127.0.0.1:8081/bom/show)
|
||||
echo "$BOM" | grep -oE "<title>[^<]*</title>" | head -1
|
||||
echo "$BOM" | grep -qi "BOM" && echo "✅ 页面含 BOM 内容" || echo "❌ 无 BOM"
|
||||
echo "$BOM" | grep -qi "新建 BOM" && echo "✅ 含新建 BOM 按钮" || echo "⚠️ 无新建 BOM(语言可能是 en-US)"
|
||||
echo "$BOM" | grep -qi "New BOM" && echo "✅ 含 New BOM 按钮" || echo "⚠️ 无 New BOM"
|
||||
|
||||
echo ""
|
||||
echo "=== 左侧菜单是否含 BOM 项 ==="
|
||||
echo "$BOM" | grep -oE 'href="[^"]*bom[^"]*"' | head -5
|
||||
echo "$BOM" | grep -qi "menu.bom\|BOM" && echo "✅ 菜单区含 BOM" || echo "⚠️ 菜单区未见 BOM 文案"
|
||||
|
||||
echo ""
|
||||
echo "=== dashboard 品牌检查 ==="
|
||||
DASH=$(curl -s -b "$JAR" http://127.0.0.1:8081/dashboard/show)
|
||||
echo "$DASH" | grep -oE "<title>[^<]*</title>" | head -1
|
||||
echo "$DASH" | grep -qi "OneBot" && echo "✅ dashboard 含 OneBot" || echo "⚠️ dashboard 无 OneBot 文案"
|
||||
echo "$DASH" | grep -qi "leantime" && echo "⚠️ dashboard 仍含 leantime(检查上下文)" || echo "✅ dashboard 无 leantime"
|
||||
|
||||
echo ""
|
||||
echo "=== 登录页 leantime 残留定位 ==="
|
||||
curl -s http://127.0.0.1:8081/auth/login | grep -oiE ".{40}leantime.{40}" | head -5
|
||||
17
.dev/remote-deploy/30_leantime_context.sh
Normal file
17
.dev/remote-deploy/30_leantime_context.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/onebot_cookies3.txt
|
||||
rm -f "$JAR"
|
||||
|
||||
BODY=$(curl -s -c "$JAR" http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=admin@onebot.local" -d "password=OneBot@2026" \
|
||||
-d "_token=$CSRF" -H "X-CSRF-TOKEN: $CSRF" -o /dev/null
|
||||
|
||||
echo "=== dashboard 页面 leantime 出现上下文 ==="
|
||||
curl -s -b "$JAR" http://127.0.0.1:8081/dashboard/show | grep -oiE ".{30}leantime.{30}" | head -10
|
||||
|
||||
echo ""
|
||||
echo "=== 可见文本(去标签)是否含 Leantime ==="
|
||||
curl -s -b "$JAR" http://127.0.0.1:8081/dashboard/show | sed 's/<[^>]*>//g' | grep -i "leantime" | head -5 || echo "✅ 可见文本无 Leantime"
|
||||
11
.dev/remote-deploy/31_check_ip.sh
Normal file
11
.dev/remote-deploy/31_check_ip.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
echo "=== 本机网卡 IP ==="
|
||||
ip -4 addr show 2>/dev/null | grep -E "inet " | awk '{print $2, $NF}'
|
||||
|
||||
echo ""
|
||||
echo "=== 192.168.1.44 是否可达(本机自测)==="
|
||||
curl -s -o /dev/null -w "HTTP=%{http_code}\n" --connect-timeout 5 http://192.168.1.44:8081/ || echo "8081 从本机 192.168.1.44 访问失败"
|
||||
|
||||
echo ""
|
||||
echo "=== nginx 监听 ==="
|
||||
ss -tlnp 2>/dev/null | grep -E ":8081|:80"
|
||||
17
.dev/remote-deploy/32_fix_url.sh
Normal file
17
.dev/remote-deploy/32_fix_url.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
APP_DIR=/var/www/onebot
|
||||
|
||||
echo "=== 修改站点 URL 为内网 IP ==="
|
||||
sed -i 's|http://119.29.53.45:8081|http://192.168.1.44:8081|g' "$APP_DIR/config/.env"
|
||||
grep -E "APP_URL|LEAN_APP_URL" "$APP_DIR/config/.env"
|
||||
|
||||
echo ""
|
||||
echo "=== 清缓存 ==="
|
||||
rm -rf "$APP_DIR/storage/framework/cache/"* 2>/dev/null
|
||||
rm -f "$APP_DIR/bootstrap/cache/"*.php 2>/dev/null
|
||||
echo "缓存已清"
|
||||
|
||||
echo ""
|
||||
echo "=== 验证重定向地址 ==="
|
||||
curl -s -i http://192.168.1.44:8081/ | grep -iE "^HTTP|^Location" | head -3
|
||||
15
.dev/remote-deploy/33_firewall.sh
Normal file
15
.dev/remote-deploy/33_firewall.sh
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
echo "=== ufw 状态 ==="
|
||||
sudo ufw status 2>/dev/null || echo "ufw 未启用/未安装"
|
||||
|
||||
echo ""
|
||||
echo "=== ufw 8081 放行 ==="
|
||||
sudo ufw allow 8081/tcp 2>/dev/null && echo "已放行 8081" || true
|
||||
|
||||
echo ""
|
||||
echo "=== 最终验证:内网 IP 访问 ==="
|
||||
curl -s -o /dev/null -w "192.168.1.44:8081 HTTP=%{http_code}\n" --connect-timeout 5 http://192.168.1.44:8081/
|
||||
|
||||
echo ""
|
||||
echo "=== 登录页品牌最终确认 ==="
|
||||
curl -s http://192.168.1.44:8081/auth/login | grep -oE "<title>[^<]*</title>" | head -1
|
||||
12
.dev/remote-deploy/34_update_admin.sh
Normal file
12
.dev/remote-deploy/34_update_admin.sh
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 生成新密码哈希 ==="
|
||||
HASH=$(php -r "echo password_hash('wrg521113..', PASSWORD_DEFAULT);")
|
||||
echo "哈希: ${HASH:0:20}..."
|
||||
|
||||
echo "=== 更新管理员账号 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "UPDATE zp_user SET username='ruiguo_wang@163.com', password='${HASH}', status='a', forcePwReset=0 WHERE id=1;" 2>/dev/null
|
||||
|
||||
echo "=== 验证 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, username, status, role FROM zp_user WHERE id=1;" 2>/dev/null
|
||||
23
.dev/remote-deploy/35_login_final.sh
Normal file
23
.dev/remote-deploy/35_login_final.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/onebot_cookies_final.txt
|
||||
rm -f "$JAR"
|
||||
|
||||
BODY=$(curl -s -c "$JAR" http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
|
||||
echo "=== 用新账号登录 ==="
|
||||
LOGIN=$(curl -s -i -b "$JAR" -c "$JAR" -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" \
|
||||
-d "password=wrg521113.." \
|
||||
-d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF")
|
||||
echo "$LOGIN" | grep -iE "^HTTP|^Location" | head -3
|
||||
|
||||
echo ""
|
||||
echo "=== 登录后 BOM 页面 ==="
|
||||
curl -s -b "$JAR" -o /dev/null -w "bom/show HTTP=%{http_code}\n" http://127.0.0.1:8081/bom/show
|
||||
|
||||
echo ""
|
||||
echo "=== dashboard 标题 ==="
|
||||
curl -s -b "$JAR" http://127.0.0.1:8081/dashboard/show | grep -oE "<title>[^<]*</title>" | head -1
|
||||
85
.dev/remote-deploy/36_teable_paste.sh
Normal file
85
.dev/remote-deploy/36_teable_paste.sh
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== PHP 语法检查 ==="
|
||||
for f in app/Domain/Bom/Services/Teable.php app/Domain/Bom/Services/Bom.php app/Domain/Bom/Controllers/Api.php app/Domain/Bom/routes.php; do
|
||||
php -l "$f" 2>&1
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== 清缓存 + 重载 fpm ==="
|
||||
rm -rf storage/framework/views/* storage/framework/cache/* bootstrap/cache/*.php 2>/dev/null
|
||||
echo "wrg521113.." | sudo -S systemctl reload php8.3-fpm >/dev/null 2>&1
|
||||
echo "done"
|
||||
|
||||
echo ""
|
||||
echo "=== 登录 ==="
|
||||
JAR=/tmp/onebot_paste_cookies.txt
|
||||
rm -f "$JAR"
|
||||
BODY=$(curl -s -c "$JAR" http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b "$JAR" -c "$JAR" -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" \
|
||||
-d "password=wrg521113.." \
|
||||
-d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null -w "login HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 粘贴解析接口测试 ==="
|
||||
cat > /tmp/paste_sample.txt <<'PASTEEOF'
|
||||
# Table: UAGP350B
|
||||
|
||||
## API Operations
|
||||
|
||||
### 1. Read Records (GET)
|
||||
curl -X GET "https://table.universal-onebot.com/api/table/tblGHwQc8eAGFZcZ71A/record?fieldKeyType=name" \
|
||||
-H "Authorization: Bearer teable_accaWtlglDjnwkieJXE_KaafZue9411p5G+QmP0r4zRsC6GDpUTuRDVfh2f8eco="
|
||||
PASTEEOF
|
||||
|
||||
php -r '$t=file_get_contents("/tmp/paste_sample.txt"); echo json_encode(["text"=>$t], JSON_UNESCAPED_SLASHES);' > /tmp/paste_payload.json
|
||||
|
||||
curl -s -b "$JAR" -X POST http://127.0.0.1:8081/bom/api/teable/parse \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" \
|
||||
--data-binary @/tmp/paste_payload.json
|
||||
echo ""
|
||||
|
||||
echo ""
|
||||
echo "=== Teable API 连通性(远程拉 1 条记录) ==="
|
||||
curl -s -m 20 "https://table.universal-onebot.com/api/table/tblGHwQc8eAGFZcZ71A/record?fieldKeyType=name&take=1" \
|
||||
-H "Authorization: Bearer teable_accaWtlglDjnwkieJXE_KaafZue9411p5G+QmP0r4zRsC6GDpUTuRDVfh2f8eco=" | head -c 400
|
||||
echo ""
|
||||
|
||||
echo ""
|
||||
echo "=== 端到端:新建测试 BOM -> 粘贴导入 -> 验证 -> 删除 ==="
|
||||
PROJECT_ID=$(mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT id FROM zp_projects LIMIT 1;" 2>/dev/null)
|
||||
echo "projectId=$PROJECT_ID"
|
||||
|
||||
CREATE_RESP=$(curl -s -b "$JAR" -X POST http://127.0.0.1:8081/bom/api \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d "{\"bomNo\":\"TEST-PASTE-1\",\"productName\":\"UAGP350B paste test\",\"projectId\":$PROJECT_ID}")
|
||||
echo "create: $CREATE_RESP"
|
||||
BOM_ID=$(echo "$CREATE_RESP" | grep -oE '"id":[0-9]+' | head -1 | sed 's/"id"://')
|
||||
echo "bomId=$BOM_ID"
|
||||
|
||||
if [ -n "$BOM_ID" ] && [ "$BOM_ID" -gt 0 ] 2>/dev/null; then
|
||||
echo ""
|
||||
echo "--- 粘贴导入(真实拉取 Teable 数据) ---"
|
||||
curl -s -b "$JAR" -X POST "http://127.0.0.1:8081/bom/api/$BOM_ID/import/teable-paste" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" \
|
||||
--data-binary @/tmp/paste_payload.json
|
||||
echo ""
|
||||
|
||||
echo "--- 验证行数 ---"
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT COUNT(*) FROM zp_bom_item WHERE bomId=$BOM_ID;" 2>/dev/null
|
||||
|
||||
echo "--- 清理测试 BOM ---"
|
||||
curl -s -b "$JAR" -X DELETE "http://127.0.0.1:8081/bom/api/$BOM_ID" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -w "delete HTTP=%{http_code}\n"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== 全部完成 ==="
|
||||
33
.dev/remote-deploy/37_diag.sh
Normal file
33
.dev/remote-deploy/37_diag.sh
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 1. BOM 列表 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, bomNo, productName, projectId FROM zp_bom ORDER BY id DESC LIMIT 5;" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 每个 BOM 的行数 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT bomId, COUNT(*) cnt FROM zp_bom_item GROUP BY bomId;" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 动态列 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, bomId, colKey, label FROM zp_bom_column ORDER BY bomId, sortOrder LIMIT 40;" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 4. 最新 BOM 的一行明细(extra 原始 JSON) ==="
|
||||
LATEST=$(mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT MAX(bomId) FROM zp_bom_item;" 2>/dev/null)
|
||||
echo "latest bomId with items = $LATEST"
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, seq, partNo, partName, extra FROM zp_bom_item WHERE bomId=$LATEST LIMIT 2\G" 2>/dev/null | head -60
|
||||
|
||||
echo ""
|
||||
echo "=== 5. Teable field 接口原始返回(前 3 个字段对象) ==="
|
||||
curl -s -m 20 "https://table.universal-onebot.com/api/table/tblGHwQc8eAGFZcZ71A/field" \
|
||||
-H "Authorization: Bearer teable_accaWtlglDjnwkieJXE_KaafZue9411p5G+QmP0r4zRsC6GDpUTuRDVfh2f8eco=" \
|
||||
| php -r '$d=json_decode(stream_get_contents(STDIN),true); echo json_encode(array_slice($d,0,3), JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);'
|
||||
|
||||
echo ""
|
||||
echo "=== 6. Teable 记录原始返回(第 1 条) ==="
|
||||
curl -s -m 20 "https://table.universal-onebot.com/api/table/tblGHwQc8eAGFZcZ71A/record?fieldKeyType=name&take=1" \
|
||||
-H "Authorization: Bearer teable_accaWtlglDjnwkieJXE_KaafZue9411p5G+QmP0r4zRsC6GDpUTuRDVfh2f8eco=" \
|
||||
| head -c 1200
|
||||
echo ""
|
||||
39
.dev/remote-deploy/38_diag2.sh
Normal file
39
.dev/remote-deploy/38_diag2.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 1. zp_bom_column 全部行(正确列名) ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, bomId, \`key\`, label, sortOrder FROM zp_bom_column ORDER BY bomId, sortOrder;" 2>&1 | grep -v "Warning"
|
||||
|
||||
echo ""
|
||||
echo "=== 2. zp_bom_source 全部行 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, bomId, name, tableId FROM zp_bom_source;" 2>&1 | grep -v "Warning"
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 远程文件 md5 ==="
|
||||
md5sum app/Domain/Bom/Services/Bom.php app/Domain/Bom/Services/Teable.php app/Domain/Bom/Templates/detail.blade.php
|
||||
|
||||
echo ""
|
||||
echo "=== 4. 远程 Bom.php importSource 字段循环(395-425 行) ==="
|
||||
sed -n '395,425p' app/Domain/Bom/Services/Bom.php
|
||||
|
||||
echo ""
|
||||
echo "=== 5. BOM 3 详情页渲染检查 ==="
|
||||
JAR=/tmp/ob38.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/bom/show/3" -o /tmp/ob38_detail.html -w "detail HTTP=%{http_code}\n"
|
||||
echo "--- 页面 th 数量及 data-key ---"
|
||||
grep -oE '<th data-key="[^"]*"' /tmp/ob38_detail.html | sed 's/<th data-key="//;s/"//' | tr '\n' ' '
|
||||
echo ""
|
||||
echo "--- 页面里的动态列标签(th 里的中文) ---"
|
||||
grep -oE '<th[^>]*>[^<]*' /tmp/ob38_detail.html | head -40
|
||||
|
||||
echo ""
|
||||
echo "=== 6. BOM 3 明细接口 JSON 前 300 字符 ==="
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/bom/api/3" | head -c 300
|
||||
echo ""
|
||||
40
.dev/remote-deploy/38b_diag3.sh
Normal file
40
.dev/remote-deploy/38b_diag3.sh
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== BOM1 前2行 extra ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, seq, partNo, LEFT(extra,200) e FROM zp_bom_item WHERE bomId=1 ORDER BY id LIMIT 2\G" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== zp_bom_item 表结构 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW CREATE TABLE zp_bom_item\G" 2>/dev/null | grep -E "CREATE|\`seq\`|\`partNo\`|\`extra\`"
|
||||
|
||||
echo ""
|
||||
echo "=== 登录并拉取两个 BOM 的详情页 ==="
|
||||
JAR=/tmp/ob38b.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null
|
||||
curl -s -b $JAR http://127.0.0.1:8081/bom/show/1 -o /tmp/ob38b_1.html
|
||||
curl -s -b $JAR http://127.0.0.1:8081/bom/show/3 -o /tmp/ob38b_3.html
|
||||
|
||||
cat > /tmp/check_row.php <<'PHPEOF'
|
||||
<?php
|
||||
foreach ([1, 3] as $bid) {
|
||||
$h = file_get_contents("/tmp/ob38b_$bid.html");
|
||||
echo "=== BOM $bid 页面渲染的第一行非空单元格 ===\n";
|
||||
if (! preg_match('/<tbody>(.*?)<\/tbody>/s', $h, $m)) { echo "no tbody\n"; continue; }
|
||||
if (! preg_match_all('/<tr data-item-id="(\d+)"(.*?)<\/tr>/s', $m[1], $rows)) { echo "no rows\n"; continue; }
|
||||
$n = 0;
|
||||
foreach ($rows[2] as $i => $body) {
|
||||
preg_match_all('/data-key="([^"]*)"[^>]*value="([^"]*)"/', $body, $mm, PREG_SET_ORDER);
|
||||
$filled = [];
|
||||
foreach ($mm as $x) { if ($x[2] !== '') { $filled[] = $x[1].'='.mb_substr($x[2], 0, 24); } }
|
||||
echo "row ".$rows[1][$i].": ".implode(' | ', $filled)."\n";
|
||||
if (++$n >= 2) break;
|
||||
}
|
||||
}
|
||||
PHPEOF
|
||||
php /tmp/check_row.php
|
||||
37
.dev/remote-deploy/39_deploy_v2.sh
Normal file
37
.dev/remote-deploy/39_deploy_v2.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 1. PHP 语法检查 ==="
|
||||
for f in \
|
||||
app/Domain/Bom/Services/Teable.php \
|
||||
app/Domain/Bom/Services/Bom.php \
|
||||
app/Domain/Bom/Services/Excel.php \
|
||||
app/Domain/Bom/Controllers/Api.php \
|
||||
app/Domain/Bom/routes.php \
|
||||
app/Domain/Bom/Repositories/Bom.php \
|
||||
app/Domain/Install/Repositories/Install.php \
|
||||
app/Domain/Install/Services/SchemaBuilder.php \
|
||||
app/Core/Configuration/AppSettings.php ; do
|
||||
php -l "$f" 2>&1 | grep -v "No syntax errors" || true
|
||||
done
|
||||
echo "语法检查完成"
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 清缓存 ==="
|
||||
rm -rf storage/framework/views/* storage/framework/cache/* bootstrap/cache/*.php 2>/dev/null
|
||||
echo "done"
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 执行数据库迁移(updateDB) ==="
|
||||
php public/index.php db:update 2>&1 | tail -30 || echo "db:update 命令可能不存在,尝试其他方式"
|
||||
|
||||
echo ""
|
||||
echo "=== 4. 检查 db-version 和 hiddenColumns 列 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT \`key\`,\`value\` FROM zp_settings WHERE \`key\`='db-version';" 2>/dev/null
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SHOW COLUMNS FROM zp_bom LIKE 'hiddenColumns';" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 5. 重载 fpm ==="
|
||||
echo "wrg521113.." | sudo -S systemctl reload php8.3-fpm >/dev/null 2>&1
|
||||
echo "done"
|
||||
57
.dev/remote-deploy/40_verify_v2.sh
Normal file
57
.dev/remote-deploy/40_verify_v2.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
|
||||
JAR=/tmp/ob40.txt
|
||||
rm -f $JAR
|
||||
|
||||
echo "=== 登录 ==="
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null -w "login HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 详情页 HTTP 状态 ==="
|
||||
curl -s -b $JAR -o /tmp/ob40_detail.html -w "bom/show/3 HTTP=%{http_code}\n" http://127.0.0.1:8081/bom/show/3
|
||||
|
||||
echo ""
|
||||
echo "=== 页面关键元素检查 ==="
|
||||
echo -n "横向滚动容器: "; grep -c 'overflow-x:auto' /tmp/ob40_detail.html
|
||||
echo -n "列设置按钮: "; grep -c 'btnColumnSettings' /tmp/ob40_detail.html
|
||||
echo -n "Teable下拉: "; grep -c 'btnTeablePaste' /tmp/ob40_detail.html
|
||||
echo -n "Excel模板导出: "; grep -c 'btnExcelTemplate' /tmp/ob40_detail.html
|
||||
echo -n "Excel导出xlsx: "; grep -c 'btnExcelExport' /tmp/ob40_detail.html
|
||||
echo -n "粘贴手动补齐输入框(pasteBaseUrl): "; grep -c 'pasteBaseUrl' /tmp/ob40_detail.html
|
||||
echo -n "缩略图列显示友好(非JSON, 看是否有image.png): "; grep -c 'image.png' /tmp/ob40_detail.html
|
||||
|
||||
echo ""
|
||||
echo "=== 列显隐 API 测试(隐藏 seq + 项目) ==="
|
||||
curl -s -b $JAR -X POST http://127.0.0.1:8081/bom/api/3/column-visibility \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d '{"keys":["seq","项目"]}' -w "\nvisibility HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 验证隐藏列已持久化 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT hiddenColumns FROM zp_bom WHERE id=3;" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 导出 xlsx ==="
|
||||
curl -s -b $JAR -o /tmp/ob40_export.xlsx -w "export xlsx HTTP=%{http_code} size=%{size_download}\n" "http://127.0.0.1:8081/bom/api/3/export?format=xlsx"
|
||||
echo -n "xlsx 文件头(应为 PK): "; head -c 2 /tmp/ob40_export.xlsx; echo ""
|
||||
|
||||
echo ""
|
||||
echo "=== 导出模板 ==="
|
||||
curl -s -b $JAR -o /tmp/ob40_tpl.xlsx -w "export-template HTTP=%{http_code} size=%{size_download}\n" "http://127.0.0.1:8081/bom/api/3/export-template"
|
||||
|
||||
echo ""
|
||||
echo "=== 恢复列显隐(清空) ==="
|
||||
curl -s -b $JAR -X POST http://127.0.0.1:8081/bom/api/3/column-visibility \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d '{"keys":[]}' -w "reset HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 全部完成 ==="
|
||||
26
.dev/remote-deploy/41_test_attach.sh
Normal file
26
.dev/remote-deploy/41_test_attach.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
|
||||
echo "=== 1. 取一个附件字段原始值 ==="
|
||||
curl -s -m 20 "https://table.universal-onebot.com/api/table/tblGHwQc8eAGFZcZ71A/record?fieldKeyType=name&take=1" \
|
||||
-H "Authorization: Bearer teable_accaWtlglDjnwkieJXE_KaafZue9411p5G+QmP0r4zRsC6GDpUTuRDVfh2f8eco=" \
|
||||
| php -r '$d=json_decode(stream_get_contents(STDIN),true); $f=$d["records"][0]["fields"]["缩略图"][0] ?? []; echo json_encode($f, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);'
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 提取 smThumbnailUrl 并测试直连(不带 Bearer) ==="
|
||||
URL=$(curl -s -m 20 "https://table.universal-onebot.com/api/table/tblGHwQc8eAGFZcZ71A/record?fieldKeyType=name&take=1" \
|
||||
-H "Authorization: Bearer teable_accaWtlglDjnwkieJXE_KaafZue9411p5G+QmP0r4zRsC6GDpUTuRDVfh2f8eco=" \
|
||||
| php -r '$d=json_decode(stream_get_contents(STDIN),true); $f=$d["records"][0]["fields"]["缩略图"][0] ?? []; echo $f["smThumbnailUrl"] ?? "";')
|
||||
echo "smThumbnailUrl=$URL"
|
||||
if [ -n "$URL" ]; then
|
||||
FULL="https://table.universal-onebot.com$URL"
|
||||
echo "--- 直连(无 Bearer)---"
|
||||
curl -s -m 15 -o /dev/null -w "HTTP=%{http_code} type=%{content_type} size=%{size_download}\n" "$FULL"
|
||||
echo "--- 带 Bearer ---"
|
||||
curl -s -m 15 -o /dev/null -w "HTTP=%{http_code} type=%{content_type} size=%{size_download}\n" -H "Authorization: Bearer teable_accaWtlglDjnwkieJXE_KaafZue9411p5G+QmP0r4zRsC6GDpUTuRDVfh2f8eco=" "$FULL"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== 3. CDN 可达性测试(Handsontable) ==="
|
||||
curl -s -m 10 -o /dev/null -w "jsdelivr HTTP=%{http_code}\n" "https://cdn.jsdelivr.net/npm/handsontable/dist/handsontable.full.min.js" 2>&1 || echo "jsdelivr 不可达"
|
||||
curl -s -m 10 -o /dev/null -w "unpkg HTTP=%{http_code}\n" "https://unpkg.com/handsontable/dist/handsontable.full.min.js" 2>&1 || echo "unpkg 不可达"
|
||||
20
.dev/remote-deploy/42_dl_handsontable.sh
Normal file
20
.dev/remote-deploy/42_dl_handsontable.sh
Normal file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
DIR=public/dist/handsontable
|
||||
mkdir -p "$DIR"
|
||||
|
||||
BASE="https://cdn.jsdelivr.net/npm/handsontable@14.6.2/dist"
|
||||
echo "=== 下载 Handsontable 14.6.2 ==="
|
||||
curl -s -m 60 -o "$DIR/handsontable.full.min.js" "$BASE/handsontable.full.min.js" && echo "js ok $(wc -c < "$DIR/handsontable.full.min.js") bytes"
|
||||
curl -s -m 60 -o "$DIR/handsontable.full.min.css" "$BASE/handsontable.full.min.css" && echo "css ok $(wc -c < "$DIR/handsontable.full.min.css") bytes"
|
||||
|
||||
echo ""
|
||||
echo "=== 校验(js 应有 Handsontable 关键字,css 应有 .handsontable) ==="
|
||||
head -c 60 "$DIR/handsontable.full.min.js"; echo ""
|
||||
grep -c "handsontable" "$DIR/handsontable.full.min.css" 2>/dev/null || echo "css 校验失败"
|
||||
|
||||
echo ""
|
||||
echo "=== 通过 web 验证可访问 ==="
|
||||
curl -s -o /dev/null -w "js HTTP=%{http_code}\n" "http://127.0.0.1:8081/dist/handsontable/handsontable.full.min.js"
|
||||
curl -s -o /dev/null -w "css HTTP=%{http_code}\n" "http://127.0.0.1:8081/dist/handsontable/handsontable.full.min.css"
|
||||
49
.dev/remote-deploy/43_verify_hot.sh
Normal file
49
.dev/remote-deploy/43_verify_hot.sh
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
|
||||
JAR=/tmp/ob43.txt
|
||||
rm -f $JAR
|
||||
|
||||
echo "=== 登录 ==="
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null -w "login HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 详情页渲染 ==="
|
||||
curl -s -b $JAR -o /tmp/ob43.html -w "bom/show/3 HTTP=%{http_code}\n" http://127.0.0.1:8081/bom/show/3
|
||||
|
||||
echo ""
|
||||
echo "=== 关键元素检查 ==="
|
||||
echo -n "Handsontable js 引入: "; grep -c 'handsontable.full.min.js' /tmp/ob43.html
|
||||
echo -n "Handsontable css 引入: "; grep -c 'handsontable.full.min.css' /tmp/ob43.html
|
||||
echo -n "bomHot 容器: "; grep -c 'id="bomHot"' /tmp/ob43.html
|
||||
echo -n "imageRenderer: "; grep -c 'imageRenderer' /tmp/ob43.html
|
||||
echo -n "fileRenderer: "; grep -c 'fileRenderer' /tmp/ob43.html
|
||||
echo -n "new Handsontable: "; grep -c 'new Handsontable' /tmp/ob43.html
|
||||
echo -n "附件 URL (attachments/read): "; grep -c 'attachments/read' /tmp/ob43.html
|
||||
echo -n "图片缩略图 img 标签: "; grep -c '<img' /tmp/ob43.html
|
||||
|
||||
echo ""
|
||||
echo "=== 明细 API 返回的附件字段(应为 JSON 数组含 url) ==="
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/bom/api/3" | php -r '
|
||||
$d=json_decode(stream_get_contents(STDIN),true);
|
||||
$cols=$d["data"]["columns"] ?? [];
|
||||
$img=$d["data"]["imageColumns"] ?? [];
|
||||
$file=$d["data"]["fileColumns"] ?? [];
|
||||
echo "imageColumns: ".json_encode($img,JSON_UNESCAPED_UNICODE)."\n";
|
||||
echo "fileColumns: ".json_encode($file,JSON_UNESCAPED_UNICODE)."\n";
|
||||
$it=$d["data"]["items"][0] ?? [];
|
||||
foreach($img as $k){ echo "首行 $k = ".substr((string)($it[$k]??""),0,120)."\n"; }
|
||||
'
|
||||
|
||||
echo ""
|
||||
echo "=== Handsontable 静态资源可访问 ==="
|
||||
curl -s -o /dev/null -w "js HTTP=%{http_code}\n" http://127.0.0.1:8081/dist/handsontable/handsontable.full.min.js
|
||||
curl -s -o /dev/null -w "css HTTP=%{http_code}\n" http://127.0.0.1:8081/dist/handsontable/handsontable.full.min.css
|
||||
|
||||
echo ""
|
||||
echo "=== 完成 ==="
|
||||
22
.dev/remote-deploy/44_verify_fullscreen.sh
Normal file
22
.dev/remote-deploy/44_verify_fullscreen.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/ob44.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null
|
||||
curl -s -b $JAR -o /tmp/ob44.html -w "detail HTTP=%{http_code}\n" http://127.0.0.1:8081/bom/show/3
|
||||
|
||||
echo "=== 关键改动检查 ==="
|
||||
echo -n "filters 筛选插件: "; grep -c 'filters: true' /tmp/ob44.html
|
||||
echo -n "dropdownMenu 列头下拉: "; grep -c 'dropdownMenu: true' /tmp/ob44.html
|
||||
echo -n "search 搜索插件: "; grep -c 'search: true' /tmp/ob44.html
|
||||
echo -n "stretchH 铺满: "; grep -c "stretchH: 'all'" /tmp/ob44.html
|
||||
echo -n "calcHeight 动态高度: "; grep -c 'function calcHeight' /tmp/ob44.html
|
||||
echo -n "window resize 重算: "; grep -c "'resize'" /tmp/ob44.html
|
||||
echo -n "数据源管理按钮: "; grep -c 'btnSourceManager' /tmp/ob44.html
|
||||
echo -n "数据源管理弹窗: "; grep -c 'sourceManagerModal' /tmp/ob44.html
|
||||
echo -n "顶部源配置面板已移除(应为0): "; grep -c 'Teable 数据源</div>' /tmp/ob44.html
|
||||
59
.dev/remote-deploy/45_verify_ref.sh
Normal file
59
.dev/remote-deploy/45_verify_ref.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/ob45.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null -w "login HTTP=%{http_code}\n"
|
||||
|
||||
MASTER_ID=$(mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT id FROM zp_bom WHERE bomNo='1' ORDER BY id DESC LIMIT 1;" 2>/dev/null)
|
||||
echo "masterId=$MASTER_ID"
|
||||
|
||||
echo ""
|
||||
echo "=== 1. 项目关联主数据 ==="
|
||||
LINK=$(curl -s -b $JAR -X POST http://127.0.0.1:8081/bom/api/ref/link \
|
||||
-H "Content-Type: application/json" -H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d "{\"projectId\":1,\"masterId\":$MASTER_ID}")
|
||||
echo "$LINK"
|
||||
REF_ID=$(echo "$LINK" | grep -oE '"refId":[0-9]+' | head -1 | sed 's/"refId"://')
|
||||
echo "refId=$REF_ID"
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 项目级追加列(采购数量) ==="
|
||||
COL=$(curl -s -b $JAR -X POST "http://127.0.0.1:8081/bom/api/ref/$REF_ID/column" \
|
||||
-H "Content-Type: application/json" -H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d '{"key":"采购数量","label":"采购数量"}')
|
||||
echo "$COL"
|
||||
COL_ID=$(echo "$COL" | grep -oE '"columnId":[0-9]+' | head -1 | sed 's/"columnId"://')
|
||||
echo "columnId=$COL_ID"
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 项目级存值(itemId 用第一条明细) ==="
|
||||
ITEM_ID=$(mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT id FROM zp_bom_item WHERE bomId=$MASTER_ID ORDER BY id LIMIT 1;" 2>/dev/null)
|
||||
echo "itemId=$ITEM_ID"
|
||||
curl -s -b $JAR -X POST "http://127.0.0.1:8081/bom/api/ref/$REF_ID/value" \
|
||||
-H "Content-Type: application/json" -H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d "{\"columnId\":$COL_ID,\"itemId\":$ITEM_ID,\"value\":\"999\"}" -w " save HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 4. 验证:项目级值已写入引用层 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT * FROM zp_master_ref_value WHERE refId=$REF_ID;" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 5. 验证:全局主数据行未被修改(extra 不含采购数量) ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, extra LIKE '%采购数量%' AS has_col FROM zp_bom_item WHERE id=$ITEM_ID;" 2>/dev/null
|
||||
|
||||
echo ""
|
||||
echo "=== 6. 引用详情接口 ==="
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/bom/api/ref/$REF_ID" | head -c 400
|
||||
echo ""
|
||||
|
||||
echo ""
|
||||
echo "=== 7. 清理测试数据 ==="
|
||||
curl -s -b $JAR -X DELETE "http://127.0.0.1:8081/bom/api/ref/$REF_ID" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -w "unlink HTTP=%{http_code}\n"
|
||||
echo ""
|
||||
echo "=== 完成 ==="
|
||||
41
.dev/remote-deploy/48_verify_refs_view.sh
Normal file
41
.dev/remote-deploy/48_verify_refs_view.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/ob48.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null -w "login HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 1. 引用列表页 /bom/refs ==="
|
||||
curl -s -b $JAR -o /tmp/ob48_refs.html -w "refs HTTP=%{http_code}\n" http://127.0.0.1:8081/bom/refs
|
||||
grep -oE "项目引用的主数据|尚未关联" /tmp/ob48_refs.html | head -1
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 先关联一个主数据 ==="
|
||||
MASTER_ID=$(mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT id FROM zp_bom WHERE bomNo='1' ORDER BY id DESC LIMIT 1;" 2>/dev/null)
|
||||
echo "masterId=$MASTER_ID"
|
||||
LINK=$(curl -s -b $JAR -X POST http://127.0.0.1:8081/bom/api/ref/link \
|
||||
-H "Content-Type: application/json" -H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d "{\"projectId\":1,\"masterId\":$MASTER_ID}")
|
||||
echo "$LINK"
|
||||
REF_ID=$(echo "$LINK" | grep -oE '"refId":[0-9]+' | head -1 | sed 's/"refId"://')
|
||||
echo "refId=$REF_ID"
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 引用详情页 /bom/refs/$REF_ID ==="
|
||||
curl -s -b $JAR -o /tmp/ob48_refdetail.html -w "refDetail HTTP=%{http_code}\n" "http://127.0.0.1:8081/bom/refs/$REF_ID"
|
||||
echo -n "标题含'引用视图': "; grep -c "引用视图" /tmp/ob48_refdetail.html
|
||||
echo -n "增加项目列按钮: "; grep -c "btnAddRefColumn" /tmp/ob48_refdetail.html
|
||||
echo -n "refVal 输入框: "; grep -c "refVal" /tmp/ob48_refdetail.html
|
||||
|
||||
echo ""
|
||||
echo "=== 4. 清理测试引用 ==="
|
||||
curl -s -b $JAR -X DELETE "http://127.0.0.1:8081/bom/api/ref/$REF_ID" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -w "unlink HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 完成 ==="
|
||||
32
.dev/remote-deploy/51_verify_global.sh
Normal file
32
.dev/remote-deploy/51_verify_global.sh
Normal file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/ob51.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null -w "login HTTP=%{http_code}\n"
|
||||
|
||||
echo ""
|
||||
echo "=== 1. 主数据列表(全局,与项目无关) ==="
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/bom/show?type=bom" -o /tmp/ob51_bom.html -w "bom list HTTP=%{http_code}\n"
|
||||
echo -n "列表含 PRUAGP215: "; grep -c "PRUAGP215" /tmp/ob51_bom.html
|
||||
echo -n "列表含 PR215: "; grep -c "PR215" /tmp/ob51_bom.html
|
||||
|
||||
echo ""
|
||||
echo "=== 2. 主数据详情(全局 projectId=0,鉴权用全局角色) ==="
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/bom/api/1" -o /tmp/ob51_detail.json -w "detail HTTP=%{http_code}\n"
|
||||
echo -n "详情返回 projectId=0: "; grep -oE '"projectId":0' /tmp/ob51_detail.json | head -1
|
||||
|
||||
echo ""
|
||||
echo "=== 3. 数据室菜单含主数据 + 图标 ==="
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/dashboard/show" -o /tmp/ob51_dash.html
|
||||
echo -n "菜单含 BOM 图标 fa-list-check: "; grep -c "fa-list-check" /tmp/ob51_dash.html
|
||||
echo -n "菜单含工艺文件: "; grep -c "工艺文件" /tmp/ob51_dash.html
|
||||
echo -n "菜单含工具清单: "; grep -c "工具清单" /tmp/ob51_dash.html
|
||||
echo -n "make分组不再含BOM(应为0): "; grep -c 'id="submenu-materialize"' /tmp/ob51_dash.html
|
||||
|
||||
echo ""
|
||||
echo "=== 完成 ==="
|
||||
33
.dev/remote-deploy/64_diag_data.sh
Normal file
33
.dev/remote-deploy/64_diag_data.sh
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/ob64.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null
|
||||
curl -s -b $JAR "http://127.0.0.1:8081/bom/show/1" -o /tmp/ob64.html
|
||||
|
||||
php -r '
|
||||
$h = file_get_contents("/tmp/ob64.html");
|
||||
if (preg_match("/var RAW_ITEMS = (\[.*?\]);/s", $h, $m)) {
|
||||
$items = json_decode($m[1], true);
|
||||
echo "RAW_ITEMS 元素数: " . (is_array($items) ? count($items) : "解析失败") . "\n";
|
||||
if (is_array($items) && isset($items[0])) {
|
||||
echo "第1行完整: " . json_encode($items[0], JSON_UNESCAPED_UNICODE) . "\n";
|
||||
echo "第1行字段数: " . count($items[0]) . "\n";
|
||||
}
|
||||
} else {
|
||||
echo "未匹配 RAW_ITEMS\n";
|
||||
}
|
||||
if (preg_match("/var COLUMNS = (\[.*?\]);/s", $h, $m)) {
|
||||
$cols = json_decode($m[1], true);
|
||||
echo "COLUMNS 数: " . (is_array($cols) ? count($cols) : "解析失败") . "\n";
|
||||
if (is_array($cols)) echo "COLUMNS keys: " . implode(",", array_column($cols, "key")) . "\n";
|
||||
}
|
||||
if (preg_match("/var FIXED = (\[.*?\]);/s", $h, $m)) {
|
||||
$fixed = json_decode($m[1], true);
|
||||
echo "FIXED keys: " . implode(",", $fixed) . "\n";
|
||||
}
|
||||
'
|
||||
8
.dev/remote-deploy/70_diag_attach.sh
Normal file
8
.dev/remote-deploy/70_diag_attach.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
echo "=== BOM3 第一条缩略图完整值 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -N -e "SELECT extra FROM zp_bom_item WHERE bomId=3 ORDER BY id LIMIT 1;" 2>/dev/null > /tmp/extra3.txt
|
||||
php -r '$d=json_decode(file_get_contents("/tmp/extra3.txt"),true); echo "缩略图原始值: ".$d["缩略图"]."\n\n"; $t=json_decode($d["缩略图"]??"[]",true); if(is_array($t)&&isset($t[0])){ echo "=== 第一项字段 ===\n"; foreach($t[0] as $k=>$v){ if(is_string($v)&&strlen($v)>80){ echo $k.": ".substr($v,0,80)."... (len ".strlen($v).")\n"; } else { echo $k.": ".var_export($v,true)."\n"; } } }'
|
||||
echo ""
|
||||
echo "=== BOM3 数据源 baseUrl ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, name, baseUrl, tableId FROM zp_bom_source WHERE bomId=3;" 2>/dev/null
|
||||
21
.dev/remote-deploy/80_test_save.sh
Normal file
21
.dev/remote-deploy/80_test_save.sh
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/onebot
|
||||
JAR=/tmp/ob80.txt
|
||||
rm -f $JAR
|
||||
BODY=$(curl -s -c $JAR http://127.0.0.1:8081/auth/login)
|
||||
CSRF=$(echo "$BODY" | grep -oE 'name="csrf-token" content="[^"]*"' | sed 's/.*content="//;s/"//')
|
||||
curl -s -b $JAR -c $JAR -X POST http://127.0.0.1:8081/auth/login \
|
||||
-d "username=ruiguo_wang@163.com" -d "password=wrg521113.." -d "_token=$CSRF" \
|
||||
-H "X-CSRF-TOKEN: $CSRF" -o /dev/null
|
||||
|
||||
echo "=== 测试保存 BOM1 第一条明细(itemId=251,改 partNo 为测试值) ==="
|
||||
curl -s -b $JAR -X POST http://127.0.0.1:8081/bom/api/1/item \
|
||||
-H "Content-Type: application/json" -H "X-CSRF-TOKEN: $CSRF" \
|
||||
-d '{"itemId":251,"seq":0,"partNo":"TEST-SAVE-1","partName":"测试保存","material":"","spec":"","qtyPerUnit":"","unit":"","process":"","remark":"","项目":"1","零件代号":"PR4391-"}'
|
||||
echo ""
|
||||
|
||||
echo "=== 验证数据库是否写入 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "SELECT id, partNo, partName FROM zp_bom_item WHERE id=251;" 2>/dev/null
|
||||
|
||||
echo "=== 恢复原值 ==="
|
||||
mysql -uonebot -p'OneBot_Db_7xKpQ9z' -h127.0.0.1 onebot -e "UPDATE zp_bom_item SET partNo='', partName='' WHERE id=251;" 2>/dev/null
|
||||
52
.dev/remote-deploy/onebot-nginx.conf
Normal file
52
.dev/remote-deploy/onebot-nginx.conf
Normal file
@@ -0,0 +1,52 @@
|
||||
server {
|
||||
listen 8081;
|
||||
listen [::]:8081;
|
||||
|
||||
server_name _;
|
||||
set $base /var/www/onebot;
|
||||
root $base/public;
|
||||
|
||||
access_log /var/log/nginx/onebot.access.log;
|
||||
error_log /var/log/nginx/onebot.error.log warn;
|
||||
|
||||
index index.php;
|
||||
|
||||
client_max_body_size 64M;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$args;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
try_files $fastcgi_script_name =404;
|
||||
include fastcgi_params;
|
||||
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
|
||||
fastcgi_index index.php;
|
||||
fastcgi_buffers 8 16k;
|
||||
fastcgi_buffer_size 32k;
|
||||
fastcgi_param DOCUMENT_ROOT $realpath_root;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
}
|
||||
|
||||
location = /favicon.ico {
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location ^~ /dist/ {
|
||||
expires 7d;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_min_length 1024;
|
||||
gzip_proxied expired no-cache no-store private auth;
|
||||
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/javascript;
|
||||
gzip_disable "MSIE [1-6]\.";
|
||||
}
|
||||
Reference in New Issue
Block a user