forked from DevOps/deploy.stack
feat: 初始化MCP服务器Go版本实现
添加MCP服务器Go版本的核心功能,包括: - 配置文件管理 - 日志系统 - OpenAI API集成 - HTTP服务器和API端点 - 健康检查和监控 - 安装脚本和文档
This commit is contained in:
132
mcp_server_go/install.sh
Normal file
132
mcp_server_go/install.sh
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
|
||||
# MCP Server Go 安装脚本
|
||||
|
||||
# 设置颜色
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # 无颜色
|
||||
|
||||
# 检查是否安装了Go
|
||||
echo -e "${BLUE}检查Go环境...${NC}"
|
||||
if ! command -v go &> /dev/null
|
||||
then
|
||||
echo -e "${RED}错误: 未安装Go。请先安装Go 1.21或更高版本。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查Go版本
|
||||
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
|
||||
GO_MAJOR=$(echo $GO_VERSION | cut -d. -f1)
|
||||
GO_MINOR=$(echo $GO_VERSION | cut -d. -f2)
|
||||
|
||||
if [ $GO_MAJOR -lt 1 ] || ([ $GO_MAJOR -eq 1 ] && [ $GO_MINOR -lt 21 ]); then
|
||||
echo -e "${RED}错误: Go版本过低 ($GO_VERSION)。请安装Go 1.21或更高版本。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}已安装Go ($GO_VERSION)${NC}"
|
||||
|
||||
# 检查当前目录
|
||||
echo -e "${BLUE}\n检查项目目录...${NC}"
|
||||
if [ ! -f "main.go" ]; then
|
||||
echo -e "${RED}错误: 请在包含main.go的项目根目录下运行此脚本。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}项目目录正确${NC}"
|
||||
|
||||
# 创建日志目录
|
||||
echo -e "${BLUE}\n创建日志目录...${NC}"
|
||||
mkdir -p logs
|
||||
echo -e "${GREEN}日志目录已创建: logs/${NC}"
|
||||
|
||||
# 安装依赖
|
||||
echo -e "${BLUE}\n安装项目依赖...${NC}"
|
||||
if [ ! -f "go.mod" ]; then
|
||||
echo -e "${YELLOW}未找到go.mod文件,正在初始化Go模块...${NC}"
|
||||
go mod init mcp_server_go
|
||||
fi
|
||||
|
||||
go mod tidy
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}安装依赖失败,请检查网络连接和go.mod文件。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}依赖安装成功${NC}"
|
||||
|
||||
# 编译项目
|
||||
echo -e "${BLUE}\n编译项目...${NC}"
|
||||
go build -o mcp_server
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}编译失败,请检查代码是否有错误。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod +x mcp_server
|
||||
echo -e "${GREEN}编译成功: mcp_server (可执行文件)${NC}"
|
||||
|
||||
# 检查配置文件
|
||||
echo -e "${BLUE}\n检查配置文件...${NC}"
|
||||
if [ ! -f "config.toml" ]; then
|
||||
echo -e "${YELLOW}警告: 未找到config.toml文件。请根据config.toml.example创建配置文件。${NC}"
|
||||
else
|
||||
# 检查是否设置了API密钥
|
||||
API_KEY=$(grep "api_key" config.toml | awk -F'=' '{print $2}' | tr -d ' "')
|
||||
if [ "$API_KEY" = "your_api_key_here" ]; then
|
||||
echo -e "${YELLOW}警告: 配置文件中的API密钥尚未设置,请编辑config.toml并填入有效的OpenAI API密钥。${NC}"
|
||||
else
|
||||
echo -e "${GREEN}配置文件已找到,API密钥已设置${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 创建systemd服务文件
|
||||
echo -e "${BLUE}\n创建systemd服务文件 (可选)...${NC}"
|
||||
read -p "是否创建systemd服务文件以便作为系统服务运行?(y/n): " CREATE_SERVICE
|
||||
|
||||
if [[ $CREATE_SERVICE == [Yy]* ]]; then
|
||||
# 获取当前路径
|
||||
CURRENT_DIR=$(pwd)
|
||||
# 获取当前用户
|
||||
CURRENT_USER=$(whoami)
|
||||
|
||||
# 创建systemd服务文件
|
||||
SERVICE_FILE="/etc/systemd/system/mcp_server.service"
|
||||
|
||||
echo -e "${YELLOW}创建systemd服务文件: $SERVICE_FILE${NC}"
|
||||
cat > mcp_server.service << EOF
|
||||
[Unit]
|
||||
Description=MCP Server Go
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$CURRENT_USER
|
||||
WorkingDirectory=$CURRENT_DIR
|
||||
ExecStart=$CURRENT_DIR/mcp_server
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo -e "${BLUE}\n请使用以下命令安装systemd服务:${NC}"
|
||||
echo -e "sudo mv mcp_server.service $SERVICE_FILE"
|
||||
echo -e "sudo systemctl daemon-reload"
|
||||
echo -e "sudo systemctl enable mcp_server"
|
||||
echo -e "sudo systemctl start mcp_server"
|
||||
fi
|
||||
|
||||
# 显示启动说明
|
||||
echo -e "\n${GREEN}安装完成!${NC}"
|
||||
echo -e "${BLUE}\n使用说明:${NC}"
|
||||
echo -e "1. 确保编辑config.toml文件,设置正确的OpenAI API密钥"
|
||||
echo -e "2. 直接运行: ./mcp_server"
|
||||
echo -e "3. 或按照上述说明设置为系统服务"
|
||||
echo -e "\n${YELLOW}注意: 首次运行前,请确保config.toml中的配置正确无误。${NC}"
|
||||
|
||||
echo -e "\n${GREEN}MCP Server Go安装成功!${NC}"
|
||||
Reference in New Issue
Block a user