Files
dock/ru
2025-10-30 12:49:22 +08:00

273 lines
7.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# RustDesk Server 一键部署脚本包含Docker自动安装
set -e
echo "========================================"
echo " RustDesk Server 一键部署脚本"
echo "========================================"
# 检查并安装 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
}
# 检查并安装 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'
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA2Q1Dp4q8q5V7s9kLx2mBwT3zN8rR6vY1zUj5tKfE=
-----END PUBLIC KEY-----
EOF
fi
# 编码密钥为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 "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
# 创建docker-compose.yml
echo "5. 创建Docker Compose配置..."
cat > docker-compose.yml << EOF
version: '3'
services:
hbbs:
container_name: hbbs
ports:
- "21115:21115"
- "21116:21116"
- "21116:21116/udp"
- "21118:21118"
image: lejianwen/rustdesk-server:latest
command: hbbs -r $RELAY_SERVER:21117
volumes:
- ./data:/root
environment:
- RELAY=$RELAY_SERVER
- KEY_PUB=$KEY_PUB
- KEY_PRIV=$KEY_PRIV
restart: unless-stopped
hbbr:
container_name: hbbr
ports:
- "21117:21117"
- "21119:21119"
image: lejianwen/rustdesk-server:latest
volumes:
- ./data:/root
environment:
- KEY_PUB=$KEY_PUB
- KEY_PRIV=$KEY_PRIV
restart: unless-stopped
EOF
# 创建环境变量文件
cat > .env << EOF
RELAY_SERVER=$RELAY_SERVER
KEY_PUB=$KEY_PUB
KEY_PRIV=$KEY_PRIV
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'
#!/bin/bash
cd "$(dirname "$0")"
docker-compose down
echo "RustDesk服务器已停止"
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
- 公钥:
\`\`\`
$(cat keys/id_ed25519.pub)
\`\`\`
## 配置步骤
1. 打开RustDesk客户端
2. 点击右下角设置按钮
3. 选择"网络"标签
4. 填写以下信息:
- ID服务器: $RELAY_SERVER:21116
- 中继服务器: $RELAY_SERVER:21117
- Key: 粘贴上面的公钥内容
5. 点击"应用"保存设置
## 端口说明
- 21115: HTTP API端口
- 21116: ID服务器端口 (TCP)
- 21117: 中继服务器端口 (TCP)
- 21118: 网页客户端端口
- 21119: 中继服务器端口 (备用)
EOF
# 设置脚本权限
chmod +x start.sh stop.sh restart.sh
}
# 启动服务
start_services() {
echo "6. 拉取Docker镜像..."
docker pull lejianwen/rustdesk-server:latest
echo "7. 启动RustDesk服务..."
docker-compose up -d
# 等待服务启动
sleep 5
}
# 显示部署结果
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"
}
# 主执行流程
main() {
install_dependencies
install_docker
install_docker_compose
deploy_rustdesk
start_services
show_result
}
# 执行主函数
main