新功能: 一键更新功能 v1.2.0
新增功能: - 添加一键更新命令(--update 参数) - 交互式菜单新增「更新/升级」选项 - 支持三种更新方式(curl/wget/本地脚本) 更新流程: - 智能备份数据库和用户文件到临时目录 - 停止服务并拉取最新代码 - 保留重要文件(data/storage/.env) - 自动更新后端依赖(npm install) - 重启服务并进行健康检查 - 显示更新后的版本信息 安全保障: - 更新前需用户确认 - 自动备份所有用户数据 - 保留配置文件和Nginx配置 - 更新失败时提供清晰的错误提示 文档更新: - 一键部署命令.txt: 添加更新命令和v1.2.0说明 - INSTALL_GUIDE.md: 详细的更新指南和注意事项 版本: v1.2.0 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,42 @@ wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.s
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 🔄 一键更新命令
|
||||||
|
|
||||||
|
如果您已经部署了玩玩云,可以使用以下命令快速更新到最新版本:
|
||||||
|
|
||||||
|
### 方式1: 使用 curl (推荐)
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||||
|
```
|
||||||
|
|
||||||
|
### 方式2: 使用 wget
|
||||||
|
```bash
|
||||||
|
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||||
|
```
|
||||||
|
|
||||||
|
### 方式3: 本地脚本
|
||||||
|
```bash
|
||||||
|
wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh
|
||||||
|
bash install.sh --update
|
||||||
|
```
|
||||||
|
|
||||||
|
### 更新说明
|
||||||
|
更新过程会:
|
||||||
|
- ✅ 从Gitee拉取最新代码
|
||||||
|
- ✅ 自动备份数据库和用户文件
|
||||||
|
- ✅ 更新后端依赖(npm install)
|
||||||
|
- ✅ 重启后端服务
|
||||||
|
- ✅ 保留所有配置和用户数据
|
||||||
|
|
||||||
|
更新不会影响:
|
||||||
|
- ✅ 数据库文件(用户、分享链接等)
|
||||||
|
- ✅ 用户上传的文件(storage目录)
|
||||||
|
- ✅ 配置文件(.env)
|
||||||
|
- ✅ Nginx配置
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📋 系统要求
|
## 📋 系统要求
|
||||||
|
|
||||||
### 支持的操作系统
|
### 支持的操作系统
|
||||||
|
|||||||
307
install.sh
307
install.sh
@@ -1,9 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# 玩玩云 (WanWanYun) - 一键部署/卸载脚本
|
# 玩玩云 (WanWanYun) - 一键部署/卸载/更新脚本
|
||||||
# 项目地址: https://gitee.com/yu-yon/vue-driven-cloud-storage
|
# 项目地址: https://gitee.com/yu-yon/vue-driven-cloud-storage
|
||||||
# 版本: v1.1.5
|
# 版本: v1.2.0
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
@@ -12,6 +12,8 @@ set -e
|
|||||||
MODE="install"
|
MODE="install"
|
||||||
if [[ "$1" == "--uninstall" ]] || [[ "$1" == "-u" ]] || [[ "$1" == "uninstall" ]]; then
|
if [[ "$1" == "--uninstall" ]] || [[ "$1" == "-u" ]] || [[ "$1" == "uninstall" ]]; then
|
||||||
MODE="uninstall"
|
MODE="uninstall"
|
||||||
|
elif [[ "$1" == "--update" ]] || [[ "$1" == "--upgrade" ]] || [[ "$1" == "update" ]]; then
|
||||||
|
MODE="update"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 颜色定义
|
# 颜色定义
|
||||||
@@ -1703,6 +1705,287 @@ print_uninstall_completion() {
|
|||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# 更新功能
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_update_banner() {
|
||||||
|
clear
|
||||||
|
echo -e "${BLUE}"
|
||||||
|
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "║ 🔄 玩玩云 更新模式 ║"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "║ Update Mode ║"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||||||
|
echo -e "${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
confirm_update() {
|
||||||
|
print_update_banner
|
||||||
|
|
||||||
|
echo -e "${YELLOW}"
|
||||||
|
echo "本脚本将执行以下操作:"
|
||||||
|
echo ""
|
||||||
|
echo "【将要更新】"
|
||||||
|
echo " ✓ 从Gitee拉取最新代码"
|
||||||
|
echo " ✓ 更新后端依赖(npm install)"
|
||||||
|
echo " ✓ 重启后端服务"
|
||||||
|
echo ""
|
||||||
|
echo "【将会保留】"
|
||||||
|
echo " ✓ 数据库文件(用户数据)"
|
||||||
|
echo " ✓ 用户上传的文件"
|
||||||
|
echo " ✓ .env 配置文件"
|
||||||
|
echo " ✓ Nginx 配置"
|
||||||
|
echo -e "${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_info "建议在更新前备份重要数据"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "确定要更新吗? (y/n): " confirm < /dev/tty
|
||||||
|
|
||||||
|
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
|
||||||
|
print_info "已取消更新"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
update_check_project() {
|
||||||
|
print_step "检查项目是否已安装..."
|
||||||
|
|
||||||
|
if [[ ! -d "$PROJECT_DIR" ]]; then
|
||||||
|
print_error "项目未安装: $PROJECT_DIR"
|
||||||
|
print_info "请先运行安装命令"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "${PROJECT_DIR}/backend/server.js" ]]; then
|
||||||
|
print_error "项目目录不完整"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "项目已安装: $PROJECT_DIR"
|
||||||
|
}
|
||||||
|
|
||||||
|
update_backup_important_files() {
|
||||||
|
print_step "备份重要文件..."
|
||||||
|
|
||||||
|
TEMP_BACKUP="/tmp/${PROJECT_NAME}-update-backup-$(date +%Y%m%d-%H%M%S)"
|
||||||
|
mkdir -p "$TEMP_BACKUP"
|
||||||
|
|
||||||
|
# 备份数据库
|
||||||
|
if [[ -d "${PROJECT_DIR}/backend/data" ]]; then
|
||||||
|
cp -r "${PROJECT_DIR}/backend/data" "$TEMP_BACKUP/"
|
||||||
|
print_success "数据库已备份"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 备份用户文件
|
||||||
|
if [[ -d "${PROJECT_DIR}/backend/storage" ]]; then
|
||||||
|
cp -r "${PROJECT_DIR}/backend/storage" "$TEMP_BACKUP/"
|
||||||
|
print_success "用户文件已备份"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 备份配置文件
|
||||||
|
if [[ -f "${PROJECT_DIR}/backend/.env" ]]; then
|
||||||
|
cp "${PROJECT_DIR}/backend/.env" "$TEMP_BACKUP/"
|
||||||
|
print_success "配置文件已备份"
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "备份完成: $TEMP_BACKUP"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
update_stop_services() {
|
||||||
|
print_step "停止服务..."
|
||||||
|
|
||||||
|
if command -v pm2 &> /dev/null; then
|
||||||
|
if pm2 list | grep -q "${PROJECT_NAME}-backend"; then
|
||||||
|
pm2 stop ${PROJECT_NAME}-backend
|
||||||
|
print_success "后端服务已停止"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
update_pull_latest_code() {
|
||||||
|
print_step "正在从Gitee拉取最新代码..."
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
if [[ -d "${PROJECT_NAME}-update" ]]; then
|
||||||
|
rm -rf "${PROJECT_NAME}-update"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 克隆最新代码
|
||||||
|
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 ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 复制新代码
|
||||||
|
cp -r "/tmp/${PROJECT_NAME}-update"/* "$PROJECT_DIR/" 2>/dev/null || true
|
||||||
|
|
||||||
|
# 恢复重要文件
|
||||||
|
if [[ -d "$TEMP_BACKUP/data" ]]; then
|
||||||
|
cp -r "$TEMP_BACKUP/data" "${PROJECT_DIR}/backend/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -d "$TEMP_BACKUP/storage" ]]; then
|
||||||
|
cp -r "$TEMP_BACKUP/storage" "${PROJECT_DIR}/backend/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f "$TEMP_BACKUP/.env" ]]; then
|
||||||
|
cp "$TEMP_BACKUP/.env" "${PROJECT_DIR}/backend/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 清理临时文件
|
||||||
|
rm -rf "/tmp/${PROJECT_NAME}-update"
|
||||||
|
rm -rf "$TEMP_BACKUP"
|
||||||
|
|
||||||
|
print_success "代码更新完成"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
update_install_dependencies() {
|
||||||
|
print_step "更新后端依赖..."
|
||||||
|
|
||||||
|
cd "${PROJECT_DIR}/backend"
|
||||||
|
|
||||||
|
# 使用国内镜像加速(如果之前选择了)
|
||||||
|
if command -v npm &> /dev/null; then
|
||||||
|
current_registry=$(npm config get registry)
|
||||||
|
if [[ "$current_registry" =~ "npmmirror" ]] || [[ "$current_registry" =~ "taobao" ]]; then
|
||||||
|
print_info "检测到使用国内镜像源"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 清理旧的node_modules
|
||||||
|
if [[ -d "node_modules" ]]; then
|
||||||
|
print_info "清理旧依赖..."
|
||||||
|
rm -rf node_modules package-lock.json
|
||||||
|
fi
|
||||||
|
|
||||||
|
npm install --production
|
||||||
|
|
||||||
|
print_success "依赖更新完成"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
update_restart_services() {
|
||||||
|
print_step "重启服务..."
|
||||||
|
|
||||||
|
cd "${PROJECT_DIR}/backend"
|
||||||
|
|
||||||
|
if command -v pm2 &> /dev/null; then
|
||||||
|
pm2 restart ${PROJECT_NAME}-backend
|
||||||
|
pm2 save
|
||||||
|
print_success "后端服务已重启"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 重载Nginx
|
||||||
|
if systemctl is-active --quiet nginx; then
|
||||||
|
systemctl reload nginx
|
||||||
|
print_success "Nginx已重载"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
update_check_version() {
|
||||||
|
print_step "检查更新后的版本..."
|
||||||
|
|
||||||
|
# 检查package.json版本
|
||||||
|
if [[ -f "${PROJECT_DIR}/backend/package.json" ]]; then
|
||||||
|
VERSION=$(grep '"version"' "${PROJECT_DIR}/backend/package.json" | head -1 | awk -F'"' '{print $4}')
|
||||||
|
if [[ -n "$VERSION" ]]; then
|
||||||
|
print_success "当前版本: v$VERSION"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
print_update_completion() {
|
||||||
|
clear
|
||||||
|
echo -e "${GREEN}"
|
||||||
|
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "║ 🎉 更新成功! ║"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||||||
|
echo -e "${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${CYAN}更新内容:${NC}"
|
||||||
|
echo " ✓ 代码已更新到最新版本"
|
||||||
|
echo " ✓ 依赖已更新"
|
||||||
|
echo " ✓ 服务已重启"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${CYAN}保留的数据:${NC}"
|
||||||
|
echo " ✓ 数据库(用户、分享链接等)"
|
||||||
|
echo " ✓ 用户文件(storage目录)"
|
||||||
|
echo " ✓ 配置文件(.env)"
|
||||||
|
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 ""
|
||||||
|
}
|
||||||
|
|
||||||
|
update_main() {
|
||||||
|
# 检查root权限
|
||||||
|
check_root
|
||||||
|
|
||||||
|
# 确认更新
|
||||||
|
confirm_update
|
||||||
|
|
||||||
|
# 检查项目
|
||||||
|
update_check_project
|
||||||
|
|
||||||
|
# 备份重要文件
|
||||||
|
update_backup_important_files
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
update_stop_services
|
||||||
|
|
||||||
|
# 拉取最新代码
|
||||||
|
update_pull_latest_code
|
||||||
|
|
||||||
|
# 更新依赖
|
||||||
|
update_install_dependencies
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
update_restart_services
|
||||||
|
|
||||||
|
# 健康检查
|
||||||
|
if ! health_check; then
|
||||||
|
print_error "健康检查未通过,请检查日志"
|
||||||
|
print_info "查看日志: pm2 logs ${PROJECT_NAME}-backend"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查版本
|
||||||
|
update_check_version
|
||||||
|
|
||||||
|
# 完成提示
|
||||||
|
print_update_completion
|
||||||
|
}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# 主流程
|
# 主流程
|
||||||
################################################################################
|
################################################################################
|
||||||
@@ -1720,11 +2003,12 @@ main() {
|
|||||||
print_step "请选择操作模式"
|
print_step "请选择操作模式"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${GREEN}[1]${NC} 安装/部署 玩玩云"
|
echo -e "${GREEN}[1]${NC} 安装/部署 玩玩云"
|
||||||
echo -e "${RED}[2]${NC} 卸载 玩玩云"
|
echo -e "${BLUE}[2]${NC} 更新/升级 玩玩云"
|
||||||
|
echo -e "${RED}[3]${NC} 卸载 玩玩云"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
read -p "请输入选项 [1-2]: " mode_choice < /dev/tty
|
read -p "请输入选项 [1-3]: " mode_choice < /dev/tty
|
||||||
case $mode_choice in
|
case $mode_choice in
|
||||||
1)
|
1)
|
||||||
print_success "已选择: 安装模式"
|
print_success "已选择: 安装模式"
|
||||||
@@ -1732,6 +2016,12 @@ main() {
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
|
print_info "切换到更新模式..."
|
||||||
|
echo ""
|
||||||
|
update_main
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
3)
|
||||||
print_info "切换到卸载模式..."
|
print_info "切换到卸载模式..."
|
||||||
echo ""
|
echo ""
|
||||||
uninstall_main
|
uninstall_main
|
||||||
@@ -1746,11 +2036,12 @@ main() {
|
|||||||
# 管道执行时的提示
|
# 管道执行时的提示
|
||||||
print_info "检测到通过管道执行脚本"
|
print_info "检测到通过管道执行脚本"
|
||||||
print_info "默认进入安装模式"
|
print_info "默认进入安装模式"
|
||||||
print_warning "如需卸载,请下载脚本后运行: bash install.sh --uninstall"
|
print_warning "如需其他操作,请下载脚本后运行"
|
||||||
echo ""
|
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 --uninstall"
|
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 --uninstall"
|
||||||
echo ""
|
echo ""
|
||||||
sleep 2
|
sleep 2
|
||||||
fi
|
fi
|
||||||
@@ -1843,6 +2134,8 @@ uninstall_main() {
|
|||||||
# 执行主流程
|
# 执行主流程
|
||||||
if [[ "$MODE" == "uninstall" ]]; then
|
if [[ "$MODE" == "uninstall" ]]; then
|
||||||
uninstall_main
|
uninstall_main
|
||||||
|
elif [[ "$MODE" == "update" ]]; then
|
||||||
|
update_main
|
||||||
else
|
else
|
||||||
main
|
main
|
||||||
fi
|
fi
|
||||||
|
|||||||
20
一键部署命令.txt
20
一键部署命令.txt
@@ -17,6 +17,18 @@ curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.
|
|||||||
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash
|
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash
|
||||||
|
|
||||||
|
|
||||||
|
🔄 一键更新命令(在服务器上执行):
|
||||||
|
|
||||||
|
方式1 (推荐):
|
||||||
|
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||||
|
|
||||||
|
方式2:
|
||||||
|
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||||
|
|
||||||
|
方式3 (如果已下载脚本):
|
||||||
|
bash install.sh --update
|
||||||
|
|
||||||
|
|
||||||
🗑️ 一键卸载命令(在服务器上执行):
|
🗑️ 一键卸载命令(在服务器上执行):
|
||||||
|
|
||||||
方式1:
|
方式1:
|
||||||
@@ -29,6 +41,14 @@ wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.s
|
|||||||
bash install.sh --uninstall
|
bash install.sh --uninstall
|
||||||
|
|
||||||
|
|
||||||
|
✅ v1.2.0 更新说明:
|
||||||
|
- 🎉【新功能】一键更新功能
|
||||||
|
- 自动从Gitee拉取最新代码
|
||||||
|
- 智能备份数据库和用户文件
|
||||||
|
- 自动更新依赖并重启服务
|
||||||
|
- 保留所有用户数据和配置
|
||||||
|
- 支持命令行和交互式菜单两种方式
|
||||||
|
|
||||||
✅ v1.1.6 更新说明:
|
✅ v1.1.6 更新说明:
|
||||||
- 🔥【严重】修复管理员账号密码设置无效的问题
|
- 🔥【严重】修复管理员账号密码设置无效的问题
|
||||||
- 安装时设置的管理员账号密码现在会正确生效
|
- 安装时设置的管理员账号密码现在会正确生效
|
||||||
|
|||||||
Reference in New Issue
Block a user