CRMEB/run.sh
2026-09-23 15:15:02 +08:00

225 lines
5.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# CRMEB Docker 开发环境管理脚本
# 用法: ./run.sh [install|start|restart|stop|delete|logs|ps]
# 确保从项目根目录执行
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
print_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
print_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# 帮助信息
show_help() {
echo -e "${GREEN}CRMEB Docker 管理脚本${NC}"
echo ""
echo "用法: $0 [命令]"
echo ""
echo "命令说明:"
echo " install 清理所有数据并重新安装启动"
echo " start 启动容器"
echo " restart 重启容器"
echo " stop 停止并删除容器"
echo " delete 停止并清理所有数据"
echo " logs 查看日志"
echo " ps 查看容器状态"
echo " -h 显示帮助"
}
# 检查 docker-compose 是否可用
check_docker() {
if ! command -v docker-compose &> /dev/null; then
print_error "docker-compose 未安装,请先安装 Docker Desktop 或 docker-compose"
exit 1
fi
if [ ! -f "docker-compose.yml" ]; then
print_error "找不到 docker-compose.yml,请确保从项目根目录运行此脚本"
exit 1
fi
}
# 清理可能冲突的网络
cleanup_network() {
print_info "清理冲突网络..."
for net in $(docker network ls --format "{{.Name}}" | grep -E "(app_net|crmeb)"); do
docker network rm "$net" 2>/dev/null && echo " 已删除网络: $net"
done
docker network prune -f 2>/dev/null
}
# 清理数据文件
cleanup() {
print_info "开始清理数据..."
# 设置目录权限
chmod -R 777 ./backend/runtime 2>/dev/null
chmod -R 777 ./backend/public 2>/dev/null
chmod 777 ./backend/.env ./backend/.version ./backend/.constant 2>/dev/null
# 删除 install.lock
if [ -f "./backend/public/install.lock" ]; then
rm -f ./backend/public/install.lock
print_info "已删除 install.lock"
fi
# 清理 runtime 目录(保留目录结构)
if [ -d "./backend/runtime" ]; then
find ./backend/runtime -mindepth 1 -delete
print_info "已清理 runtime 目录"
fi
# 清理 MySQL 数据目录
if [ -d "./docker/mysql/data" ]; then
find ./docker/mysql/data -mindepth 1 -delete
print_info "已清理 MySQL 数据目录"
fi
# 清理 MySQL 日志目录
if [ -d "./docker/mysql/log" ]; then
find ./docker/mysql/log -mindepth 1 -delete
print_info "已清理 MySQL 日志目录"
fi
# 清理 Nginx 日志目录
if [ -d "./docker/nginx/log" ]; then
find ./docker/nginx/log -mindepth 1 -delete
print_info "已清理 Nginx 日志目录"
fi
print_info "清理完成"
}
# 停止并删除容器
do_stop() {
check_docker
print_info "停止并删除容器..."
docker-compose down
print_info "已停止"
}
# 启动容器
do_start() {
check_docker
cleanup_network
print_info "启动容器..."
docker-compose up -d
echo ""
docker-compose ps
echo ""
print_info "访问地址: http://localhost:8011"
}
# 安装(清理数据并启动)
do_install() {
check_docker
print_warn "此操作将清除所有数据并重新安装,请确认..."
read -p "确认执行?(y/N): " confirm
[ "$confirm" != "y" ] && [ "$confirm" != "Y" ] && echo "已取消" && exit 0
print_info "停止旧容器..."
docker-compose down 2>/dev/null
cleanup
cleanup_network
print_info "安装并启动环境..."
docker-compose up -d
echo ""
docker-compose ps
echo ""
print_info "安装完成!请访问 http://localhost:8011 进行安装向导"
}
# 重启容器
do_restart() {
check_docker
print_info "重启容器..."
docker-compose restart
print_info "重启完成"
}
# 删除容器和数据
do_delete() {
check_docker
print_warn "此操作将删除所有容器和数据,请确认..."
read -p "确认执行?(y/N): " confirm
[ "$confirm" != "y" ] && [ "$confirm" != "Y" ] && echo "已取消" && exit 0
docker-compose down 2>/dev/null
cleanup
print_info "已删除完成"
}
# 查看日志
do_logs() {
check_docker
docker-compose logs -f
}
# 查看状态
do_status() {
check_docker
docker-compose ps
}
# 交互式菜单
show_menu() {
echo ""
echo -e "${GREEN}===== CRMEB Docker 管理 =====${NC}"
echo " 1) 安装并启动"
echo " 2) 启动容器"
echo " 3) 重启容器"
echo " 4) 停止并删除容器"
echo " 5) 删除容器和数据"
echo " 6) 查看日志"
echo " 7) 查看容器状态"
echo " 8) 显示帮助"
echo " 0) 退出"
echo ""
read -p "请选择操作 (0-8): " choice
echo ""
case $choice in
1) do_install ;;
2) do_start ;;
3) do_restart ;;
4) do_stop ;;
5) do_delete ;;
6) do_logs ;;
7) do_status ;;
8) show_help; show_menu ;;
0) echo "已退出"; exit 0 ;;
*) print_error "无效选项,请重试"; show_menu ;;
esac
}
# 主逻辑
if [ $# -eq 0 ]; then
show_menu
else
case "$1" in
install) do_install ;;
start|up) do_start ;;
restart) do_restart ;;
stop|down) do_stop ;;
delete) do_delete ;;
logs) do_logs ;;
ps|status) do_status ;;
-h|--help) show_help ;;
*)
print_error "未知命令: $1"
show_help
exit 1
;;
esac
fi
exit 0