Docker 部署 CodeGraph 多项目统一 MCP 网关,附源码

📅 2026/7/19 5:10:15
Docker 部署 CodeGraph 多项目统一 MCP 网关,附源码
从本地拷贝下载文件到服务器scp codegraph-linux-x64.tar.gz usernameip_address:/home/…/Projects/codegraph_ideLinux系统下执行操作新建 install-codegraph.sh#!/bin/bashVERSIONv1.4.0INSTALL_DIR“HOME/.codegraphBINDIRHOME/.codegraph BIN_DIRHOME/.codegraphBIND​IRHOME/.local/bin”创建目录mkdir -p “INSTALLDIR/versions/INSTALL_DIR/versions/INSTALLD​IR/versions/VERSION”mkdir -p “$BIN_DIR”解压tar -xzf codegraph-linux-x64-v1.4.0.tar.gz-C “INSTALLDIR/versions/INSTALL_DIR/versions/INSTALLD​IR/versions/VERSION”–strip-components1创建版本软链接 全局命令ln -sfn “INSTALLDIR/versions/INSTALL_DIR/versions/INSTALLD​IR/versions/VERSION” “INSTALLDIR/currentln−sfINSTALL_DIR/current ln -sf INSTALLD​IR/currentln−sfINSTALL_DIR/current/bin/codegraph” “$BIN_DIR/codegraph”检查并添加PATH不存在才写入bashrcif ! echo “PATH∣grep−qPATH | grep -q PATH∣grep−qHOME/.local/bin”; thenecho ‘export PATH“HOME/.local/bin:HOME/.local/bin:HOME/.local/bin:PATH”’ ~/.bashrcecho “已向 ~/.bashrc 添加 PATH”fiecho “安装完成执行 source ~/.bashrc 或重启终端后运行 codegraph”执行以下指令chmod x install-codegraph.sh./install-codegraph.sh验证安装source ~/.bashrccodegraph --version验证which codegraphcodegraph --versioncodegraph --help构建docker离线镜像现在使用的 colbymchenry/codegraphnpm 版本原生只有 stdio 模式不自带 HTTP / SSE / TCP 远程监听参数这里采用 mcp-remote 桥接stdio → HTTP方式更适合生成环境。这里默认系统已安装npm包。项目github地址 https://github.com/dora-wang-x/codegraph-mcp-gateway构建docker离线镜像的目录结构docker/.envbatch_codegraph_init.shcodegraph.Dockerfilemulti_project_gateway.jscodegraph-linux-x64-v1.4.0.tar.gzinstall-codegraph.shREADME.md说明docker/.env保存构建和运行变量。docker/batch_codegraph_init.sh扫描项目集合目录下一级子目录逐个执行 codegraph init。docker/codegraph.Dockerfile构建 CodeGraph MCP 远程服务镜像。docker/multi_project_gateway.js扫描已初始化项目为每个项目启动内部 supergateway并暴露统一 HTTP 入口。codegraph-linux-x64-v1.4.0.tar.gzCodeGraph Linux x64 离线包放在仓库根目录作为 Docker build context 的一部分。install-codegraph.sh在服务端安装 codegraph-linux-x64-v1.4.0.tar.gz 脚本README.md介绍项目目标安装步骤工作方式服务端项目集合目录/srv/projects/project-a/project-b/project-c/容器内挂载为/workspace/projects/project-a/project-b/project-c/批量初始化后通过batch_codegraph_init.sh脚本批量构建代码知识库/workspace/projects/project-a/.codegraph/codegraph.db/workspace/projects/project-b/.codegraph/codegraph.db/workspace/projects/project-c/.codegraph/codegraph.db容器启动时docker/multi_project_gateway.js 会扫描 CONTAINER_PROJECTS_PATH 下一级子目录。默认只服务存在 .codegraph/codegraph.db 的项目。为每个项目分配内部端口例如 9100、9101、9102。启动内部 supergateway。在 MCP_PORT 上暴露统一入口。实际部署前 .env 文件通常只需要改HOST_PROJECTS_PATH离线服务器上的项目集合目录。HOST_PORT对外暴露端口。在线环境构建镜像在仓库根目录执行:Linux/macOS shellset -a. docker/.envset adocker build-f docker/codegraph.Dockerfile–build-arg NODE_IMAGE“NODEIMAGE −−build−argAPTMIRRORBASE{NODE_IMAGE} \ --build-arg APT_MIRROR_BASENODEI​MAGE−−build−argAPTM​IRRORB​ASE{APT_MIRROR_BASE}”–build-arg CODEGRAPH_VERSION“CODEGRAPHVERSION −−build−argCODEGRAPHARCHIVE{CODEGRAPH_VERSION} \ --build-arg CODEGRAPH_ARCHIVECODEGRAPHV​ERSION−−build−argCODEGRAPHA​RCHIVE{CODEGRAPH_ARCHIVE}”–build-arg SUPERGATEWAY_VERSION“SUPERGATEWAYVERSION −t{SUPERGATEWAY_VERSION} \ -t SUPERGATEWAYV​ERSION−t{IMAGE_NAME}{IMAGE_TAG}”.Windows PowerShellGet-Content .\docker.env | Where-Object { $_ -and $_ -notmatch ‘^#’ } | ForEach-Object {$k, $v −split′′,2Set−Item−PathEnv:_ -split , 2 Set-Item -Path Env:−​split′′,2Set−Item−PathEnv:k -Value $v}docker build-f .\docker\codegraph.Dockerfile–build-arg NODE_IMAGE“env:NODEIMAGE‘−−build−argAPTMIRRORBASEenv:NODE_IMAGE --build-arg APT_MIRROR_BASEenv:NODEI​MAGE‘−−build−argAPTM​IRRORB​ASEenv:APT_MIRROR_BASE”--build-arg CODEGRAPH_VERSION$env:CODEGRAPH_VERSION–build-arg CODEGRAPH_ARCHIVE“env:CODEGRAPHARCHIVE‘−−build−argSUPERGATEWAYVERSIONenv:CODEGRAPH_ARCHIVE --build-arg SUPERGATEWAY_VERSIONenv:CODEGRAPHA​RCHIVE‘−−build−argSUPERGATEWAYV​ERSIONenv:SUPERGATEWAY_VERSION”-t $env:IMAGE_NAME:$env:IMAGE_TAG .导出镜像Linux/macOS shelldocker save “IMAGENAME:{IMAGE_NAME}:IMAGEN​AME:{IMAGE_TAG}” -o “${IMAGE_TAR}”Windows PowerShelldocker save “env:IMAGENAME‘:env:IMAGE_NAME:env:IMAGEN​AME‘:env:IMAGE_TAG” -o “$env:IMAGE_TAR”离线环境加载并运行加载镜像在执行以下指令之前需要将 .env文件中的HOST_PROJECTS_PATH变量改为真实的项目路径set -a. docker/.envset adocker load -i “IMAGETAR运行容器dockerrun−d −−name{IMAGE_TAR} 运行容器 docker run -d \ --name IMAGET​AR运行容器dockerrun−d−−name{CONTAINER_NAME}”–env-file docker/.env-p “HOSTPORT:{HOST_PORT}:HOSTP​ORT:{MCP_PORT}”-v “HOSTPROJECTSPATH:{HOST_PROJECTS_PATH}:HOSTP​ROJECTSP​ATH:{CONTAINER_PROJECTS_PATH}”–restart unless-stopped“IMAGENAME:{IMAGE_NAME}:IMAGEN​AME:{IMAGE_TAG}”