diff --git a/ru b/ru index 4369aaf..95993bb 100644 --- a/ru +++ b/ru @@ -1,182 +1,142 @@ +#!/bin/bash +# RustDesk Server 一键部署脚本 set -e -echo "🚀 RustDesk 服务器一键部署脚本 (优化版)" -echo "🚀 RustDesk 服务器一键部署脚本 (官方镜像版)" +echo "========================================" +echo " RustDesk Server 一键部署脚本" echo "========================================" -# 检查 Docker -@@ -79,61 +79,75 @@ echo "✅ 服务器 IP: $PUBLIC_IP" -# 生成管理员密码 -ADMIN_PASSWORD=$(openssl rand -base64 12 2>/dev/null || date +%s | sha256sum | base64 | head -c 12) +# 获取服务器公网 IP +SERVER_IP=$(curl -s http://checkip.amazonaws.com || curl -s http://ipinfo.io/ip || echo "127.0.0.1") +echo "检测到服务器 IP: $SERVER_IP" -# 创建环境配置 -cat > .env << EOF -PUBLIC_IP=$PUBLIC_IP -UNIFIED_KEY=$UNIFIED_KEY_FINGERPRINT -ADMIN_PASSWORD=$ADMIN_PASSWORD -TIMEZONE=Asia/Shanghai -ENCRYPTED_ONLY=1 -MUST_LOGIN=y -EOF +# 生成固定密钥(如果未提供) +FIXED_KEY="r0cDMF1eJa9zNqnUPB8ylbEJJWZqj6OdJnOrNhmWSLU=" +echo "使用固定密钥: $FIXED_KEY" -# 创建 Docker Compose 配置(修复版本警告) -cat > docker-compose.yml << 'EOF' -# 创建 Docker Compose 配置(使用官方镜像) +# 生成随机密码(用于管理) +ADMIN_PASSWORD=$(openssl rand -base64 16 2>/dev/null || date +%s | sha256sum | base64 | head -c 16) +echo "生成的管理密码: $ADMIN_PASSWORD" + +# 创建必要的目录 +echo "创建数据目录..." +sudo mkdir -p /data/rustdesk/server +sudo mkdir -p /data/rustdesk/api + +# 生成 Docker Compose 文件 cat > docker-compose.yml << EOF +version: '3' + +networks: + rustdesk-net: + external: false + services: - rustdesk-server: - container_name: rustdesk-server + rustdesk: + ports: + - 21114:21114 + - 21115:21115 + - 21116:21116 + - 21116:21116/udp + - 21117:21117 + - 21118:21118 + - 21119:21119 image: lejianwen/rustdesk-server-s6:latest - hbbs: - container_name: rustdesk-hbbs - image: rustdesk/rustdesk-server:latest - command: hbbs -r ${PUBLIC_IP}:21117 - ports: - - "21114:21114" # API 管理界面 - - "21115:21115" # 网页客户端 - - "21116:21116" # ID 服务器 (TCP) - - "21116:21116/udp" - - "21117:21117" # 中继服务器 - - "21118:21118" # WebSocket - volumes: - - ./data/keys:/root - - ./data/db:/root environment: - - RELAY_SERVER=${PUBLIC_IP} - - FIXED_KEY=${UNIFIED_KEY_FINGERPRINT} - - MUST_LOGIN=y + - RELAY=${SERVER_IP}:21117 - ENCRYPTED_ONLY=1 - restart: unless-stopped - - hbbr: - container_name: rustdesk-hbbr - image: rustdesk/rustdesk-server:latest - command: hbbr - ports: - - "21117:21117" # 中继服务器 - - "21119:21119" # 备用端口 - volumes: - - ./data/keys:/root - - ./data/db:/root - environment: - - RELAY_SERVER=${PUBLIC_IP} - - FIXED_KEY=${UNIFIED_KEY_FINGERPRINT} - MUST_LOGIN=y - - ENCRYPTED_ONLY=1 + - TZ=Asia/Shanghai + # RustDesk API 配置 + - RUSTDESK_API_RUSTDESK_ID_SERVER=${SERVER_IP}:21116 + - RUSTDESK_API_RUSTDESK_RELAY_SERVER=${SERVER_IP}:21117 + - RUSTDESK_API_RUSTDESK_API_SERVER=http://${SERVER_IP}:21114 + - RUSTDESK_API_RUSTDESK_KEY=${FIXED_KEY} + - RUSTDESK_API_JWT_KEY=${FIXED_KEY} + # 其他重要配置 + - RUSTDESK_API_APP_REGISTER=false + - RUSTDESK_API_APP_DISABLE_PWD_LOGIN=false + - RUSTDESK_API_APP_CAPTCHA_THRESHOLD=3 + - RUSTDESK_API_APP_BAN_THRESHOLD=5 + - RUSTDESK_API_GORM_TYPE=sqlite + - RUSTDESK_API_LANG=zh-CN + - RUSTDESK_API_APP_WEB_CLIENT=1 + - RUSTDESK_API_APP_SHOW_SWAGGER=0 + volumes: + - /data/rustdesk/server:/data + - /data/rustdesk/api:/app/data + networks: + - rustdesk-net restart: unless-stopped - - api: - container_name: rustdesk-api - image: rustdesk/rustdesk-server:latest - command: ./apimain - ports: - - "21114:21114" # API 管理界面 - volumes: - - ./data/keys:/root - - ./data/db:/root - environment: - - RELAY=${PUBLIC_IP} - - PUBLIC_IP=${PUBLIC_IP} - - ENCRYPTED_ONLY=${ENCRYPTED_ONLY} - - MUST_LOGIN=${MUST_LOGIN} - - FIXED_KEY=${UNIFIED_KEY} - - RUSTDESK_API_RUSTDESK_ID_SERVER=${PUBLIC_IP}:21116 - - RUSTDESK_API_RUSTDESK_RELAY_SERVER=${PUBLIC_IP}:21117 - - RUSTDESK_API_RUSTDESK_API_SERVER=http://${PUBLIC_IP}:21114 - - RUSTDESK_API_RUSTDESK_KEY=${UNIFIED_KEY} - - RUSTDESK_API_RUSTDESK_KEY_FILE=/root/keys/id_ed25519.pub - - RUSTDESK_API_JWT_KEY=${UNIFIED_KEY} - - RUSTDESK_API_RUSTDESK_KEY=${UNIFIED_KEY_FINGERPRINT} - - RUSTDESK_API_JWT_KEY=${UNIFIED_KEY_FINGERPRINT} - - RUSTDESK_API_APP_WEB_CLIENT=1 - - RUSTDESK_API_APP_REGISTER=false - - RUSTDESK_API_LANG=zh-CN - - TZ=${TIMEZONE} - volumes: - - ./data/keys:/root/keys - - ./data/db:/root/db - - RUSTDESK_API_APP_CAPTCHA_THRESHOLD=-1 - - ADMIN_PASSWORD=${ADMIN_PASSWORD} - restart: unless-stopped - healthcheck: - test: ["CMD", "netstat", "-ltn"] - interval: 30s - timeout: 10s - retries: 3 - depends_on: - - hbbs - - hbbr EOF -echo "✅ 配置文件创建完成" +echo "Docker Compose 文件已生成" -# 拉取镜像(显示进度) -echo "📥 拉取 Docker 镜像..." -# 拉取镜像 -echo "📥 拉取官方 RustDesk 镜像..." -$DOCKER_COMPOSE_CMD pull +# 检查 Docker 是否安装 +if ! command -v docker &> /dev/null; then + echo "Docker 未安装,开始安装 Docker..." + curl -fsSL https://get.docker.com | sh + sudo systemctl start docker + sudo systemctl enable docker +fi + +# 检查 Docker Compose 是否安装 +if ! command -v docker-compose &> /dev/null; then + echo "Docker Compose 未安装,开始安装..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + sudo chmod +x /usr/local/bin/docker-compose +fi # 启动服务 -@@ -142,21 +156,52 @@ $DOCKER_COMPOSE_CMD up -d +echo "启动 RustDesk 服务..." +docker-compose up -d -# 等待启动 -echo "⏳ 等待服务启动..." -sleep 30 -for i in {1..30}; do - if $DOCKER_COMPOSE_CMD ps | grep -q "Up"; then - echo "✅ 服务启动成功" - break - fi - sleep 2 - echo -n "." -done - -# 设置管理员密码 -echo "🔐 设置管理员密码..." -docker exec rustdesk-server ./apimain reset-admin-pwd "$ADMIN_PASSWORD" 2>/dev/null || echo "⚠️ 密码设置可能需要重试" +# 等待服务启动 +echo "等待服务启动..." sleep 10 -# 显示部署结果 +# 显示部署信息 echo "" -echo "🎉 RustDesk 服务器部署完成!" echo "========================================" -echo "🌐 网页远程登录: http://$PUBLIC_IP:21115" -echo "🔑 统一密钥: $UNIFIED_KEY_FINGERPRINT" -echo "🔐 管理员密码: $ADMIN_PASSWORD" -echo "📊 服务状态:" -$DOCKER_COMPOSE_CMD ps - +echo " RustDesk 部署完成" +echo "========================================" +echo "服务器 IP: $SERVER_IP" +echo "固定密钥: $FIXED_KEY" +echo "管理密码: $ADMIN_PASSWORD" echo "" -echo "🌐 访问地址:" -echo " 网页远程登录: http://${PUBLIC_IP}:21115" -echo " API 管理界面: http://${PUBLIC_IP}:21114" +echo "服务端口:" +echo " - API 服务: 21114" +echo " - ID 服务: 21116" +echo " - 中继服务: 21117" echo "" -echo "🔑 统一密钥配置:" -echo " 密钥指纹: ${UNIFIED_KEY_FINGERPRINT}" +echo "客户端连接信息:" +echo " ID 服务器: $SERVER_IP:21116" +echo " 中继服务器: $SERVER_IP:21117" +echo " 密钥: $FIXED_KEY" echo "" -echo "🔐 登录信息:" -echo " 管理员密码: ${ADMIN_PASSWORD}" -echo "" -echo "📡 客户端配置:" -echo " ID 服务器: $PUBLIC_IP:21116" -echo " 中继服务器: $PUBLIC_IP:21117" -echo " ID 服务器: ${PUBLIC_IP}:21116" -echo " 中继服务器: ${PUBLIC_IP}:21117" -echo " 密钥: ${UNIFIED_KEY_FINGERPRINT}" -echo "" -echo "🔧 管理命令:" -echo " 查看日志: cd ${WORK_DIR} && ${DOCKER_COMPOSE_CMD} logs -f" -echo " 重启服务: cd ${WORK_DIR} && ${DOCKER_COMPOSE_CMD} restart" -echo " 停止服务: cd ${WORK_DIR} && ${DOCKER_COMPOSE_CMD} down" +echo "管理命令:" +echo " 查看日志: docker-compose logs -f" +echo " 停止服务: docker-compose down" +echo " 重启服务: docker-compose restart" echo "========================================" -# 测试端口连通性 -echo "🔍 测试服务端口..." -for port in 21114 21115 21116 21117; do - if nc -z localhost $port 2>/dev/null; then - echo "✅ 端口 $port 监听正常" - else - echo "❌ 端口 $port 无法连接" - fi -done +# 保存配置信息到文件 +cat > /data/rustdesk/deploy-info.txt << EOF +RustDesk Server 部署信息 +部署时间: $(date) +服务器 IP: $SERVER_IP +固定密钥: $FIXED_KEY +管理密码: $ADMIN_PASSWORD + +客户端配置: +ID 服务器: $SERVER_IP:21116 +中继服务器: $SERVER_IP:21117 +密钥: $FIXED_KEY + +服务状态检查: +docker-compose ps +docker-compose logs +EOF + +echo "配置信息已保存到: /data/rustdesk/deploy-info.txt"