Update install-chinese.sh

This commit is contained in:
sinian-liu 2026-01-08 01:19:52 +08:00 committed by GitHub
parent f365461311
commit 971ded6e8e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# 3x-ui 中文版安装脚本 # 3x-UI 中文全自动安装脚本
# 作者: 你的用户名 # 预设:用户名=sinian密码=sinian端口=5321路径=/a
# 自动安装 socat自动申请 SSL 证书
# 颜色定义 # 颜色定义
RED='\033[0;31m' RED='\033[0;31m'
@ -11,8 +12,14 @@ BLUE='\033[0;34m'
NC='\033[0m' # No Color NC='\033[0m' # No Color
echo -e "${GREEN}================================================${NC}" echo -e "${GREEN}================================================${NC}"
echo -e "${GREEN} 3x-UI 中文安装脚本${NC}" echo -e "${GREEN} 3x-UI 中文全自动安装脚本${NC}"
echo -e "${GREEN}================================================${NC}" echo -e "${GREEN}================================================${NC}"
echo -e "${BLUE}预设配置:${NC}"
echo -e "用户名:${GREEN}sinian${NC}"
echo -e "密 码:${GREEN}sinian${NC}"
echo -e "端 口:${GREEN}5321${NC}"
echo -e "访问路径:${GREEN}/a${NC}"
echo -e "${BLUE}将自动安装 SSL 证书${NC}"
echo "" echo ""
# 检查 root 权限 # 检查 root 权限
@ -21,96 +28,436 @@ if [[ $EUID -ne 0 ]]; then
exit 1 exit 1
fi fi
# 1. 安装原版 3x-ui # 获取服务器 IP自动检测
echo -e "${BLUE}步骤 1/3: 安装原版 3x-ui...${NC}" get_server_ip() {
bash <(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/main/install.sh) local ip=""
# 尝试多个 IP 服务
local services=(
"https://api.ipify.org"
"https://4.ident.me"
"https://ifconfig.me"
"https://icanhazip.com"
"https://checkip.amazonaws.com"
)
if [ $? -ne 0 ]; then for service in "${services[@]}"; do
echo -e "${RED}原版安装失败,请检查网络连接${NC}" ip=$(curl -s --max-time 3 "$service" 2>/dev/null)
exit 1 if [[ -n "$ip" && "$ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
fi echo "$ip"
return 0
echo -e "${GREEN}原版安装成功${NC}"
# 2. 下载中文管理脚本
echo -e "${BLUE}步骤 2/3: 下载中文管理脚本...${NC}"
# 创建备份
if [ -f "/usr/local/x-ui/x-ui.sh" ]; then
cp /usr/local/x-ui/x-ui.sh /usr/local/x-ui/x-ui.sh.backup
echo "已备份原版脚本"
fi
# 下载中文脚本
wget -q -O /usr/local/x-ui/x-ui.sh https://raw.githubusercontent.com/sinian-liu/Original-3x-ui/main/x-ui.sh
if [ $? -ne 0 ]; then
echo -e "${YELLOW}下载中文脚本失败,使用原版英文脚本${NC}"
if [ -f "/usr/local/x-ui/x-ui.sh.backup" ]; then
cp /usr/local/x-ui/x-ui.sh.backup /usr/local/x-ui/x-ui.sh
fi fi
else done
echo -e "${GREEN}中文脚本下载成功${NC}"
chmod +x /usr/local/x-ui/x-ui.sh
# 替换系统命令 # 如果 API 都失败,尝试本地获取
ln -sf /usr/local/x-ui/x-ui.sh /usr/bin/x-ui ip=$(ip route get 1 | awk '{print $7}' | head -1)
chmod +x /usr/bin/x-ui echo "$ip"
fi }
# 3. 设置默认中文 # 修复 Ubuntu 软件源(针对 Ubuntu 24.10
echo -e "${BLUE}步骤 3/3: 设置中文环境...${NC}" fix_ubuntu_sources() {
if grep -q "Ubuntu 24.10" /etc/os-release 2>/dev/null; then
echo -e "${YELLOW}检测到 Ubuntu 24.10,修复软件源...${NC}"
if [ -f "/usr/local/x-ui/config.json" ]; then # 备份原文件
# 备份原配置 cp /etc/apt/sources.list /etc/apt/sources.list.backup.3xui
cp /usr/local/x-ui/config.json /usr/local/x-ui/config.json.backup
# 设置中文语言 # 使用稳定的 Ubuntu 22.04 源
if grep -q '"language":' /usr/local/x-ui/config.json; then cat > /etc/apt/sources.list << 'EOF'
sed -i 's/"language": "en"/"language": "zh-CN"/g' /usr/local/x-ui/config.json deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
echo "已修改语言设置为中文" deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
EOF
# 更新源
apt-get update >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "${GREEN}软件源修复成功${NC}"
else else
# 如果没有 language 字段,添加它 echo -e "${YELLOW}软件源修复失败,继续安装...${NC}"
sed -i 's/"panelSettings": {/"panelSettings": {\n "language": "zh-CN",/g' /usr/local/x-ui/config.json # 恢复备份
echo "已添加语言设置为中文" mv /etc/apt/sources.list.backup.3xui /etc/apt/sources.list
fi
fi
}
# 自动安装 socat支持多系统
install_socat_auto() {
echo -e "${BLUE}检测并安装 socat...${NC}"
# 检查是否已安装
if command -v socat &>/dev/null; then
echo -e "${GREEN}socat 已安装${NC}"
return 0
fi fi
# 重启服务 # 检测系统类型并安装
systemctl restart x-ui 2>/dev/null || rc-service x-ui restart 2>/dev/null if command -v apt-get &>/dev/null; then
echo "服务已重启" echo -e "${YELLOW}检测到 Debian/Ubuntu 系统,使用 apt 安装${NC}"
else apt-get update >/dev/null 2>&1
echo -e "${YELLOW}配置文件不存在,跳过语言设置${NC}" apt-get install -y socat curl >/dev/null 2>&1
elif command -v yum &>/dev/null; then
echo -e "${YELLOW}检测到 CentOS/RHEL 系统,使用 yum 安装${NC}"
yum install -y socat curl >/dev/null 2>&1
elif command -v dnf &>/dev/null; then
echo -e "${YELLOW}检测到 Fedora 系统,使用 dnf 安装${NC}"
dnf install -y socat curl >/dev/null 2>&1
elif command -v apk &>/dev/null; then
echo -e "${YELLOW}检测到 Alpine 系统,使用 apk 安装${NC}"
apk add socat curl >/dev/null 2>&1
elif command -v pacman &>/dev/null; then
echo -e "${YELLOW}检测到 Arch 系统,使用 pacman 安装${NC}"
pacman -Sy --noconfirm socat curl >/dev/null 2>&1
elif command -v zypper &>/dev/null; then
echo -e "${YELLOW}检测到 openSUSE 系统,使用 zypper 安装${NC}"
zypper install -y socat curl >/dev/null 2>&1
else
echo -e "${RED}无法检测包管理器,请手动安装 socat${NC}"
echo -e "${YELLOW}安装命令参考:${NC}"
echo -e "Debian/Ubuntu: apt install socat curl"
echo -e "CentOS/RHEL: yum install socat curl"
echo -e "Alpine: apk add socat curl"
return 1
fi
# 验证安装
if command -v socat &>/dev/null; then
echo -e "${GREEN}socat 安装成功${NC}"
return 0
else
echo -e "${RED}socat 安装失败${NC}"
return 1
fi
}
# 修改原版 install.sh 的安装过程(静默安装)
install_xui_silent() {
echo -e "${BLUE}开始安装 3x-UI...${NC}"
# 创建临时安装脚本
cat > /tmp/install-3xui.sh << 'EOF'
#!/bin/bash
# 静默安装函数
install_xui() {
# 下载并安装
bash <(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/main/install.sh) >/tmp/xui-install.log 2>&1
# 等待安装完成
sleep 5
# 设置固定配置
if [ -f "/usr/local/x-ui/x-ui" ]; then
/usr/local/x-ui/x-ui setting -username "sinian" -password "sinian" -port 5321 -webBasePath "a"
return 0
else
return 1
fi
}
# 尝试安装
for i in {1..3}; do
echo "安装尝试 $i/3..."
if install_xui; then
echo "安装成功"
exit 0
fi
sleep 2
done
echo "安装失败,请检查日志:/tmp/xui-install.log"
exit 1
EOF
chmod +x /tmp/install-3xui.sh
/tmp/install-3xui.sh
if [ $? -eq 0 ]; then
echo -e "${GREEN}3x-UI 安装成功${NC}"
return 0
else
echo -e "${RED}3x-UI 安装失败${NC}"
return 1
fi
}
# 自动申请 SSL 证书
auto_setup_ssl() {
echo -e "${BLUE}自动申请 SSL 证书...${NC}"
local server_ip=$(get_server_ip)
if [[ -z "$server_ip" ]] || ! [[ "$server_ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo -e "${RED}无法获取有效的服务器 IP跳过 SSL 配置${NC}"
return 1
fi
echo -e "${GREEN}服务器 IP: ${server_ip}${NC}"
# 停止面板释放端口 80
systemctl stop x-ui >/dev/null 2>&1
sleep 2
# 检查端口 80 是否被占用
if ss -tulpn | grep -q ":80 "; then
echo -e "${YELLOW}端口 80 被占用,尝试释放...${NC}"
# 杀死占用端口 80 的进程(除了必要服务)
lsof -ti:80 | xargs kill -9 >/dev/null 2>&1
sleep 2
fi
# 检查是否已安装 acme.sh
if ! command -v ~/.acme.sh/acme.sh &>/dev/null; then
echo -e "${YELLOW}安装 acme.sh...${NC}"
curl -s https://get.acme.sh | sh >/dev/null 2>&1
~/.acme.sh/acme.sh --upgrade --auto-upgrade >/dev/null 2>&1
fi
# 创建证书目录
mkdir -p /root/cert/ip
echo -e "${YELLOW}正在为 IP ${server_ip} 申请 SSL 证书...${NC}"
echo -e "${YELLOW}这可能需要几分钟,请稍候...${NC}"
# 申请证书
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt >/dev/null 2>&1
~/.acme.sh/acme.sh --issue \
-d ${server_ip} \
--standalone \
--server letsencrypt \
--certificate-profile shortlived \
--days 6 \
--httpport 80 \
--force >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "${GREEN}SSL 证书申请成功${NC}"
# 安装证书
~/.acme.sh/acme.sh --installcert -d ${server_ip} \
--key-file /root/cert/ip/privkey.pem \
--fullchain-file /root/cert/ip/fullchain.pem \
--reloadcmd "systemctl restart x-ui" >/dev/null 2>&1
# 设置证书路径
if [ -f "/usr/local/x-ui/x-ui" ]; then
/usr/local/x-ui/x-ui cert \
-webCert /root/cert/ip/fullchain.pem \
-webCertKey /root/cert/ip/privkey.pem >/dev/null 2>&1
echo -e "${GREEN}SSL 证书配置完成${NC}"
# 启动面板
systemctl start x-ui >/dev/null 2>&1
sleep 2
return 0
fi
else
echo -e "${RED}SSL 证书申请失败${NC}"
echo -e "${YELLOW}可能原因:${NC}"
echo -e "1. 端口 80 未开放"
echo -e "2. 服务器 IP 无法从外部访问"
echo -e "3. 网络问题"
echo -e "${YELLOW}安装后可使用命令手动配置x-ui 18 6${NC}"
# 启动面板(即使 SSL 失败)
systemctl start x-ui >/dev/null 2>&1
return 1
fi
}
# 安装中文管理脚本
install_chinese_script() {
echo -e "${BLUE}安装中文管理脚本...${NC}"
# 下载中文脚本
local script_url="https://raw.githubusercontent.com/sinian-liu/3x-ui/main/x-ui.sh"
if curl -s --head "$script_url" | head -n 1 | grep -q "200"; then
# 备份原脚本
if [ -f "/usr/local/x-ui/x-ui.sh" ]; then
cp /usr/local/x-ui/x-ui.sh /usr/local/x-ui/x-ui.sh.backup
fi
# 下载中文脚本
curl -sL "$script_url" -o /usr/local/x-ui/x-ui.sh
if [ $? -eq 0 ]; then
chmod +x /usr/local/x-ui/x-ui.sh
ln -sf /usr/local/x-ui/x-ui.sh /usr/bin/x-ui
# 设置默认中文
if [ -f "/usr/local/x-ui/config.json" ]; then
sed -i 's/"language": "en"/"language": "zh-CN"/g' /usr/local/x-ui/config.json 2>/dev/null
fi
echo -e "${GREEN}中文脚本安装成功${NC}"
return 0
fi
fi
echo -e "${YELLOW}中文脚本下载失败,使用原版脚本${NC}"
return 1
}
# 显示安装结果
show_installation_result() {
echo ""
echo -e "${GREEN}================================================${NC}"
echo -e "${GREEN} 3x-UI 安装完成!${NC}"
echo -e "${GREEN}================================================${NC}"
local server_ip=$(get_server_ip)
local panel_info=""
# 尝试获取面板信息
if [ -f "/usr/local/x-ui/x-ui" ]; then
panel_info=$(/usr/local/x-ui/x-ui setting -show true 2>/dev/null)
fi
# 提取端口和路径
local port="5321"
local path="a"
if echo "$panel_info" | grep -q "port:"; then
port=$(echo "$panel_info" | grep "port:" | awk '{print $2}' | tr -d ',')
fi
if echo "$panel_info" | grep -q "webBasePath:"; then
path=$(echo "$panel_info" | grep "webBasePath:" | awk '{print $2}' | tr -d '",')
fi
# 检查 SSL 证书
local ssl_status="未配置"
local protocol="http"
if [ -f "/root/cert/ip/fullchain.pem" ] && [ -f "/root/cert/ip/privkey.pem" ]; then
ssl_status="已配置"
protocol="https"
fi
echo -e "${YELLOW}📋 安装摘要:${NC}"
echo ""
echo -e "${BLUE}登录信息:${NC}"
echo -e "用户名:${GREEN}sinian${NC}"
echo -e "密 码:${GREEN}sinian${NC}"
echo ""
echo -e "${BLUE}访问地址:${NC}"
if [[ -n "$server_ip" ]]; then
echo -e "${GREEN}${protocol}://${server_ip}:${port}/${path}/${NC}"
# 显示二维码(如果支持)
if command -v qrencode &>/dev/null; then
echo ""
echo -e "${BLUE}访问二维码:${NC}"
qrencode -t ANSI "${protocol}://${server_ip}:${port}/${path}/"
elif command -v curl &>/dev/null; then
echo ""
echo -e "${BLUE}生成访问链接:${NC}"
echo "复制上方链接到浏览器访问"
fi
else
echo -e "${GREEN}${protocol}://你的服务器IP:${port}/${path}/${NC}"
fi
echo ""
echo -e "${BLUE}SSL 证书:${NC}${ssl_status}"
if [ "$ssl_status" = "已配置" ]; then
echo -e "有效期约6天自动续期"
fi
echo ""
echo -e "${BLUE}管理命令:${NC}"
echo -e "${GREEN}x-ui${NC} # 打开中文管理菜单"
echo -e "${GREEN}x-ui status${NC} # 查看状态"
echo -e "${GREEN}x-ui restart${NC} # 重启面板"
echo -e "${GREEN}x-ui 10${NC} # 查看当前设置"
echo -e "${GREEN}x-ui 18 6${NC} # 重新配置 SSL 证书"
echo ""
if [ "$ssl_status" = "未配置" ]; then
echo -e "${YELLOW}⚠️ SSL 证书未配置${NC}"
echo -e "运行命令配置:${GREEN}x-ui 18 6${NC}"
echo -e "需要确保端口 80 开放"
fi
echo -e "${BLUE}安全提示:${NC}"
echo -e "1. 首次登录后立即修改密码"
echo -e "2. 建议设置防火墙规则"
echo -e "3. 定期备份配置"
echo ""
echo -e "${GREEN}================================================${NC}"
}
# 主安装流程
main() {
echo -e "${BLUE}[1/5] 准备安装环境...${NC}"
fix_ubuntu_sources
echo -e "${BLUE}[2/5] 安装必要组件...${NC}"
install_socat_auto
echo -e "${BLUE}[3/5] 安装 3x-UI 面板...${NC}"
if ! install_xui_silent; then
echo -e "${RED}面板安装失败,退出安装${NC}"
exit 1
fi
echo -e "${BLUE}[4/5] 配置 SSL 证书...${NC}"
auto_setup_ssl
echo -e "${BLUE}[5/5] 安装中文管理脚本...${NC}"
install_chinese_script
# 等待服务启动
sleep 3
# 显示安装结果
show_installation_result
# 清理临时文件
rm -f /tmp/install-3xui.sh /tmp/xui-install.log 2>/dev/null
}
# 显示使用说明
show_usage() {
echo -e "${GREEN}使用说明:${NC}"
echo ""
echo -e "一键安装命令:"
echo -e "${GREEN}bash <(curl -Ls https://raw.githubusercontent.com/sinian-liu/Original-3x-ui/main/install-chinese.sh)${NC}"
echo ""
echo -e "${BLUE}功能特点:${NC}"
echo -e "✅ 全自动安装,无需人工干预"
echo -e "✅ 预设用户名密码sinian/sinian"
echo -e "✅ 固定端口5321访问路径/a"
echo -e "✅ 自动安装 socat支持多系统"
echo -e "✅ 自动申请 SSL 证书"
echo -e "✅ 自动获取服务器 IP 并显示访问链接"
echo -e "✅ 中文管理界面"
echo ""
echo -e "${YELLOW}系统支持:${NC}"
echo -e "Ubuntu/Debian/CentOS/RHEL/Fedora/Alpine/Arch/openSUSE"
echo ""
echo -e "${RED}注意:${NC}"
echo -e "1. 需要 root 权限运行"
echo -e "2. 需要开放端口 80SSL 证书申请)"
echo -e "3. 需要开放端口 5321面板访问"
}
# 检查是否显示使用说明
if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
show_usage
exit 0
fi fi
# 显示完成信息 # 执行安装
echo "" main
echo -e "${GREEN}================================================${NC}"
echo -e "${GREEN} 3x-UI 中文版安装完成!${NC}"
echo -e "${GREEN}================================================${NC}"
echo ""
echo -e "${YELLOW}📢 重要信息:${NC}"
echo ""
echo -e "面板访问地址:${GREEN}http://你的服务器IP:54321${NC}"
echo -e "默认用户名:${GREEN}admin${NC}"
echo -e "默认密码:${GREEN}admin${NC}"
echo ""
echo -e "${YELLOW}🚀 使用方法:${NC}"
echo ""
echo -e "输入 ${GREEN}x-ui${NC} 打开中文管理菜单"
echo ""
echo -e "${YELLOW}🔧 常用命令:${NC}"
echo ""
echo -e "${GREEN}x-ui${NC} # 打开管理菜单"
echo -e "${GREEN}x-ui start${NC} # 启动面板"
echo -e "${GREEN}x-ui stop${NC} # 停止面板"
echo -e "${GREEN}x-ui restart${NC} # 重启面板"
echo -e "${GREEN}x-ui status${NC} # 查看状态"
echo -e "${GREEN}x-ui log${NC} # 查看日志"
echo -e "${GREEN}x-ui update${NC} # 更新面板"
echo ""
echo -e "${YELLOW}⚠️ 安全提示:${NC}"
echo -e "1. 请立即登录面板修改默认密码"
echo -e "2. 建议设置 SSL 证书(使用菜单选项 18"
echo -e "3. 定期备份配置文件"
echo ""
echo -e "${GREEN}================================================${NC}"