功能: 添加修复模式到install.sh
修复模式功能说明: - 重新加载和应用所有配置 - 保留数据库和用户数据 - 重新生成nginx配置 - 重启后端服务和nginx - 适用于配置更新、修复nginx问题等场景 使用方法: bash install.sh --repair bash install.sh --fix bash install.sh repair 交互式菜单中添加第3个选项「修复/重新配置」 实现内容: 1. 模式检测: 支持 --repair, --fix, repair 参数 2. 交互式菜单: 添加修复选项到主菜单 3. 主执行流程: 添加repair模式路由到repair_main() 4. repair_main(): 主修复流程函数 - confirm_repair(): 确认修复操作 - repair_check_project(): 检查项目是否已安装 - repair_load_existing_config(): 读取现有.env和nginx配置 - repair_regenerate_nginx_config(): 重新生成nginx配置 - repair_restart_services(): 重启PM2和nginx - repair_verify_services(): 验证服务状态 - print_repair_completion(): 显示完成信息
This commit is contained in:
307
install.sh
307
install.sh
@@ -2083,13 +2083,13 @@ main() {
|
|||||||
echo ""
|
echo ""
|
||||||
echo -e "${GREEN}[1]${NC} 安装/部署 玩玩云"
|
echo -e "${GREEN}[1]${NC} 安装/部署 玩玩云"
|
||||||
echo -e "${BLUE}[2]${NC} 更新/升级 玩玩云"
|
echo -e "${BLUE}[2]${NC} 更新/升级 玩玩云"
|
||||||
echo -e "${RED}[3]${NC} 卸载 玩玩云"
|
echo -e "${YELLOW}[3]${NC} 修复/重新配置 玩玩云"
|
||||||
|
echo -e "${RED}[4]${NC} 卸载 玩玩云"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
read -p "请输入选项 [1-3]: " mode_choice < /dev/tty
|
read -p "请输入选项 [1-4]: " mode_choice < /dev/tty
|
||||||
case $mode_choice in
|
case $mode_choice in
|
||||||
1)
|
|
||||||
print_success "已选择: 安装模式"
|
print_success "已选择: 安装模式"
|
||||||
echo ""
|
echo ""
|
||||||
break
|
break
|
||||||
@@ -2101,6 +2101,12 @@ main() {
|
|||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
|
print_info "切换到修复模式..."
|
||||||
|
echo ""
|
||||||
|
repair_main
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
4)
|
||||||
print_info "切换到卸载模式..."
|
print_info "切换到卸载模式..."
|
||||||
echo ""
|
echo ""
|
||||||
uninstall_main
|
uninstall_main
|
||||||
@@ -2111,18 +2117,12 @@ main() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
else
|
echo -e "${YELLOW}提示:${NC}"
|
||||||
# 管道执行时的提示
|
|
||||||
print_info "检测到通过管道执行脚本"
|
|
||||||
print_info "默认进入安装模式"
|
|
||||||
print_warning "如需其他操作,请下载脚本后运行"
|
|
||||||
echo ""
|
|
||||||
echo -e "${YELLOW}提示:${NC}"
|
echo -e "${YELLOW}提示:${NC}"
|
||||||
echo " 安装: wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh && bash install.sh"
|
echo " 安装: wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh && bash install.sh"
|
||||||
echo " 更新: wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh && bash install.sh --update"
|
echo " 更新: wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh && bash install.sh --update"
|
||||||
|
echo " 修复: wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh && bash install.sh --repair"
|
||||||
echo " 卸载: wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh && bash install.sh --uninstall"
|
echo " 卸载: wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh && bash install.sh --uninstall"
|
||||||
echo ""
|
|
||||||
sleep 2
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2211,10 +2211,295 @@ uninstall_main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# 执行主流程
|
# 执行主流程
|
||||||
|
|
||||||
if [[ "$MODE" == "uninstall" ]]; then
|
if [[ "$MODE" == "uninstall" ]]; then
|
||||||
uninstall_main
|
uninstall_main
|
||||||
elif [[ "$MODE" == "update" ]]; then
|
elif [[ "$MODE" == "update" ]]; then
|
||||||
update_main
|
update_main
|
||||||
|
elif [[ "$MODE" == "repair" ]]; then
|
||||||
|
repair_main
|
||||||
else
|
else
|
||||||
main
|
main
|
||||||
fi
|
fi
|
||||||
|
################################################################################
|
||||||
|
################################################################################
|
||||||
|
# 修复功能
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_repair_banner() {
|
||||||
|
echo "║ ║"
|
||||||
|
echo "║ 🔧 玩玩云 修复模式 ║"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "║ Repair Mode ║"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||||||
|
echo -e "${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
confirm_repair() {
|
||||||
|
print_repair_banner
|
||||||
|
|
||||||
|
echo -e "${YELLOW}"
|
||||||
|
echo "本脚本将执行以下操作:"
|
||||||
|
echo ""
|
||||||
|
echo "【将会重新配置】"
|
||||||
|
echo " ✓ 重新生成Nginx配置(应用最新配置)"
|
||||||
|
echo " ✓ 重启后端服务"
|
||||||
|
echo " ✓ 重载Nginx服务"
|
||||||
|
echo ""
|
||||||
|
echo "【将会保留】"
|
||||||
|
echo " ✓ 数据库文件(用户数据)"
|
||||||
|
echo " ✓ 用户上传的文件"
|
||||||
|
echo " ✓ .env 配置文件"
|
||||||
|
echo " ✓ SSL证书"
|
||||||
|
echo -e "${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_info "适用场景: 更新配置、修复nginx配置错误、重新应用设置"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "确定要执行修复吗? (y/n): " confirm < /dev/tty
|
||||||
|
|
||||||
|
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
|
||||||
|
print_info "已取消修复"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
repair_check_project() {
|
||||||
|
print_step "检查项目是否已安装..."
|
||||||
|
|
||||||
|
if [[ ! -d "$PROJECT_DIR" ]]; then
|
||||||
|
print_error "项目未安装: $PROJECT_DIR"
|
||||||
|
print_info "请先运行安装命令: bash install.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "${PROJECT_DIR}/backend/server.js" ]]; then
|
||||||
|
print_error "项目目录不完整"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "项目已安装: $PROJECT_DIR"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
repair_load_existing_config() {
|
||||||
|
print_step "读取现有配置..."
|
||||||
|
|
||||||
|
# 从.env读取端口配置
|
||||||
|
if [[ -f "${PROJECT_DIR}/backend/.env" ]]; then
|
||||||
|
BACKEND_PORT=$(grep "^PORT=" "${PROJECT_DIR}/backend/.env" | cut -d'=' -f2 || echo "40001")
|
||||||
|
print_success "后端端口: $BACKEND_PORT"
|
||||||
|
else
|
||||||
|
print_warning ".env文件不存在,使用默认端口40001"
|
||||||
|
BACKEND_PORT="40001"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查现有nginx配置
|
||||||
|
if [[ -f "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf" ]]; then
|
||||||
|
# 尝试从现有配置读取端口
|
||||||
|
EXISTING_HTTP_PORT=$(grep "listen" "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf" | grep -v "ssl" | head -1 | awk '{print $2}' | tr -d ';' || echo "80")
|
||||||
|
HTTP_PORT=${EXISTING_HTTP_PORT:-80}
|
||||||
|
|
||||||
|
# 检查是否有HTTPS配置
|
||||||
|
if grep -q "listen.*ssl" "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf"; then
|
||||||
|
EXISTING_HTTPS_PORT=$(grep "listen.*ssl" "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf" | head -1 | awk '{print $2}' | tr -d ';' || echo "443")
|
||||||
|
HTTPS_PORT=${EXISTING_HTTPS_PORT:-443}
|
||||||
|
SSL_METHOD="existing"
|
||||||
|
print_success "检测到HTTPS配置,端口: $HTTPS_PORT"
|
||||||
|
else
|
||||||
|
SSL_METHOD="8"
|
||||||
|
print_info "未检测到HTTPS配置"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查是否有域名
|
||||||
|
SERVER_NAME=$(grep "server_name" "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf" | head -1 | awk '{print $2}' | tr -d ';' || echo "_")
|
||||||
|
if [[ "$SERVER_NAME" != "_" ]] && [[ "$SERVER_NAME" != "localhost" ]]; then
|
||||||
|
DOMAIN="$SERVER_NAME"
|
||||||
|
USE_DOMAIN=true
|
||||||
|
print_success "检测到域名: $DOMAIN"
|
||||||
|
else
|
||||||
|
USE_DOMAIN=false
|
||||||
|
print_info "使用IP模式"
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "HTTP端口: $HTTP_PORT"
|
||||||
|
else
|
||||||
|
print_warning "未找到现有nginx配置,将使用默认配置"
|
||||||
|
HTTP_PORT="80"
|
||||||
|
HTTPS_PORT="443"
|
||||||
|
SSL_METHOD="8"
|
||||||
|
USE_DOMAIN=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
repair_regenerate_nginx_config() {
|
||||||
|
print_step "重新生成Nginx配置..."
|
||||||
|
|
||||||
|
# 备份现有配置
|
||||||
|
if [[ -f "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf" ]]; then
|
||||||
|
cp "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf" "/etc/nginx/sites-enabled/${PROJECT_NAME}.conf.backup.$(date +%Y%m%d%H%M%S)"
|
||||||
|
print_success "已备份现有配置"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 调用现有的configure_nginx函数
|
||||||
|
configure_nginx
|
||||||
|
|
||||||
|
print_success "Nginx配置已重新生成"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
repair_restart_services() {
|
||||||
|
print_step "重启服务..."
|
||||||
|
|
||||||
|
# 重启后端
|
||||||
|
if command -v pm2 &> /dev/null; then
|
||||||
|
if pm2 list | grep -q "${PROJECT_NAME}-backend"; then
|
||||||
|
pm2 restart ${PROJECT_NAME}-backend
|
||||||
|
print_success "后端服务已重启"
|
||||||
|
else
|
||||||
|
print_warning "后端服务未运行,尝试启动..."
|
||||||
|
cd "${PROJECT_DIR}/backend"
|
||||||
|
pm2 start server.js --name ${PROJECT_NAME}-backend
|
||||||
|
pm2 save
|
||||||
|
print_success "后端服务已启动"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 重载Nginx
|
||||||
|
if systemctl is-active --quiet nginx; then
|
||||||
|
systemctl reload nginx
|
||||||
|
print_success "Nginx已重载"
|
||||||
|
else
|
||||||
|
print_warning "Nginx未运行,尝试启动..."
|
||||||
|
systemctl start nginx
|
||||||
|
print_success "Nginx已启动"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
repair_verify_services() {
|
||||||
|
print_step "验证服务状态..."
|
||||||
|
|
||||||
|
# 检查后端
|
||||||
|
if pm2 status | grep -q "${PROJECT_NAME}-backend.*online"; then
|
||||||
|
print_success "后端服务运行正常"
|
||||||
|
else
|
||||||
|
print_error "后端服务状态异常"
|
||||||
|
print_info "查看日志: pm2 logs ${PROJECT_NAME}-backend"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查Nginx
|
||||||
|
if systemctl is-active --quiet nginx; then
|
||||||
|
print_success "Nginx服务运行正常"
|
||||||
|
else
|
||||||
|
print_error "Nginx服务异常"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查端口
|
||||||
|
if netstat -tunlp 2>/dev/null | grep -q ":${BACKEND_PORT}" || ss -tunlp 2>/dev/null | grep -q ":${BACKEND_PORT}"; then
|
||||||
|
print_success "后端端口监听正常 (${BACKEND_PORT})"
|
||||||
|
else
|
||||||
|
print_warning "后端端口监听异常"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
print_repair_completion() {
|
||||||
|
clear
|
||||||
|
echo -e "${GREEN}"
|
||||||
|
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "║ ✓ 修复完成! ║"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||||||
|
echo -e "${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${CYAN}修复内容:${NC}"
|
||||||
|
echo " ✓ Nginx配置已更新到最新版本"
|
||||||
|
echo " ✓ 服务已重启"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${CYAN}保留的数据:${NC}"
|
||||||
|
echo " ✓ 数据库(用户、分享链接等)"
|
||||||
|
echo " ✓ 用户文件(storage目录)"
|
||||||
|
echo " ✓ 配置文件(.env)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 显示访问地址
|
||||||
|
if [[ "$USE_DOMAIN" == "true" ]]; then
|
||||||
|
if [[ "$SSL_METHOD" == "8" ]] || [[ "$SSL_METHOD" == "" ]]; then
|
||||||
|
if [[ "$HTTP_PORT" == "80" ]]; then
|
||||||
|
echo -e "${CYAN}访问地址:${NC} http://${DOMAIN}"
|
||||||
|
else
|
||||||
|
echo -e "${CYAN}访问地址:${NC} http://${DOMAIN}:${HTTP_PORT}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ "$HTTPS_PORT" == "443" ]]; then
|
||||||
|
echo -e "${CYAN}访问地址:${NC} https://${DOMAIN}"
|
||||||
|
else
|
||||||
|
echo -e "${CYAN}访问地址:${NC} https://${DOMAIN}:${HTTPS_PORT}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
PUBLIC_IP=$(curl -s ifconfig.me || curl -s icanhazip.com || echo "服务器IP")
|
||||||
|
if [[ "$HTTP_PORT" == "80" ]]; then
|
||||||
|
echo -e "${CYAN}访问地址:${NC} http://${PUBLIC_IP}"
|
||||||
|
else
|
||||||
|
echo -e "${CYAN}访问地址:${NC} http://${PUBLIC_IP}:${HTTP_PORT}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${YELLOW}常用命令:${NC}"
|
||||||
|
echo " 查看服务状态: pm2 status"
|
||||||
|
echo " 查看日志: pm2 logs ${PROJECT_NAME}-backend"
|
||||||
|
echo " 重启服务: pm2 restart ${PROJECT_NAME}-backend"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${GREEN}修复完成,请测试功能是否正常!${NC}"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
repair_main() {
|
||||||
|
# 检查root权限
|
||||||
|
check_root
|
||||||
|
|
||||||
|
# 检测操作系统
|
||||||
|
detect_os
|
||||||
|
|
||||||
|
# 确认修复
|
||||||
|
confirm_repair
|
||||||
|
|
||||||
|
# 检查项目
|
||||||
|
repair_check_project
|
||||||
|
|
||||||
|
# 读取现有配置
|
||||||
|
repair_load_existing_config
|
||||||
|
|
||||||
|
# 重新生成nginx配置
|
||||||
|
repair_regenerate_nginx_config
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
repair_restart_services
|
||||||
|
|
||||||
|
# 验证服务
|
||||||
|
repair_verify_services
|
||||||
|
|
||||||
|
# 健康检查
|
||||||
|
if ! health_check; then
|
||||||
|
print_warning "部分健康检查未通过,请查看日志"
|
||||||
|
print_info "查看日志: pm2 logs ${PROJECT_NAME}-backend"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 完成提示
|
||||||
|
print_repair_completion
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user