1 line
21 KiB
JSON
1 line
21 KiB
JSON
{"repo": "camel-ai/aiops", "files": {"docker-compose.yml": {"3de7cf60f2706082335c15a96c2ff23b84dbd3ba": {"t": 1785745233.591315, "n": 1835, "h": "1b5fc793c367b57d", "c": "version: '3.8'\r\n\r\nservices:\r\n mcdp-frontend:\r\n build:\r\n context: .\r\n dockerfile: docker/frontend/Dockerfile\r\n ports:\r\n - \"80:80\"\r\n depends_on:\r\n - mcdp-backend\r\n networks:\r\n - mcdp-network\r\n\r\n mcdp-backend:\r\n build:\r\n context: .\r\n dockerfile: docker/backend/Dockerfile\r\n ports:\r\n - \"5000:5000\"\r\n environment:\r\n - DB_HOST=mcdp-database\r\n - DB_PORT=3306\r\n - DB_NAME=mcdp\r\n - DB_USER=root\r\n - DB_PASSWORD=${DB_PASSWORD:-default_password}\r\n - AI_MODEL_PROVIDER=${AI_MODEL_PROVIDER:-openai}\r\n - OPENAI_API_KEY=${OPENAI_API_KEY}\r\n - OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL:-https://api.openai.com/v1}\r\n - OPENAI_API_MODEL=${OPENAI_API_MODEL:-gpt-4o}\r\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}\r\n - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}\r\n - ANTHROPIC_API_BASE_URL=${ANTHROPIC_API_BASE_URL:-https://api.anthropic.com/v1}\r\n - ANTHROPIC_API_MODEL=${ANTHROPIC_API_MODEL:-claude-3-5-sonnet-20241022}\r\n - JWT_SECRET=${JWT_SECRET:-default_jwt_secret}\r\n - SECRET_KEY=${SECRET_KEY:-default_secret_key}\r\n - DEBUG=False\r\n depends_on:\r\n - mcdp-database\r\n volumes:\r\n - backend_uploads:/app/upload\r\n - backend_static:/app/static\r\n networks:\r\n - mcdp-network\r\n\r\n mcdp-database:\r\n image: mysql:8.0\r\n environment:\r\n - MYSQL_ROOT_PASSWORD=${DB_PASSWORD:-default_password}\r\n - MYSQL_DATABASE=mcdp\r\n volumes:\r\n - mysql_data:/var/lib/mysql\r\n - ./docker/mysql/01-schema.sql:/docker-entrypoint-initdb.d/01-schema.sql\r\n - ./docker/mysql/my.cnf:/etc/mysql/conf.d/custom.cnf\r\n ports:\r\n - \"3306:3306\"\r\n networks:\r\n - mcdp-network\r\n\r\nvolumes:\r\n mysql_data:\r\n backend_uploads:\r\n backend_static:\r\n\r\nnetworks:\r\n mcdp-network:\r\n driver: bridge "}, "083ae87d002ae4aa2e8a205e312de375e9300414": {"t": 1785749046.6511233, "n": 1835, "h": "1b5fc793c367b57d", "c": "version: '3.8'\r\n\r\nservices:\r\n mcdp-frontend:\r\n build:\r\n context: .\r\n dockerfile: docker/frontend/Dockerfile\r\n ports:\r\n - \"80:80\"\r\n depends_on:\r\n - mcdp-backend\r\n networks:\r\n - mcdp-network\r\n\r\n mcdp-backend:\r\n build:\r\n context: .\r\n dockerfile: docker/backend/Dockerfile\r\n ports:\r\n - \"5000:5000\"\r\n environment:\r\n - DB_HOST=mcdp-database\r\n - DB_PORT=3306\r\n - DB_NAME=mcdp\r\n - DB_USER=root\r\n - DB_PASSWORD=${DB_PASSWORD:-default_password}\r\n - AI_MODEL_PROVIDER=${AI_MODEL_PROVIDER:-openai}\r\n - OPENAI_API_KEY=${OPENAI_API_KEY}\r\n - OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL:-https://api.openai.com/v1}\r\n - OPENAI_API_MODEL=${OPENAI_API_MODEL:-gpt-4o}\r\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}\r\n - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}\r\n - ANTHROPIC_API_BASE_URL=${ANTHROPIC_API_BASE_URL:-https://api.anthropic.com/v1}\r\n - ANTHROPIC_API_MODEL=${ANTHROPIC_API_MODEL:-claude-3-5-sonnet-20241022}\r\n - JWT_SECRET=${JWT_SECRET:-default_jwt_secret}\r\n - SECRET_KEY=${SECRET_KEY:-default_secret_key}\r\n - DEBUG=False\r\n depends_on:\r\n - mcdp-database\r\n volumes:\r\n - backend_uploads:/app/upload\r\n - backend_static:/app/static\r\n networks:\r\n - mcdp-network\r\n\r\n mcdp-database:\r\n image: mysql:8.0\r\n environment:\r\n - MYSQL_ROOT_PASSWORD=${DB_PASSWORD:-default_password}\r\n - MYSQL_DATABASE=mcdp\r\n volumes:\r\n - mysql_data:/var/lib/mysql\r\n - ./docker/mysql/01-schema.sql:/docker-entrypoint-initdb.d/01-schema.sql\r\n - ./docker/mysql/my.cnf:/etc/mysql/conf.d/custom.cnf\r\n ports:\r\n - \"3306:3306\"\r\n networks:\r\n - mcdp-network\r\n\r\nvolumes:\r\n mysql_data:\r\n backend_uploads:\r\n backend_static:\r\n\r\nnetworks:\r\n mcdp-network:\r\n driver: bridge "}}, "deploy.sh": {"3de7cf60f2706082335c15a96c2ff23b84dbd3ba": {"t": 1785745941.9524827, "n": 6371, "h": "f7f1228cd8a70d4b", "c": "#!/bin/bash\n\n# MCDP多云运维管理平台 - 一键部署脚本\n# 适用于已有Docker环境的服务器\n\nset -e # 遇到错误立即退出\n\n# 自动修复脚本权限(如果在Linux/Unix环境)\nif [[ \"$OSTYPE\" == \"linux-gnu\"* ]] || [[ \"$OSTYPE\" == \"darwin\"* ]]; then\n # 检查并修复当前脚本权限\n if [ ! -x \"$0\" ]; then\n echo \"🔧 正在修复脚本执行权限...\"\n chmod +x \"$0\" 2>/dev/null || true\n fi\n \n # 检查并修复其他脚本权限\n for script in \"deploy.sh\" \"build-and-push.sh\"; do\n if [ -f \"$script\" ] && [ ! -x \"$script\" ]; then\n echo \"🔧 正在修复 $script 执行权限...\"\n chmod +x \"$script\" 2>/dev/null || true\n fi\n done\nfi\n\n# 颜色输出\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # No Color\n\nprint_message() {\n echo -e \"${GREEN}[INFO]${NC} $1\"\n}\n\nprint_warning() {\n echo -e \"${YELLOW}[WARNING]${NC} $1\"\n}\n\nprint_error() {\n echo -e \"${RED}[ERROR]${NC} $1\"\n}\n\nprint_header() {\n echo -e \"${BLUE}================================================${NC}\"\n echo -e \"${BLUE} $1${NC}\"\n echo -e \"${BLUE}================================================${NC}\"\n}\n\n# 显示欢迎信息\nprint_header \"🚀 MCDP 多云运维管理平台 - 一键部署\"\n\n# 检查Docker环境\nprint_message \"检查系统环境...\"\n\nif ! command -v docker &> /dev/null; then\n print_error \"Docker 未安装,请先安装 Docker\"\n echo \"安装命令: curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh\"\n exit 1\nfi\n\nif ! command -v docker-compose &> /dev/null; then\n print_error \"Docker Compose 未安装,请先安装 Docker Compose\"\n echo \"安装命令: curl -L \\\"https://github.com/docker/compose/releases/latest/download/docker-compose-\\$(uname -s)-\\$(uname -m)\\\" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose\"\n exit 1\nfi\n\nif ! docker info >/dev/null 2>&1; then\n print_error \"Docker 服务未运行或无权限访问\"\n print_message \"请运行: sudo systemctl start docker\"\n print_message \"或将当前用户添加到docker组: sudo usermod -aG docker \\$USER\"\n exit 1\nfi\n\nprint_message \"✅ Docker 环境检查通过\"\n\n# 检查环境变量文件\nif [ ! -f .env ]; then\n if [ -f env.example ]; then\n print_warning \".env 文件不存在,正在从 env.example 创建...\"\n # 复制文件并转换换行符(去除Windows的\\r字符)\n if command -v dos2unix >/dev/null 2>&1; then\n cp env.example .env && dos2unix .env >/dev/null 2>&1\n else\n # 如果没有dos2unix,使用tr命令去除\\r字符\n tr -d '\\r' < env.example > .env\n fi\n print_error \"请先编辑 .env 文件,填入您的 API 密钥和配置\"\n print_message \"编辑命令: nano .env 或 vim .env\"\n print_message \"必须配置的项目:\"\n echo \" - DB_PASSWORD (数据库密码)\"\n echo \" - JWT_SECRET (JWT密钥)\"\n echo \" - SECRET_KEY (应用密钥)\"\n echo \" - OPENAI_API_KEY (OpenAI API密钥)\"\n echo \" - DEEPSEEK_API_KEY (DeepSeek API密钥)\"\n echo \" - ANTHROPIC_API_KEY (Anthropic API密钥)\"\n echo \" - REGISTRY_USERNAME (Docker用户名)\"\n exit 1\n else\n print_error \".env 和 env.example 文件都不存在\"\n exit 1\n fi\nfi\n\n# 加载环境变量(先确保换行符格式正确)\nif [ -f .env ]; then\n # 检查是否包含Windows换行符\n if grep -q $'\\r' .env 2>/dev/null; then\n print_warning \"检测到 .env 文件包含Windows换行符,正在修复...\"\n if command -v dos2unix >/dev/null 2>&1; then\n dos2unix .env >/dev/null 2>&1\n else\n # 使用tr命令去除\\r字符\n tr -d '\\r' < .env > .env.tmp && mv .env.tmp .env\n fi\n print_message \"✅ 换行符修复完成\"\n fi\n source .env\nelse\n print_error \".env 文件不存在\"\n exit 1\nfi\n\n# 验证必要的环境变量\nprint_message \"验证环境变量配置...\"\n\nrequired_vars=(\"DB_PASSWORD\" \"JWT_SECRET\" \"SECRET_KEY\" \"REGISTRY_USERNAME\")\nmissing_vars=()\n\nfor var in \"${required_vars[@]}\"; do\n if [ -z \"${!var}\" ]; then\n missing_vars+=($var)\n fi\ndone\n\nif [ ${#missing_vars[@]} -ne 0 ]; then\n print_error \"以下环境变量未设置:\"\n for var in \"${missing_vars[@]}\"; do\n echo \" - $var\"\n done\n print_message \"请编辑 .env 文件并设置这些变量\"\n exit 1\nfi\n\n# 检查API密钥\napi_keys=(\"OPENAI_API_KEY\" \"DEEPSEEK_API_KEY\" \"ANTHROPIC_API_KEY\")\nhas_api_key=false\n\nfor key in \"${api_keys[@]}\"; do\n if [ ! -z \"${!key}\" ] && [ \"${!key}\" != \"your_${key,,}_here\" ]; then\n has_api_key=true\n break\n fi\ndone\n\nif [ \"$has_api_key\" = false ]; then\n print_warning \"⚠️ 未检测到有效的 AI API 密钥\"\n print_message \"至少需要配置一个AI服务的API密钥,否则AI功能将无法使用\"\n read -p \"是否继续部署? (y/N): \" -n 1 -r\n echo\n if [[ ! $REPLY =~ ^[Yy]$ ]]; then\n exit 1\n fi\nfi\n\nprint_message \"✅ 环境变量验证通过\"\n\n# 设置镜像标签\nIMAGE_TAG=${IMAGE_TAG:-latest}\nprint_message \"使用镜像版本: $IMAGE_TAG\"\n\n# 停止现有容器\nprint_header \"第1步: 停止现有容器\"\nif docker-compose -f docker-compose.prod.yml ps -q | grep -q .; then\n print_message \"停止现有容器...\"\n docker-compose -f docker-compose.prod.yml down\nelse\n print_message \"未检测到运行中的容器\"\nfi\n\n# 拉取最新镜像\nprint_header \"第2步: 拉取镜像\"\nprint_message \"正在拉取最新镜像...\"\nprint_message \"前端镜像: $REGISTRY_USERNAME/mcdp-frontend:$IMAGE_TAG\"\nprint_message \"后端镜像: $REGISTRY_USERNAME/mcdp-backend:$IMAGE_TAG\"\n\nexport REGISTRY_USERNAME=$REGISTRY_USERNAME\nexport IMAGE_TAG=$IMAGE_TAG\n\ndocker-compose -f docker-compose.prod.yml pull\n\n# 启动服务\nprint_header \"第3步: 启动服务\"\nprint_message \"启动所有服务...\"\ndocker-compose -f docker-compose.prod.yml up -d\n\n# 等待服务启动\nprint_header \"第4步: 等待服务启动\"\nprint_message \"等待服务完全启动...\"\n\n# 等待数据库初始化\nprint_message \"等待数据库初始化...\"\nsleep 30\n\n# 检查服务状态\nfor i in {1..12}; do\n if docker-compose -f docker-compose.prod.yml ps | grep -q \"Up\"; then\n break\n fi\n print_message \"等待服务启动... ($i/12)\"\n sleep 10\ndone\n\n# 显示服务状态\nprint_header \"第5步: 服务状态检查\"\ndocker-compose -f docker-compose.prod.yml ps\n\n# 健康检查\nprint_message \"进行健康检查...\"\n\n# 检查后端健康状态\nif curl -f http://localhost:5000/api/health >/dev/null 2>&1; then\n print_message \"✅ 后端服务健康检查通过\"\nelse\n print_warning \"⚠️ 后端服务可能还在启动中\"\nfi\n\n# 获取服务器IP\nSERVER_IP=$(hostname -I | awk '{print $1}')\n\n# 完成提示\nprint_header \"🎉 部署完成!\"\n\necho \"\"\nprint_message \"服务访问地址:\"\necho \" 🌐 前端访问: http://$SERVER_IP\"\necho \" 🔧 后端API: http://$SERVER_IP:5000\"\necho \"\"\nprint_message \"服务管理命令:\"\necho \" 📊 查看状态: docker-compose -f docker-compose.prod.yml ps\"\necho \" 📋 查看日志: docker-compose -f docker-compose.prod.yml logs -f\"\necho \" 🛑 停止服务: docker-compose -f docker-compose.prod.yml down\"\necho \" 🔄 重启服务: docker-compose -f docker-compose.prod.yml restart\"\necho \"\"\nprint_message \"数据备份:\"\necho \" 💾 数据库备份: docker exec mcdp_mcdp-database_1 mysqldump -u root -p\\$DB_PASSWORD mcdp > backup.sql\"\necho \"\"\n\nprint_message \"🎯 MCDP 多云运维管理平台部署成功!\"\nprint_message \"请访问 http://$SERVER_IP 开始使用平台\"\n\n# 显示日志\nprint_message \"显示最近的日志 (按 Ctrl+C 退出):\"\nsleep 3\ndocker-compose -f docker-compose.prod.yml logs -f --tail=50 "}, "083ae87d002ae4aa2e8a205e312de375e9300414": {"t": 1785749045.4509823, "n": 6371, "h": "f7f1228cd8a70d4b", "c": "#!/bin/bash\n\n# MCDP多云运维管理平台 - 一键部署脚本\n# 适用于已有Docker环境的服务器\n\nset -e # 遇到错误立即退出\n\n# 自动修复脚本权限(如果在Linux/Unix环境)\nif [[ \"$OSTYPE\" == \"linux-gnu\"* ]] || [[ \"$OSTYPE\" == \"darwin\"* ]]; then\n # 检查并修复当前脚本权限\n if [ ! -x \"$0\" ]; then\n echo \"🔧 正在修复脚本执行权限...\"\n chmod +x \"$0\" 2>/dev/null || true\n fi\n \n # 检查并修复其他脚本权限\n for script in \"deploy.sh\" \"build-and-push.sh\"; do\n if [ -f \"$script\" ] && [ ! -x \"$script\" ]; then\n echo \"🔧 正在修复 $script 执行权限...\"\n chmod +x \"$script\" 2>/dev/null || true\n fi\n done\nfi\n\n# 颜色输出\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # No Color\n\nprint_message() {\n echo -e \"${GREEN}[INFO]${NC} $1\"\n}\n\nprint_warning() {\n echo -e \"${YELLOW}[WARNING]${NC} $1\"\n}\n\nprint_error() {\n echo -e \"${RED}[ERROR]${NC} $1\"\n}\n\nprint_header() {\n echo -e \"${BLUE}================================================${NC}\"\n echo -e \"${BLUE} $1${NC}\"\n echo -e \"${BLUE}================================================${NC}\"\n}\n\n# 显示欢迎信息\nprint_header \"🚀 MCDP 多云运维管理平台 - 一键部署\"\n\n# 检查Docker环境\nprint_message \"检查系统环境...\"\n\nif ! command -v docker &> /dev/null; then\n print_error \"Docker 未安装,请先安装 Docker\"\n echo \"安装命令: curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh\"\n exit 1\nfi\n\nif ! command -v docker-compose &> /dev/null; then\n print_error \"Docker Compose 未安装,请先安装 Docker Compose\"\n echo \"安装命令: curl -L \\\"https://github.com/docker/compose/releases/latest/download/docker-compose-\\$(uname -s)-\\$(uname -m)\\\" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose\"\n exit 1\nfi\n\nif ! docker info >/dev/null 2>&1; then\n print_error \"Docker 服务未运行或无权限访问\"\n print_message \"请运行: sudo systemctl start docker\"\n print_message \"或将当前用户添加到docker组: sudo usermod -aG docker \\$USER\"\n exit 1\nfi\n\nprint_message \"✅ Docker 环境检查通过\"\n\n# 检查环境变量文件\nif [ ! -f .env ]; then\n if [ -f env.example ]; then\n print_warning \".env 文件不存在,正在从 env.example 创建...\"\n # 复制文件并转换换行符(去除Windows的\\r字符)\n if command -v dos2unix >/dev/null 2>&1; then\n cp env.example .env && dos2unix .env >/dev/null 2>&1\n else\n # 如果没有dos2unix,使用tr命令去除\\r字符\n tr -d '\\r' < env.example > .env\n fi\n print_error \"请先编辑 .env 文件,填入您的 API 密钥和配置\"\n print_message \"编辑命令: nano .env 或 vim .env\"\n print_message \"必须配置的项目:\"\n echo \" - DB_PASSWORD (数据库密码)\"\n echo \" - JWT_SECRET (JWT密钥)\"\n echo \" - SECRET_KEY (应用密钥)\"\n echo \" - OPENAI_API_KEY (OpenAI API密钥)\"\n echo \" - DEEPSEEK_API_KEY (DeepSeek API密钥)\"\n echo \" - ANTHROPIC_API_KEY (Anthropic API密钥)\"\n echo \" - REGISTRY_USERNAME (Docker用户名)\"\n exit 1\n else\n print_error \".env 和 env.example 文件都不存在\"\n exit 1\n fi\nfi\n\n# 加载环境变量(先确保换行符格式正确)\nif [ -f .env ]; then\n # 检查是否包含Windows换行符\n if grep -q $'\\r' .env 2>/dev/null; then\n print_warning \"检测到 .env 文件包含Windows换行符,正在修复...\"\n if command -v dos2unix >/dev/null 2>&1; then\n dos2unix .env >/dev/null 2>&1\n else\n # 使用tr命令去除\\r字符\n tr -d '\\r' < .env > .env.tmp && mv .env.tmp .env\n fi\n print_message \"✅ 换行符修复完成\"\n fi\n source .env\nelse\n print_error \".env 文件不存在\"\n exit 1\nfi\n\n# 验证必要的环境变量\nprint_message \"验证环境变量配置...\"\n\nrequired_vars=(\"DB_PASSWORD\" \"JWT_SECRET\" \"SECRET_KEY\" \"REGISTRY_USERNAME\")\nmissing_vars=()\n\nfor var in \"${required_vars[@]}\"; do\n if [ -z \"${!var}\" ]; then\n missing_vars+=($var)\n fi\ndone\n\nif [ ${#missing_vars[@]} -ne 0 ]; then\n print_error \"以下环境变量未设置:\"\n for var in \"${missing_vars[@]}\"; do\n echo \" - $var\"\n done\n print_message \"请编辑 .env 文件并设置这些变量\"\n exit 1\nfi\n\n# 检查API密钥\napi_keys=(\"OPENAI_API_KEY\" \"DEEPSEEK_API_KEY\" \"ANTHROPIC_API_KEY\")\nhas_api_key=false\n\nfor key in \"${api_keys[@]}\"; do\n if [ ! -z \"${!key}\" ] && [ \"${!key}\" != \"your_${key,,}_here\" ]; then\n has_api_key=true\n break\n fi\ndone\n\nif [ \"$has_api_key\" = false ]; then\n print_warning \"⚠️ 未检测到有效的 AI API 密钥\"\n print_message \"至少需要配置一个AI服务的API密钥,否则AI功能将无法使用\"\n read -p \"是否继续部署? (y/N): \" -n 1 -r\n echo\n if [[ ! $REPLY =~ ^[Yy]$ ]]; then\n exit 1\n fi\nfi\n\nprint_message \"✅ 环境变量验证通过\"\n\n# 设置镜像标签\nIMAGE_TAG=${IMAGE_TAG:-latest}\nprint_message \"使用镜像版本: $IMAGE_TAG\"\n\n# 停止现有容器\nprint_header \"第1步: 停止现有容器\"\nif docker-compose -f docker-compose.prod.yml ps -q | grep -q .; then\n print_message \"停止现有容器...\"\n docker-compose -f docker-compose.prod.yml down\nelse\n print_message \"未检测到运行中的容器\"\nfi\n\n# 拉取最新镜像\nprint_header \"第2步: 拉取镜像\"\nprint_message \"正在拉取最新镜像...\"\nprint_message \"前端镜像: $REGISTRY_USERNAME/mcdp-frontend:$IMAGE_TAG\"\nprint_message \"后端镜像: $REGISTRY_USERNAME/mcdp-backend:$IMAGE_TAG\"\n\nexport REGISTRY_USERNAME=$REGISTRY_USERNAME\nexport IMAGE_TAG=$IMAGE_TAG\n\ndocker-compose -f docker-compose.prod.yml pull\n\n# 启动服务\nprint_header \"第3步: 启动服务\"\nprint_message \"启动所有服务...\"\ndocker-compose -f docker-compose.prod.yml up -d\n\n# 等待服务启动\nprint_header \"第4步: 等待服务启动\"\nprint_message \"等待服务完全启动...\"\n\n# 等待数据库初始化\nprint_message \"等待数据库初始化...\"\nsleep 30\n\n# 检查服务状态\nfor i in {1..12}; do\n if docker-compose -f docker-compose.prod.yml ps | grep -q \"Up\"; then\n break\n fi\n print_message \"等待服务启动... ($i/12)\"\n sleep 10\ndone\n\n# 显示服务状态\nprint_header \"第5步: 服务状态检查\"\ndocker-compose -f docker-compose.prod.yml ps\n\n# 健康检查\nprint_message \"进行健康检查...\"\n\n# 检查后端健康状态\nif curl -f http://localhost:5000/api/health >/dev/null 2>&1; then\n print_message \"✅ 后端服务健康检查通过\"\nelse\n print_warning \"⚠️ 后端服务可能还在启动中\"\nfi\n\n# 获取服务器IP\nSERVER_IP=$(hostname -I | awk '{print $1}')\n\n# 完成提示\nprint_header \"🎉 部署完成!\"\n\necho \"\"\nprint_message \"服务访问地址:\"\necho \" 🌐 前端访问: http://$SERVER_IP\"\necho \" 🔧 后端API: http://$SERVER_IP:5000\"\necho \"\"\nprint_message \"服务管理命令:\"\necho \" 📊 查看状态: docker-compose -f docker-compose.prod.yml ps\"\necho \" 📋 查看日志: docker-compose -f docker-compose.prod.yml logs -f\"\necho \" 🛑 停止服务: docker-compose -f docker-compose.prod.yml down\"\necho \" 🔄 重启服务: docker-compose -f docker-compose.prod.yml restart\"\necho \"\"\nprint_message \"数据备份:\"\necho \" 💾 数据库备份: docker exec mcdp_mcdp-database_1 mysqldump -u root -p\\$DB_PASSWORD mcdp > backup.sql\"\necho \"\"\n\nprint_message \"🎯 MCDP 多云运维管理平台部署成功!\"\nprint_message \"请访问 http://$SERVER_IP 开始使用平台\"\n\n# 显示日志\nprint_message \"显示最近的日志 (按 Ctrl+C 退出):\"\nsleep 3\ndocker-compose -f docker-compose.prod.yml logs -f --tail=50 "}}}} |