PROJECT_PATH="${1:-/www/wwwroot/bb.6upw.com}" && echo -e "\033[0;32m╔══════════════════════════════════════════╗\033[0m" && echo -e "\033[0;32m║ 阿力科技 环境检测脚本 v1.0 ║\033[0m" && echo -e "\033[0;32m╚══════════════════════════════════════════╝\033[0m" && echo -e "检测路径: \033[1;33m$PROJECT_PATH\033[0m\n" && echo -e "\033[0;34m[1/10] 系统检测\033[0m" && ARCH=$(uname -m) && CPU=$(nproc) && MEM=$(free -m | awk '/^Mem:/{print $2}') && [[ "$ARCH" == "x86_64" ]] && echo -e " \033[0;32m✓\033[0m 架构: $ARCH" || echo -e " \033[1;33m⚠\033[0m 架构: $ARCH" && [[ $CPU -ge 2 ]] && echo -e " \033[0;32m✓\033[0m CPU: ${CPU}核" || echo -e " \033[1;33m⚠\033[0m CPU: ${CPU}核" && [[ $MEM -ge 2048 ]] && echo -e " \033[0;32m✓\033[0m 内存: ${MEM}MB" || echo -e " \033[1;33m⚠\033[0m 内存: ${MEM}MB" && echo -e "\n\033[0;34m[2/10] 宝塔环境\033[0m" && ([ -f /www/server/nginx/sbin/nginx ] && echo -e " \033[0;32m✓\033[0m Nginx已安装" || echo -e " \033[0;31m✗\033[0m Nginx未安装") && ([ -f /www/server/mysql/bin/mysql ] && echo -e " \033[0;32m✓\033[0m MySQL已安装" || echo -e " \033[0;31m✗\033[0m MySQL未安装") && echo -e "\n\033[0;34m[3/10] PHP 8.3\033[0m" && if [ -f /www/server/php/83/bin/php ]; then echo -e " \033[0;32m✓\033[0m PHP 8.3已安装"; if /www/server/php/83/bin/php -m 2>/dev/null | grep -qi "fileinfo"; then echo -e " \033[0;32m✓\033[0m fileinfo扩展已安装"; else echo -e " \033[1;33m⚠\033[0m fileinfo扩展未安装"; fi; MAX_TIME=$(/www/server/php/83/bin/php -i 2>/dev/null | grep "max_execution_time" | head -1 | cut -d'=' -f2 | tr -d ' '); [[ $MAX_TIME -ge 600 ]] && echo -e " \033[0;32m✓\033[0m max_execution_time=$MAX_TIME" || echo -e " \033[1;33m⚠\033[0m max_execution_time=$MAX_TIME(需600)"; else echo -e " \033[0;31m✗\033[0m PHP 8.3未安装"; fi && echo -e "\n\033[0;34m[4/10] APK构建依赖\033[0m" && (java -version 2>&1 | grep -q "11\." && echo -e " \033[0;32m✓\033[0m Java JDK 11" || echo -e " \033[0;31m✗\033[0m Java JDK 11未安装") && (dotnet --list-runtimes 2>&1 | grep -q "Microsoft.NETCore.App 8\." && echo -e " \033[0;32m✓\033[0m .NET 8.0" || echo -e " \033[0;31m✗\033[0m .NET 8.0未安装") && (command -v 7z >/dev/null && echo -e " \033[0;32m✓\033[0m 7z已安装" || echo -e " \033[0;31m✗\033[0m 7z未安装") && (command -v zipalign >/dev/null && echo -e " \033[0;32m✓\033[0m zipalign已安装" || echo -e " \033[0;31m✗\033[0m zipalign未安装") && echo -e "\n\033[0;34m[5/10] Node.js & PM2\033[0m" && (command -v node >/dev/null && echo -e " \033[0;32m✓\033[0m Node.js $(node -v)" || echo -e " \033[1;33m⚠\033[0m Node.js未安装") && (command -v pm2 >/dev/null && echo -e " \033[0;32m✓\033[0m PM2已安装" || echo -e " \033[1;33m⚠\033[0m PM2未安装") && echo -e "\n\033[0;34m[6/10] 关键文件\033[0m" && ([ -f "$PROJECT_PATH/.env" ] && echo -e " \033[0;32m✓\033[0m .env存在" || echo -e " \033[0;31m✗\033[0m .env不存在") && ([ -f "$PROJECT_PATH/private/build_api.php" ] && echo -e " \033[0;32m✓\033[0m build_api.php存在" || echo -e " \033[0;31m✗\033[0m build_api.php不存在") && ([ -f "$PROJECT_PATH/private/EaodStarter" ] && echo -e " \033[0;32m✓\033[0m EaodStarter存在" || echo -e " \033[0;31m✗\033[0m EaodStarter不存在") && ([ -f "$PROJECT_PATH/private/apkstub/apkstub.zip" ] && echo -e " \033[0;32m✓\033[0m apkstub.zip存在" || echo -e " \033[0;31m✗\033[0m apkstub.zip不存在") && ([ -f "$PROJECT_PATH/api/ws/websocket-server.js" ] && echo -e " \033[0;32m✓\033[0m websocket-server.js存在" || echo -e " \033[0;31m✗\033[0m websocket-server.js不存在") && echo -e "\n\033[0;34m[7/10] 权限检测\033[0m" && OWNER=$(stat -c '%U' "$PROJECT_PATH" 2>/dev/null) && ([ "$OWNER" = "www" ] && echo -e " \033[0;32m✓\033[0m 所有者: www" || echo -e " \033[1;33m⚠\033[0m 所有者: ${OWNER:-?}") && ([ -w "$PROJECT_PATH/user" ] 2>/dev/null && echo -e " \033[0;32m✓\033[0m user可写" || echo -e " \033[1;33m⚠\033[0m user不可写") && ([ -x "$PROJECT_PATH/private/EaodStarter" ] 2>/dev/null && echo -e " \033[0;32m✓\033[0m EaodStarter可执行" || echo -e " \033[1;33m⚠\033[0m EaodStarter缺执行权限") && echo -e "\n\033[0;34m[8/10] .env配置检测\033[0m" && if [ -f "$PROJECT_PATH/.env" ]; then DB_NAME=$(grep "^DB_NAME=" "$PROJECT_PATH/.env" | cut -d'=' -f2 | tr -d '\r'); DB_USER=$(grep "^DB_USER=" "$PROJECT_PATH/.env" | cut -d'=' -f2 | tr -d '\r'); APP_DOMAIN=$(grep "^APP_DOMAIN=" "$PROJECT_PATH/.env" | cut -d'=' -f2 | tr -d '\r'); [[ -n "$DB_NAME" && "$DB_NAME" != "your_db_name" ]] && echo -e " \033[0;32m✓\033[0m DB_NAME已配置" || echo -e " \033[0;31m✗\033[0m DB_NAME未配置"; [[ -n "$DB_USER" && "$DB_USER" != "your_db_user" ]] && echo -e " \033[0;32m✓\033[0m DB_USER已配置" || echo -e " \033[0;31m✗\033[0m DB_USER未配置"; [[ -n "$APP_DOMAIN" && "$APP_DOMAIN" != "bb.6upw.com" ]] && echo -e " \033[0;32m✓\033[0m APP_DOMAIN=$APP_DOMAIN" || echo -e " \033[1;33m⚠\033[0m APP_DOMAIN=${APP_DOMAIN:-?}(建议修改)"; fi && echo -e "\n\033[0;34m[9/10] WebSocket服务\033[0m" && if command -v pm2 >/dev/null; then pm2 list 2>/dev/null | grep -q "lingjie-ws" && echo -e " \033[0;32m✓\033[0m PM2进程lingjie-ws运行中" || echo -e " \033[1;33m⚠\033[0m lingjie-ws未运行"; else echo -e " \033[1;33m⚠\033[0m 无法检测PM2状态"; fi && (netstat -tlnp 2>/dev/null | grep -q ":8080" || ss -tlnp 2>/dev/null | grep -q ":8080") && echo -e " \033[0;32m✓\033[0m 端口8080已监听" || echo -e " \033[1;33m⚠\033[0m 端口8080未监听" && echo -e "\n\033[0;34m[10/10] 数据库连接\033[0m" && if [ -f "$PROJECT_PATH/.env" ] && [ -n "$DB_USER" ] && [ -n "$DB_NAME" ]; then DB_PASS=$(grep "^DB_PASSWORD=" "$PROJECT_PATH/.env" | cut -d'=' -f2 | tr -d '\r'); if /www/server/mysql/bin/mysql -h127.0.0.1 -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "SELECT 1" 2>/dev/null; then echo -e " \033[0;32m✓\033[0m 数据库连接成功"; ADMIN_COUNT=$(/www/server/mysql/bin/mysql -h127.0.0.1 -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" -sN -e "SELECT COUNT(*) FROM users WHERE authorty='admin'" 2>/dev/null); [ -n "$ADMIN_COUNT" ] && [ "$ADMIN_COUNT" -gt 0 ] && echo -e " \033[0;32m✓\033[0m 管理员账号存在($ADMIN_COUNT个)" || echo -e " \033[1;33m⚠\033[0m 未找到管理员账号"; else echo -e " \033[0;31m✗\033[0m 数据库连接失败"; fi; fi && echo -e "\n\033[0;34m[SSL] SSL证书\033[0m" && if [ -d "/www/server/panel/vhost/cert/$APP_DOMAIN" ] 2>/dev/null; then [ -f "/www/server/panel/vhost/cert/$APP_DOMAIN/fullchain.pem" ] && echo -e " \033[0;32m✓\033[0m SSL证书已配置"; else echo -e " \033[1;33m⚠\033[0m SSL证书未配置"; fi && echo -e "\n\033[0;34m[Nginx] WebSocket代理\033[0m" && if [ -f "/www/server/panel/vhost/nginx/$APP_DOMAIN.conf" ] 2>/dev/null; then grep -q "location /api/ws/" "/www/server/panel/vhost/nginx/$APP_DOMAIN.conf" && echo -e " \033[0;32m✓\033[0m WS代理已配置" || echo -e " \033[0;31m✗\033[0m WS代理未配置"; fi && echo -e "\n\033[0;34m========================================\033[0m" && echo -e "\033[0;32m检测完成\033[0m"