Add uninstall.sh for one-click removal

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-27 11:13:30 +08:00
parent a409f35e6c
commit a9e1555fe1
4 changed files with 120 additions and 5 deletions
+23 -5
View File
@@ -254,11 +254,29 @@ docker compose up -d
--- ---
## 九、卸载 ## 九、一键卸载
```bash ```bash
cd /opt/cloud-browser bash /opt/cloud-browser/uninstall.sh
docker compose down ```
cd /
rm -rf /opt/cloud-browser 按提示输入 `yes` 确认。将自动:
1. 停止并删除 Docker 容器
2. 删除本地构建的镜像
3. 删除 `/opt/cloud-browser` 目录(含账号数据)
跳过确认直接删除:
```bash
bash /opt/cloud-browser/uninstall.sh -y
```
若目录已被删,可从仓库单独下载脚本执行(需指定安装路径时手动删除 `/opt/cloud-browser`)。
重新安装:
```bash
git clone https://git.bz121.com/dekun/cloud-browser.git /opt/cloud-browser
bash /opt/cloud-browser/deploy.sh
``` ```
+2
View File
@@ -38,6 +38,7 @@ cloud-browser/
├── app/ # 后端(FastAPI + Playwright ├── app/ # 后端(FastAPI + Playwright
├── static/ # 前端页面 ├── static/ # 前端页面
├── deploy.sh # 一键部署脚本 ├── deploy.sh # 一键部署脚本
├── uninstall.sh # 一键卸载脚本
├── docker-compose.yml ├── docker-compose.yml
├── Dockerfile ├── Dockerfile
└── DEPLOY.md # 部署文档 └── DEPLOY.md # 部署文档
@@ -51,6 +52,7 @@ docker compose logs -f app # 查看日志
docker compose restart # 重启 docker compose restart # 重启
docker compose down # 停止 docker compose down # 停止
bash deploy.sh # 更新并重新部署 bash deploy.sh # 更新并重新部署
bash uninstall.sh # 一键卸载
``` ```
## 安全说明 ## 安全说明
+1
View File
@@ -108,6 +108,7 @@ print_summary() {
echo " 重启服务: cd ${INSTALL_DIR} && docker compose restart" echo " 重启服务: cd ${INSTALL_DIR} && docker compose restart"
echo " 停止服务: cd ${INSTALL_DIR} && docker compose down" echo " 停止服务: cd ${INSTALL_DIR} && docker compose down"
echo " 更新部署: bash ${INSTALL_DIR}/deploy.sh" echo " 更新部署: bash ${INSTALL_DIR}/deploy.sh"
echo " 一键卸载: bash ${INSTALL_DIR}/uninstall.sh"
echo "==========================================" echo "=========================================="
} }
+94
View File
@@ -0,0 +1,94 @@
#!/usr/bin/env bash
#
# 云端浏览器一键卸载脚本
# 安装路径: /opt/cloud-browser
# 运行用户: root
#
set -eu
INSTALL_DIR="/opt/cloud-browser"
FORCE=0
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
err() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
usage() {
echo "用法: bash uninstall.sh [-y]"
echo " -y 跳过确认,直接删除"
}
while getopts ":yh" opt; do
case "$opt" in
y) FORCE=1 ;;
h) usage; exit 0 ;;
*) usage; exit 1 ;;
esac
done
if [ "$(id -u)" -ne 0 ]; then
err "请使用 root 用户运行此脚本"
exit 1
fi
if [ ! -d "${INSTALL_DIR}" ]; then
warn "目录不存在: ${INSTALL_DIR},无需卸载"
exit 0
fi
echo ""
echo "即将卸载云端浏览器:"
echo " - 停止并删除 Docker 容器"
echo " - 删除本地构建的镜像"
echo " - 删除目录 ${INSTALL_DIR}(含 data 账号数据)"
echo ""
if [ "$FORCE" -ne 1 ]; then
printf "确认删除?输入 yes 继续: "
read -r confirm
if [ "$confirm" != "yes" ]; then
log "已取消"
exit 0
fi
fi
stop_containers() {
if ! command -v docker >/dev/null 2>&1; then
warn "未检测到 Docker,跳过容器停止"
return
fi
if [ ! -f "${INSTALL_DIR}/docker-compose.yml" ]; then
warn "未找到 docker-compose.yml,跳过容器停止"
return
fi
log "停止并删除容器..."
(cd "${INSTALL_DIR}" && docker compose down -v --rmi local 2>/dev/null) \
|| (cd "${INSTALL_DIR}" && docker compose down -v) \
|| warn "容器停止失败,将继续删除文件"
}
remove_directory() {
log "删除安装目录 ${INSTALL_DIR} ..."
rm -rf "${INSTALL_DIR}"
}
main() {
log "开始卸载云端浏览器..."
stop_containers
remove_directory
echo ""
echo "=========================================="
echo " 云端浏览器已卸载"
echo "=========================================="
echo " 如需重新安装:"
echo " git clone https://git.bz121.com/dekun/cloud-browser.git ${INSTALL_DIR}"
echo " bash ${INSTALL_DIR}/deploy.sh"
echo "=========================================="
}
main "$@"