134 lines
4.1 KiB
Bash
134 lines
4.1 KiB
Bash
#!/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 ""
|