From 2db2fef91de4da4d4fb8413d2f0754f25af8accf Mon Sep 17 00:00:00 2001 From: xzx3344521 Date: Thu, 30 Oct 2025 12:49:22 +0800 Subject: [PATCH] Update ru --- ru | 239 ++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 167 insertions(+), 72 deletions(-) diff --git a/ru b/ru index 7fd709f..60369fb 100644 --- a/ru +++ b/ru @@ -1,52 +1,118 @@ #!/bin/bash -# RustDesk Server 一键部署脚本 +# RustDesk Server 一键部署脚本(包含Docker自动安装) set -e echo "========================================" echo " RustDesk Server 一键部署脚本" echo "========================================" -# 创建项目目录 -mkdir -p rustdesk-server -cd rustdesk-server +# 检查并安装 Docker +install_docker() { + echo "1. 检查并安装 Docker..." + + if command -v docker &> /dev/null; then + echo "✓ Docker 已安装" + else + echo "正在安装 Docker..." + curl -fsSL https://get.docker.com -o get-docker.sh + sh get-docker.sh + rm get-docker.sh + + # 启动 Docker 服务 + systemctl start docker + systemctl enable docker + + # 将当前用户加入 docker 组 + usermod -aG docker $USER || true + echo "✓ Docker 安装完成" + fi +} -# 生成固定密钥对 -echo "1. 生成密钥对..." -mkdir -p keys -openssl genpkey -algorithm ed25519 -out keys/id_ed25519 2>/dev/null || { - echo "生成密钥对失败,创建示例密钥..." - # 如果 openssl 不可用,创建示例密钥文件 - cat > keys/id_ed25519 << 'EOF' +# 检查并安装 Docker Compose +install_docker_compose() { + echo "2. 检查并安装 Docker Compose..." + + if command -v docker-compose &> /dev/null; then + echo "✓ Docker Compose 已安装" + else + echo "正在安装 Docker Compose..." + + # 下载 Docker Compose + COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + + # 设置执行权限 + chmod +x /usr/local/bin/docker-compose + + # 创建软链接(兼容旧版本) + ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose + + echo "✓ Docker Compose 安装完成" + fi +} + +# 安装必要的依赖 +install_dependencies() { + echo "安装必要依赖..." + + if command -v apt &> /dev/null; then + apt update + apt install -y curl wget openssl + elif command -v yum &> /dev/null; then + yum install -y curl wget openssl + elif command -v dnf &> /dev/null; then + dnf install -y curl wget openssl + else + echo "⚠ 无法自动安装依赖,请手动安装 curl, wget, openssl" + fi +} + +# 主部署函数 +deploy_rustdesk() { + # 创建项目目录 + mkdir -p rustdesk-server + cd rustdesk-server + + # 生成固定密钥对 + echo "3. 生成密钥对..." + mkdir -p keys + if command -v openssl &> /dev/null; then + openssl genpkey -algorithm ed25519 -out keys/id_ed25519 2>/dev/null + openssl pkey -in keys/id_ed25519 -pubout -out keys/id_ed25519.pub 2>/dev/null + else + echo "⚠ openssl 不可用,使用预生成密钥..." + # 创建示例密钥文件 + cat > keys/id_ed25519 << 'EOF' -----BEGIN PRIVATE KEY----- MC4CAQAwBQYDK2VwBCIEIAE8qD6H5JkG9T5s8s7XaYz1UvP6wQ3rN2tLbKj1mG -----END PRIVATE KEY----- EOF - cat > keys/id_ed25519.pub << 'EOF' + cat > keys/id_ed25519.pub << 'EOF' -----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEA2Q1Dp4q8q5V7s9kLx2mBwT3zN8rR6vY1zUj5tKfE= -----END PUBLIC KEY----- EOF -} + fi -# 编码密钥为base64 -KEY_PRIV=$(cat keys/id_ed25519 | base64 -w 0) -KEY_PUB=$(cat keys/id_ed25519.pub | base64 -w 0) + # 编码密钥为base64 + KEY_PRIV=$(cat keys/id_ed25519 | base64 -w 0 2>/dev/null || echo "MC4CAQAwBQYDK2VwBCIEIAE8qD6H5JkG9T5s8s7XaYz1UvP6wQ3rN2tLbKj1mG") + KEY_PUB=$(cat keys/id_ed25519.pub | base64 -w 0 2>/dev/null || echo "MCowBQYDK2VwAyEA2Q1Dp4q8q5V7s9kLx2mBwT3zN8rR6vY1zUj5tKfE=") -# 自动检测服务器IP -echo "2. 检测服务器IP地址..." -RELAY_SERVER=$(curl -s --connect-timeout 5 http://ipinfo.io/ip || curl -s --connect-timeout 5 http://ifconfig.me || hostname -I | awk '{print $1}') + # 自动检测服务器IP + echo "4. 检测服务器IP地址..." + RELAY_SERVER=$(curl -s --connect-timeout 5 http://ipinfo.io/ip || curl -s --connect-timeout 5 http://ifconfig.me || curl -s --connect-timeout 5 http://api.ipify.org || hostname -I | awk '{print $1}') -if [ -z "$RELAY_SERVER" ]; then - echo "错误: 无法自动获取服务器IP,请手动输入:" - read RELAY_SERVER -else - echo "检测到服务器IP: $RELAY_SERVER" -fi + if [ -z "$RELAY_SERVER" ]; then + echo "错误: 无法自动获取服务器IP,请手动输入:" + read RELAY_SERVER + else + echo "检测到服务器IP: $RELAY_SERVER" + fi -# 创建docker-compose.yml -echo "3. 创建Docker Compose配置..." -cat > docker-compose.yml << EOF + # 创建docker-compose.yml + echo "5. 创建Docker Compose配置..." + cat > docker-compose.yml << EOF version: '3' services: @@ -81,37 +147,53 @@ services: restart: unless-stopped EOF -# 创建环境变量文件 -cat > .env << EOF + # 创建环境变量文件 + cat > .env << EOF RELAY_SERVER=$RELAY_SERVER KEY_PUB=$KEY_PUB KEY_PRIV=$KEY_PRIV EOF -# 创建启动脚本 -cat > start.sh << 'EOF' + # 创建管理脚本 + create_management_scripts +} + +# 创建管理脚本 +create_management_scripts() { + # 创建启动脚本 + cat > start.sh << 'EOF' #!/bin/bash cd "$(dirname "$0")" docker-compose up -d echo "RustDesk服务器启动完成!" +echo "ID服务器: $(grep RELAY_SERVER .env | cut -d= -f2):21116" +echo "中继服务器: $(grep RELAY_SERVER .env | cut -d= -f2):21117" EOF -# 创建停止脚本 -cat > stop.sh << 'EOF' + # 创建停止脚本 + cat > stop.sh << 'EOF' #!/bin/bash cd "$(dirname "$0")" docker-compose down echo "RustDesk服务器已停止!" EOF -# 创建客户端配置说明 -cat > client-config.md << EOF + # 创建重启脚本 + cat > restart.sh << 'EOF' +#!/bin/bash +cd "$(dirname "$0")" +docker-compose restart +echo "RustDesk服务器已重启!" +EOF + + # 创建客户端配置说明 + cat > client-config.md << EOF # RustDesk 客户端配置 ## 服务器信息 - ID服务器: $RELAY_SERVER:21116 - 中继服务器: $RELAY_SERVER:21117 -- Key: +- 公钥: \`\`\` $(cat keys/id_ed25519.pub) \`\`\` @@ -134,44 +216,57 @@ $(cat keys/id_ed25519.pub) - 21119: 中继服务器端口 (备用) EOF -# 设置脚本权限 -chmod +x start.sh stop.sh - -# 检查Docker环境 -echo "4. 检查Docker环境..." -if ! command -v docker &> /dev/null; then - echo "错误: Docker未安装,请先安装Docker" - exit 1 -fi - -if ! command -v docker-compose &> /dev/null; then - echo "错误: Docker Compose未安装,请先安装Docker Compose" - exit 1 -fi - -# 拉取镜像 -echo "5. 拉取Docker镜像..." -docker pull lejianwen/rustdesk-server:latest + # 设置脚本权限 + chmod +x start.sh stop.sh restart.sh +} # 启动服务 -echo "6. 启动RustDesk服务..." -docker-compose up -d +start_services() { + echo "6. 拉取Docker镜像..." + docker pull lejianwen/rustdesk-server:latest + + echo "7. 启动RustDesk服务..." + docker-compose up -d + + # 等待服务启动 + sleep 5 +} # 显示部署结果 -echo "========================================" -echo " 部署完成!" -echo "========================================" -echo "服务状态:" -docker-compose ps +show_result() { + echo "========================================" + echo " 部署完成!" + echo "========================================" + + echo -e "\n服务状态:" + docker-compose ps + + echo -e "\n管理命令:" + echo "启动服务: ./start.sh" + echo "停止服务: ./stop.sh" + echo "重启服务: ./restart.sh" + echo "查看日志: docker-compose logs -f" + echo "查看状态: docker-compose ps" + + echo -e "\n重要信息:" + echo "ID服务器: $RELAY_SERVER:21116" + echo "中继服务器: $RELAY_SERVER:21117" + echo "密钥文件位置: ./keys/" + echo -e "\n客户端配置信息已保存到: client-config.md" + + echo -e "\n⚠ 注意: 可能需要重新登录终端才能使用 docker 命令" + echo "或者运行: newgrp docker" +} -echo -e "\n客户端配置信息已保存到: client-config.md" -echo -e "\n管理命令:" -echo "启动服务: ./start.sh" -echo "停止服务: ./stop.sh" -echo "查看日志: docker-compose logs -f" -echo "查看状态: docker-compose ps" +# 主执行流程 +main() { + install_dependencies + install_docker + install_docker_compose + deploy_rustdesk + start_services + show_result +} -echo -e "\n重要信息:" -echo "ID服务器: $RELAY_SERVER:21116" -echo "中继服务器: $RELAY_SERVER:21117" -echo "密钥文件位置: ./keys/" +# 执行主函数 +main