mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-01-13 01:02:46 +00:00
Update install-chinese.sh
This commit is contained in:
parent
971ded6e8e
commit
28fb08cc3d
1 changed files with 200 additions and 425 deletions
|
|
@ -1,463 +1,238 @@
|
|||
#!/bin/bash
|
||||
|
||||
# 3x-UI 中文全自动安装脚本
|
||||
# 预设:用户名=sinian,密码=sinian,端口=5321,路径=/a
|
||||
# 自动安装 socat,自动申请 SSL 证书
|
||||
# 3x-UI 一键静默安装脚本
|
||||
# 修改自原版 install.sh,自动设置 sinian/sinian,端口5321,路径/a
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
plain='\033[0m'
|
||||
|
||||
echo -e "${GREEN}================================================${NC}"
|
||||
echo -e "${GREEN} 3x-UI 中文全自动安装脚本${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 ""
|
||||
cur_dir=$(pwd)
|
||||
|
||||
# 检查 root 权限
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo -e "${RED}错误: 此脚本需要 root 权限运行${NC}"
|
||||
xui_folder="${XUI_MAIN_FOLDER:=/usr/local/x-ui}"
|
||||
xui_service="${XUI_SERVICE:=/etc/systemd/system}"
|
||||
|
||||
# 预设值
|
||||
PRESET_USERNAME="sinian"
|
||||
PRESET_PASSWORD="sinian"
|
||||
PRESET_PORT="5321"
|
||||
PRESET_WEB_PATH="a"
|
||||
|
||||
# check root
|
||||
[[ $EUID -ne 0 ]] && echo -e "${RED}Fatal error: ${plain} Please run this script with root privilege \n " && exit 1
|
||||
|
||||
# Check OS and set release variable
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
source /etc/os-release
|
||||
release=$ID
|
||||
elif [[ -f /usr/lib/os-release ]]; then
|
||||
source /usr/lib/os-release
|
||||
release=$ID
|
||||
else
|
||||
echo "Failed to check the system OS, please contact the author!" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "The OS release is: $release"
|
||||
|
||||
# 获取服务器 IP(自动检测)
|
||||
get_server_ip() {
|
||||
local ip=""
|
||||
# 尝试多个 IP 服务
|
||||
local services=(
|
||||
"https://api.ipify.org"
|
||||
"https://4.ident.me"
|
||||
"https://ifconfig.me"
|
||||
"https://icanhazip.com"
|
||||
"https://checkip.amazonaws.com"
|
||||
)
|
||||
|
||||
for service in "${services[@]}"; do
|
||||
ip=$(curl -s --max-time 3 "$service" 2>/dev/null)
|
||||
if [[ -n "$ip" && "$ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "$ip"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
# 如果 API 都失败,尝试本地获取
|
||||
ip=$(ip route get 1 | awk '{print $7}' | head -1)
|
||||
echo "$ip"
|
||||
arch() {
|
||||
case "$(uname -m)" in
|
||||
x86_64 | x64 | amd64) echo 'amd64' ;;
|
||||
i*86 | x86) echo '386' ;;
|
||||
armv8* | armv8 | arm64 | aarch64) echo 'arm64' ;;
|
||||
armv7* | armv7 | arm) echo 'armv7' ;;
|
||||
armv6* | armv6) echo 'armv6' ;;
|
||||
armv5* | armv5) echo 'armv5' ;;
|
||||
s390x) echo 's390x' ;;
|
||||
*) echo -e "${green}Unsupported CPU architecture! ${plain}" && rm -f install.sh && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 修复 Ubuntu 软件源(针对 Ubuntu 24.10)
|
||||
fix_ubuntu_sources() {
|
||||
if grep -q "Ubuntu 24.10" /etc/os-release 2>/dev/null; then
|
||||
echo -e "${YELLOW}检测到 Ubuntu 24.10,修复软件源...${NC}"
|
||||
echo "Arch: $(arch)"
|
||||
|
||||
# 备份原文件
|
||||
cp /etc/apt/sources.list /etc/apt/sources.list.backup.3xui
|
||||
|
||||
# 使用稳定的 Ubuntu 22.04 源
|
||||
cat > /etc/apt/sources.list << 'EOF'
|
||||
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
|
||||
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
|
||||
echo -e "${YELLOW}软件源修复失败,继续安装...${NC}"
|
||||
# 恢复备份
|
||||
mv /etc/apt/sources.list.backup.3xui /etc/apt/sources.list
|
||||
fi
|
||||
fi
|
||||
# 自动确认函数
|
||||
auto_confirm() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# 自动安装 socat(支持多系统)
|
||||
install_socat_auto() {
|
||||
echo -e "${BLUE}检测并安装 socat...${NC}"
|
||||
|
||||
# 检查是否已安装
|
||||
if command -v socat &>/dev/null; then
|
||||
echo -e "${GREEN}socat 已安装${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 检测系统类型并安装
|
||||
if command -v apt-get &>/dev/null; then
|
||||
echo -e "${YELLOW}检测到 Debian/Ubuntu 系统,使用 apt 安装${NC}"
|
||||
apt-get update >/dev/null 2>&1
|
||||
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
|
||||
|
||||
# 自动读取函数
|
||||
auto_read() {
|
||||
if [[ "$*" == *"port"* ]] || [[ "$*" == *"端口"* ]]; then
|
||||
echo "$PRESET_PORT"
|
||||
elif [[ "$*" == *"username"* ]] || [[ "$*" == *"用户名"* ]]; then
|
||||
echo "$PRESET_USERNAME"
|
||||
elif [[ "$*" == *"password"* ]] || [[ "$*" == *"密码"* ]]; then
|
||||
echo "$PRESET_PASSWORD"
|
||||
elif [[ "$*" == *"path"* ]] || [[ "$*" == *"路径"* ]]; then
|
||||
echo "$PRESET_WEB_PATH"
|
||||
elif [[ "$*" == *"[y/n]"* ]]; then
|
||||
echo "y"
|
||||
elif [[ "$*" == *"Choose"* ]] || [[ "$*" == *"选择"* ]]; then
|
||||
echo "2"
|
||||
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
|
||||
echo ""
|
||||
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
|
||||
# 替换原版函数
|
||||
confirm() {
|
||||
auto_confirm
|
||||
return $?
|
||||
}
|
||||
|
||||
# 尝试安装
|
||||
for i in {1..3}; do
|
||||
echo "安装尝试 $i/3..."
|
||||
if install_xui; then
|
||||
echo "安装成功"
|
||||
exit 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
# 静默安装基函数
|
||||
install_base() {
|
||||
case "${release}" in
|
||||
ubuntu | debian | armbian)
|
||||
apt-get update && apt-get install -y -q curl tar tzdata socat
|
||||
;;
|
||||
fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
|
||||
dnf -y update && dnf install -y -q curl tar tzdata socat
|
||||
;;
|
||||
centos)
|
||||
if [[ "${VERSION_ID}" =~ ^7 ]]; then
|
||||
yum -y update && yum install -y curl tar tzdata socat
|
||||
else
|
||||
dnf -y update && dnf install -y -q curl tar tzdata socat
|
||||
fi
|
||||
;;
|
||||
arch | manjaro | parch)
|
||||
pacman -Syu && pacman -Syu --noconfirm curl tar tzdata socat
|
||||
;;
|
||||
opensuse-tumbleweed | opensuse-leap)
|
||||
zypper refresh && zypper -q install -y curl tar timezone socat
|
||||
;;
|
||||
alpine)
|
||||
apk update && apk add curl tar tzdata socat
|
||||
;;
|
||||
*)
|
||||
apt-get update && apt-get install -y -q curl tar tzdata socat
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
echo "安装失败,请检查日志:/tmp/xui-install.log"
|
||||
exit 1
|
||||
EOF
|
||||
# 静默配置函数
|
||||
config_after_install() {
|
||||
echo -e "${GREEN}正在使用预设配置...${plain}"
|
||||
echo -e "${GREEN}用户名: $PRESET_USERNAME${plain}"
|
||||
echo -e "${GREEN}密码: $PRESET_PASSWORD${plain}"
|
||||
echo -e "${GREEN}端口: $PRESET_PORT${plain}"
|
||||
echo -e "${GREEN}访问路径: /$PRESET_WEB_PATH/${plain}"
|
||||
|
||||
chmod +x /tmp/install-3xui.sh
|
||||
/tmp/install-3xui.sh
|
||||
# 直接设置配置
|
||||
${xui_folder}/x-ui setting -username "$PRESET_USERNAME" -password "$PRESET_PASSWORD" -port "$PRESET_PORT" -webBasePath "$PRESET_WEB_PATH"
|
||||
|
||||
# 自动配置 SSL
|
||||
echo -e "${GREEN}正在自动配置 SSL 证书...${plain}"
|
||||
local server_ip=$(curl -s --max-time 3 https://api.ipify.org || echo "127.0.0.1")
|
||||
|
||||
# 停止服务释放端口80
|
||||
systemctl stop x-ui 2>/dev/null
|
||||
|
||||
# 配置 SSL
|
||||
~/.acme.sh/acme.sh --issue -d ${server_ip} --standalone --httpport 80 --force 2>/dev/null
|
||||
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
|
||||
--reloadcmd "systemctl restart x-ui"
|
||||
|
||||
# 设置证书路径
|
||||
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
|
||||
${xui_folder}/x-ui cert -webCert /root/cert/ip/fullchain.pem -webCertKey /root/cert/ip/privkey.pem
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}SSL 证书配置完成${NC}"
|
||||
# 启动服务
|
||||
systemctl start x-ui 2>/dev/null
|
||||
|
||||
# 启动面板
|
||||
systemctl start x-ui >/dev/null 2>&1
|
||||
sleep 2
|
||||
return 0
|
||||
fi
|
||||
echo -e "${GREEN}配置完成!${plain}"
|
||||
}
|
||||
|
||||
# 主安装函数
|
||||
install_x-ui() {
|
||||
cd ${xui_folder%/x-ui}/
|
||||
|
||||
# 下载最新版本
|
||||
tag_version=$(curl -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
||||
if [[ ! -n "$tag_version" ]]; then
|
||||
tag_version=$(curl -4 -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
||||
fi
|
||||
|
||||
echo -e "Got x-ui latest version: ${tag_version}, beginning the installation..."
|
||||
curl -4fLRo ${xui_folder}-linux-$(arch).tar.gz https://github.com/MHSanaei/3x-ui/releases/download/${tag_version}/x-ui-linux-$(arch).tar.gz
|
||||
|
||||
curl -4fLRo /usr/bin/x-ui-temp https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.sh
|
||||
|
||||
# 停止旧服务
|
||||
if [[ -e ${xui_folder}/ ]]; then
|
||||
systemctl stop x-ui 2>/dev/null
|
||||
rm ${xui_folder}/ -rf
|
||||
fi
|
||||
|
||||
# 解压
|
||||
tar zxvf x-ui-linux-$(arch).tar.gz
|
||||
rm x-ui-linux-$(arch).tar.gz -f
|
||||
|
||||
cd x-ui
|
||||
chmod +x x-ui bin/xray-linux-$(arch)
|
||||
|
||||
# 移动文件
|
||||
mv -f /usr/bin/x-ui-temp /usr/bin/x-ui
|
||||
chmod +x /usr/bin/x-ui
|
||||
|
||||
# 配置
|
||||
config_after_install
|
||||
|
||||
# 安装服务
|
||||
if [[ $release == "alpine" ]]; then
|
||||
curl -4fLRo /etc/init.d/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.rc
|
||||
chmod +x /etc/init.d/x-ui
|
||||
rc-update add x-ui
|
||||
rc-service x-ui start
|
||||
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}"
|
||||
case "${release}" in
|
||||
ubuntu | debian | armbian)
|
||||
curl -4fLRo ${xui_service}/x-ui.service https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.service.debian
|
||||
;;
|
||||
*)
|
||||
curl -4fLRo ${xui_service}/x-ui.service https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.service.rhel
|
||||
;;
|
||||
esac
|
||||
|
||||
# 启动面板(即使 SSL 失败)
|
||||
systemctl start x-ui >/dev/null 2>&1
|
||||
return 1
|
||||
systemctl daemon-reload
|
||||
systemctl enable x-ui
|
||||
systemctl start x-ui
|
||||
fi
|
||||
|
||||
# 安装中文脚本
|
||||
curl -sL https://raw.githubusercontent.com/sinian-liu/3x-ui/main/x-ui.sh -o /usr/local/x-ui/x-ui.sh
|
||||
chmod +x /usr/local/x-ui/x-ui.sh
|
||||
ln -sf /usr/local/x-ui/x-ui.sh /usr/bin/x-ui
|
||||
|
||||
# 设置中文
|
||||
sed -i 's/"language": "en"/"language": "zh-CN"/g' /usr/local/x-ui/config.json 2>/dev/null
|
||||
|
||||
echo -e "${GREEN}x-ui ${tag_version}${plain} installation finished!"
|
||||
|
||||
# 显示访问信息
|
||||
local server_ip=$(curl -s --max-time 3 https://api.ipify.org || hostname -I | awk '{print $1}')
|
||||
echo ""
|
||||
echo -e "${GREEN}========================================${plain}"
|
||||
echo -e "${GREEN} 安装完成!${plain}"
|
||||
echo -e "${GREEN}========================================${plain}"
|
||||
echo -e "用户名: ${PRESET_USERNAME}"
|
||||
echo -e "密码: ${PRESET_PASSWORD}"
|
||||
echo -e "访问地址: https://${server_ip}:${PRESET_PORT}/${PRESET_WEB_PATH}/"
|
||||
echo -e "${GREEN}========================================${plain}"
|
||||
}
|
||||
|
||||
# 安装中文管理脚本
|
||||
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
|
||||
# 安装 acme.sh
|
||||
install_acme() {
|
||||
curl -s https://get.acme.sh | sh
|
||||
~/.acme.sh/acme.sh --upgrade --auto-upgrade
|
||||
}
|
||||
|
||||
# 显示安装结果
|
||||
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. 需要开放端口 80(SSL 证书申请)"
|
||||
echo -e "3. 需要开放端口 5321(面板访问)"
|
||||
}
|
||||
|
||||
# 检查是否显示使用说明
|
||||
if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
|
||||
show_usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 执行安装
|
||||
main
|
||||
echo -e "${GREEN}开始静默安装...${plain}"
|
||||
install_base
|
||||
install_acme
|
||||
install_x-ui
|
||||
|
|
|
|||
Loading…
Reference in a new issue