diff --git a/install.sh b/install.sh index 2f6c60f..0fd7942 100644 --- a/install.sh +++ b/install.sh @@ -1837,30 +1837,55 @@ update_pull_latest_code() { # 克隆最新代码 git clone "$REPO_URL" "${PROJECT_NAME}-update" - # 删除旧的代码文件(保留data和storage) - cd "$PROJECT_DIR" - find . -maxdepth 1 ! -name 'backend' ! -name '.' -exec rm -rf {} + 2>/dev/null || true - - if [[ -d "backend" ]]; then - cd backend - find . -maxdepth 1 ! -name 'data' ! -name 'storage' ! -name '.env' ! -name '.' -exec rm -rf {} + 2>/dev/null || true - cd .. + # 更新前端文件 + print_info "更新前端文件..." + if [[ -d "/tmp/${PROJECT_NAME}-update/frontend" ]]; then + rm -rf "${PROJECT_DIR}/frontend" + cp -r "/tmp/${PROJECT_NAME}-update/frontend" "${PROJECT_DIR}/" fi - # 复制新代码 - cp -r "/tmp/${PROJECT_NAME}-update"/* "$PROJECT_DIR/" 2>/dev/null || true + # 更新上传工具 + if [[ -d "/tmp/${PROJECT_NAME}-update/upload-tool" ]]; then + rm -rf "${PROJECT_DIR}/upload-tool" + cp -r "/tmp/${PROJECT_NAME}-update/upload-tool" "${PROJECT_DIR}/" + fi - # 恢复重要文件 - if [[ -d "$TEMP_BACKUP/data" ]]; then + # 更新后端代码文件(但不覆盖 data、storage、.env) + print_info "更新后端代码..." + if [[ -d "/tmp/${PROJECT_NAME}-update/backend" ]]; then + cd "/tmp/${PROJECT_NAME}-update/backend" + + # 复制后端文件,但排除 data、storage、.env、node_modules + for item in *; do + if [[ "$item" != "data" ]] && [[ "$item" != "storage" ]] && [[ "$item" != ".env" ]] && [[ "$item" != "node_modules" ]]; then + rm -rf "${PROJECT_DIR}/backend/$item" + cp -r "$item" "${PROJECT_DIR}/backend/" + fi + done + fi + + # 确保备份的重要文件存在 + print_info "确保数据完整性..." + + # 如果 data 目录不存在,从备份恢复 + if [[ ! -d "${PROJECT_DIR}/backend/data" ]] && [[ -d "$TEMP_BACKUP/data" ]]; then + print_warning "检测到 data 目录丢失,正在从备份恢复..." cp -r "$TEMP_BACKUP/data" "${PROJECT_DIR}/backend/" + print_success "数据库已恢复" fi - if [[ -d "$TEMP_BACKUP/storage" ]]; then + # 如果 storage 目录不存在,从备份恢复 + if [[ ! -d "${PROJECT_DIR}/backend/storage" ]] && [[ -d "$TEMP_BACKUP/storage" ]]; then + print_warning "检测到 storage 目录丢失,正在从备份恢复..." cp -r "$TEMP_BACKUP/storage" "${PROJECT_DIR}/backend/" + print_success "用户文件已恢复" fi - if [[ -f "$TEMP_BACKUP/.env" ]]; then + # 如果 .env 文件不存在,从备份恢复 + if [[ ! -f "${PROJECT_DIR}/backend/.env" ]] && [[ -f "$TEMP_BACKUP/.env" ]]; then + print_warning "检测到 .env 文件丢失,正在从备份恢复..." cp "$TEMP_BACKUP/.env" "${PROJECT_DIR}/backend/" + print_success "配置文件已恢复" fi # 清理临时文件