Skip to main content
Glama
deploy.sh5.83 kB
#!/bin/bash # 部署脚本 # 用于自动化部署文件夹文档生成MCP服务器 set -e # 遇到错误立即退出 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查依赖 check_dependencies() { log_info "检查依赖..." # 检查Docker if ! command -v docker &> /dev/null; then log_error "Docker未安装,请先安装Docker" exit 1 fi # 检查Docker Compose if ! command -v docker-compose &> /dev/null; then log_error "Docker Compose未安装,请先安装Docker Compose" exit 1 fi log_info "依赖检查通过" } # 创建必要的目录 create_directories() { log_info "创建必要的目录..." mkdir -p config/prometheus mkdir -p config/grafana/provisioning mkdir -p logs mkdir -p data log_info "目录创建完成" } # 生成配置文件 generate_configs() { log_info "生成配置文件..." # 生成Prometheus配置 cat > config/prometheus/prometheus.yml << EOF global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'folder-docs-mcp' static_configs: - targets: ['folder-docs-mcp:8000'] metrics_path: '/metrics' scrape_interval: 30s EOF # 生成Grafana配置 cat > config/grafana/provisioning/datasources/prometheus.yml << EOF apiVersion: 1 datasources: - name: Prometheus type: prometheus access: proxy url: http://prometheus:9090 isDefault: true EOF log_info "配置文件生成完成" } # 构建Docker镜像 build_images() { log_info "构建Docker镜像..." # 构建主应用镜像 docker build -f deploy/docker/Dockerfile -t folder-docs-mcp:latest . log_info "Docker镜像构建完成" } # 启动服务 start_services() { log_info "启动服务..." # 启动基础设施服务 docker-compose up -d redis prometheus # 等待基础设施服务启动 log_info "等待基础设施服务启动..." sleep 10 # 启动主应用 docker-compose up -d folder-docs-mcp # 启动Grafana和Traefik docker-compose up -d grafana traefik log_info "所有服务启动完成" } # 健康检查 health_check() { log_info "执行健康检查..." # 检查主应用 if docker-compose exec -T folder-docs-mcp python -m src.cli health-check; then log_info "主应用健康检查通过" else log_error "主应用健康检查失败" return 1 fi # 检查Prometheus if curl -f http://localhost:9090/-/healthy > /dev/null 2>&1; then log_info "Prometheus健康检查通过" else log_error "Prometheus健康检查失败" return 1 fi # 检查Grafana if curl -f http://localhost:3000/api/health > /dev/null 2>&1; then log_info "Grafana健康检查通过" else log_warn "Grafana健康检查失败,但服务可能仍在启动中" fi log_info "健康检查完成" } # 显示服务信息 show_service_info() { log_info "服务信息:" echo "" echo "主应用: http://localhost:8000" echo "Prometheus: http://localhost:9090" echo "Grafana: http://localhost:3000 (admin/admin123)" echo "Traefik仪表板: http://localhost:8080" echo "" echo "查看日志: docker-compose logs -f [service_name]" echo "停止服务: docker-compose down" echo "" } # 清理函数 cleanup() { log_info "清理资源..." docker-compose down docker system prune -f log_info "清理完成" } # 更新函数 update() { log_info "更新服务..." # 备份当前配置 if [ -d "config/backup" ]; then rm -rf config/backup fi mkdir -p config/backup cp -r config/* config/backup/ 2>/dev/null || true # 停止服务 docker-compose down # 重新构建和启动 build_images start_services health_check log_info "更新完成" } # 主函数 main() { case "${1:-deploy}" in "deploy") check_dependencies create_directories generate_configs build_images start_services health_check show_service_info ;; "update") update ;; "stop") docker-compose down log_info "服务已停止" ;; "restart") docker-compose restart health_check log_info "服务已重启" ;; "logs") docker-compose logs -f ${2:-} ;; "status") docker-compose ps ;; "cleanup") cleanup ;; "health") health_check ;; *) echo "用法: $0 {deploy|update|stop|restart|logs|status|cleanup|health} [service_name]" echo "" echo "命令说明:" echo " deploy - 部署服务(默认)" echo " update - 更新服务" echo " stop - 停止服务" echo " restart - 重启服务" echo " logs - 查看日志(可选指定服务名)" echo " status - 查看服务状态" echo " cleanup - 清理资源" echo " health - 执行健康检查" exit 1 ;; esac } # 捕获中断信号 trap 'log_error "部署被中断"; exit 1' INT TERM # 执行主函数 main "$@"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kscz0000/Zhiwen-Assistant-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server