learn-spider/sh/install.sh

244 lines
6.8 KiB
Bash

#!/bin/bash
# ==================== 配置变量 ====================
# 需要创建的用户数量
USER_COUNT=${1:-10}
# 公共的工作目录
PUBLIC_DIR="${2:-/shared}"
# git仓库地址
GIT_NO_VNC="${3:-https://github.com/novnc/noVNC.git}"
GIT_WEBSOCKIFY="${4:-https://github.com/novnc/websockify.git}"
GIT_PY_SPIDER="${5:-https://git.nps.crabapples.cn/crabapples/learn-spider.git}"
echo "USER_COUNT: $USER_COUNT"
echo "PUBLIC_DIR: $PUBLIC_DIR"
echo "GIT_NO_VNC: $GIT_NO_VNC"
echo "GIT_WEBSOCKIFY: $GIT_WEBSOCKIFY"
echo "GIT_PY_SPIDER: $GIT_PY_SPIDER"
echo ""
# ==================== 函数定义 ====================
# 1. 预安装软件
pre_install(){
echo "当前进度:01.预安装软件"
sudo apt update
sudo apt install -y xfce4 xfce4-goodies
sudo apt install -y tigervnc-standalone-server tigervnc-common
sudo apt install -y git python3 openssl
echo "✅ [完成] 预安装软件"
echo ""
}
# 2. 开放防火墙
open_firewall(){
echo "当前进度:02.开放防火墙"
sudo ufw allow 6080/tcp
echo "✅ [完成] 开放防火墙端口 6080"
echo ""
}
# 3. 批量创建用户
batch_create_user(){
echo "当前进度:03.创建用户"
for i in $(seq 1 $USER_COUNT); do
username="user$i"
sudo useradd -m -s /bin/bash "$username"
echo "$username:$username" | sudo chpasswd
echo " ✓ 用户 $username 创建完成,密码: $username"
done
echo "✅ [完成] 共创建 $USER_COUNT 个用户"
echo ""
}
# 4. 批量设置VNC密码
batch_set_vncpdw(){
echo "当前进度:04.设置VNC密码"
for i in $(seq 1 $USER_COUNT); do
username="user$i"
sudo su - "$username" -c "mkdir -p ~/.vnc && echo '$username' | vncpasswd -f > ~/.vnc/passwd && chmod 600 ~/.vnc/passwd"
echo " ✓ 正在设置 $username 的VNC密码"
done
echo "✅ [完成] 所有VNC密码设置完成"
echo ""
}
# 5. 创建 VNC 启动配置
create_xstartup(){
echo "当前进度:05.创建VNC启动配置"
for i in $(seq 1 ${USER_COUNT}); do
username="user$i"
sudo bash -c "cat > /home/$username/.vnc/xstartup << 'EOF'
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
wait
EOF"
sudo chmod +x "/home/$username/.vnc/xstartup"
echo " ✓ 已创建 $username 的 xstartup"
done
echo "✅ [完成] 所有用户的 VNC 启动配置创建完成"
echo ""
}
# 6. 创建公共目录
cerate_public_dir(){
echo "当前进度:06.创建公共工作目录"
sudo mkdir -p "$PUBLIC_DIR"
sudo chmod 777 "$PUBLIC_DIR"
sudo chmod +t "$PUBLIC_DIR"
sudo chown root:root "$PUBLIC_DIR"
echo " 公共文件夹已创建: $PUBLIC_DIR"
echo " 权限: $(ls -ld $PUBLIC_DIR)"
echo "✅ [完成] 公共工作目录创建完成"
echo ""
}
# 7. 在每个用户home目录创建软连接
create_shortcut_for_users(){
echo "当前进度:07.创建公共工作目录软连接"
for i in $(seq 1 $USER_COUNT); do
username="user$i"
sudo su - "$username" -c "ln -sf $PUBLIC_DIR ~/workspace"
echo " ✓ 正在创建 $username 的快捷方式"
done
echo "✅ [完成] 所有用户的软连接创建完成"
echo ""
}
# 8. 准备novnc文件
install_vnc_server(){
echo "当前进度:08.下载NoVNC源码"
cd $PUBLIC_DIR
sudo git clone $GIT_NO_VNC
sudo git clone $GIT_WEBSOCKIFY
echo "✅ [完成] NoVNC 源码下载完成"
echo ""
}
# 9. 生成ssl证书
create_ssl_cert(){
echo "当前进度:09.生成SSL证书,有效期:10年"
cd $PUBLIC_DIR/noVNC
sudo openssl req -new -x509 -days 3650 -nodes \
-out self.pem \
-keyout self.pem \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Test/CN=localhost"
echo "✅ [完成] SSL证书生成完成"
echo ""
}
# 10. 预安装爬虫
pre_install_spider(){
echo "当前进度:10.下载爬虫源码"
cd $PUBLIC_DIR
if [ -d "learn-spider" ]; then
cd learn-spider
sudo git pull
else
sudo git clone $GIT_PY_SPIDER
cd learn-spider
fi
sudo chmod +x ./pre_install_spider.sh
sudo chmod +x ./start_spider.sh
sudo ./pre_install_spider.sh
echo "✅ [完成] 爬虫环境安装完成"
echo ""
}
# 11. 创建 token.conf 配置文件
create_token_conf(){
echo "当前进度:11.创建token.conf配置文件"
sudo tee "$PUBLIC_DIR/websockify/token.conf" > /dev/null << EOF
# noVNC Token Configuration
$(for i in $(seq 1 $USER_COUNT); do echo "user$i: 127.0.0.1:$((5900 + i))"; done)
EOF
sudo chmod 644 "$PUBLIC_DIR/websockify/token.conf"
echo " token.conf 内容预览:"
sudo cat "$PUBLIC_DIR/websockify/token.conf" | head -5
echo "✅ [完成] token.conf 已创建"
echo ""
}
# 12. 创建novnc服务文件
create_novnc_service(){
echo "当前进度:12.创建novnc.service服务配置文件"
WEB_ROOT="$PUBLIC_DIR/noVNC"
WORKSPACE="$PUBLIC_DIR/websockify"
TOKEN_FILE="$WORKSPACE/token.conf"
CERT_PATH="$WEB_ROOT/self.pem"
SERVICE_FILE="/etc/systemd/system/novnc.service"
sudo tee "$SERVICE_FILE" > /dev/null << EOF
[Unit]
Description=noVNC WebSocket Proxy
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=$WORKSPACE
ExecStart=$WORKSPACE/run \
--web $WEB_ROOT \
--target-config $TOKEN_FILE \
--cert $CERT_PATH \
6080
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl stop novnc 2>/dev/null
sudo systemctl enable novnc.service --now
echo " 服务状态检查:"
sudo systemctl status novnc --no-pager | head -5
echo "✅ [完成] noVNC 服务已创建并启动"
echo " 查看日志: sudo journalctl -u novnc -f"
echo " 访问地址: https://$(hostname -I | awk '{print $1}'):6080/vnc.html"
echo ""
}
# 13. 显示部署总结
show_summary(){
echo "==================== 部署总结 ===================="
echo "✅ 用户数量: $USER_COUNT"
echo "✅ 公共目录: $PUBLIC_DIR"
echo "✅ VNC 端口范围: 5901-$((5900 + $USER_COUNT))"
echo "✅ noVNC 访问地址: https://$(hostname -I | awk '{print $1}'):6080/vnc.html"
echo "✅ Token 配置: user1-user$USER_COUNT 使用对应密码"
echo ""
echo "==================== 部署完成 ===================="
}
# ==================== 主执行流程 ====================
main(){
echo ""
echo "========== 开始部署 VNC 环境 =========="
echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
pre_install
open_firewall
batch_create_user
batch_set_vncpdw
create_xstartup
cerate_public_dir
create_shortcut_for_users
install_vnc_server
create_ssl_cert
pre_install_spider
create_token_conf
create_novnc_service
show_summary
echo "结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
}
main