#!/bin/bash # ============================================ # FLNXI素材库 - 完全卸载脚本 # 用于测试环境多次卸载重装 # ============================================ set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo "========================================" echo " FLNXI素材库 - 完全卸载" echo "========================================" echo "" echo -e "${RED}警告: 此操作将删除所有容器、数据卷和配置文件!${NC}" echo "" # 确认操作 read -p "确定要完全卸载吗? (y/yes): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy]([Ee][Ss])?$ ]]; then echo "已取消卸载" exit 0 fi # 检查 Docker 权限(自动处理) USE_SUDO="" if ! docker ps &> /dev/null; then if command -v sudo &> /dev/null; then USE_SUDO="sudo" fi fi # 检测 docker-compose 命令 if [ -n "$USE_SUDO" ]; then if sudo docker compose version &> /dev/null; then DOCKER_COMPOSE="sudo docker compose" else DOCKER_COMPOSE="sudo docker-compose" fi else if docker compose version &> /dev/null; then DOCKER_COMPOSE="docker compose" else DOCKER_COMPOSE="docker-compose" fi fi # 检查是否存在 docker-compose.prod.yml if [ ! -f "docker-compose.prod.yml" ]; then echo -e "${YELLOW}警告: 未找到 docker-compose.prod.yml,尝试使用默认配置${NC}" fi # 停止并删除容器 echo "" echo -e "${BLUE}[1/5]${NC} 停止并删除容器..." if [ -f "docker-compose.prod.yml" ]; then $DOCKER_COMPOSE -f docker-compose.prod.yml down -v 2>/dev/null || true else # 尝试删除可能的容器名称 docker stop flnxi-material flnxi-postgres flnxi-minio flnxi-minio-init 2>/dev/null || true docker rm flnxi-material flnxi-postgres flnxi-minio flnxi-minio-init 2>/dev/null || true fi echo -e "${GREEN}✓ 容器已删除${NC}" # 删除数据卷 echo "" echo -e "${BLUE}[2/5]${NC} 删除数据卷..." if [ -n "$USE_SUDO" ]; then sudo docker volume rm flnxi_postgres_data 2>/dev/null || true sudo docker volume rm flnxi_minio_data 2>/dev/null || true sudo docker volume ls | grep -E "flnxi|flnxi-material" | awk '{print $2}' | xargs -r sudo docker volume rm 2>/dev/null || true else docker volume rm flnxi_postgres_data 2>/dev/null || true docker volume rm flnxi_minio_data 2>/dev/null || true docker volume ls | grep -E "flnxi|flnxi-material" | awk '{print $2}' | xargs -r docker volume rm 2>/dev/null || true fi echo -e "${GREEN}✓ 数据卷已删除${NC}" # 删除网络 echo "" echo -e "${BLUE}[3/5]${NC} 删除网络..." if [ -n "$USE_SUDO" ]; then sudo docker network rm flnxi_app-network 2>/dev/null || true sudo docker network ls | grep -E "flnxi|flnxi-material" | awk '{print $1}' | xargs -r sudo docker network rm 2>/dev/null || true else docker network rm flnxi_app-network 2>/dev/null || true docker network ls | grep -E "flnxi|flnxi-material" | awk '{print $1}' | xargs -r docker network rm 2>/dev/null || true fi echo -e "${GREEN}✓ 网络已删除${NC}" # 删除配置文件(可选) echo "" echo -e "${BLUE}[4/5]${NC} 清理配置文件..." read -p "是否删除 .env.production 配置文件? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then rm -f .env.production echo -e "${GREEN}✓ 配置文件已删除${NC}" else echo -e "${YELLOW}保留配置文件${NC}" fi # 清理 Docker 资源(可选) echo "" echo -e "${BLUE}[5/5]${NC} 清理 Docker 资源..." read -p "是否清理未使用的 Docker 镜像和缓存? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then if [ -n "$USE_SUDO" ]; then sudo docker system prune -f else docker system prune -f fi echo -e "${GREEN}✓ Docker 资源已清理${NC}" else echo -e "${YELLOW}跳过 Docker 资源清理${NC}" fi # 完成 echo "" echo "========================================" echo -e "${GREEN} 卸载完成!${NC}" echo "========================================" echo "" echo "所有容器、数据卷和网络已删除" echo "可以重新运行 ./install.sh 进行全新安装" echo ""