Docker 部署 CodeGraph 多项目统一 MCP 网关,附源码
从本地拷贝下载文件到服务器
scp codegraph-linux-x64.tar.gz username@ip_address:/home/…/Projects/codegraph_ide
Linux系统下执行操作
新建 install-codegraph.sh
#!/bin/bash
VERSION=v1.4.0
INSTALL_DIR=“HOME/.codegraph"BINDIR="HOME/.codegraph" BIN_DIR="HOME/.codegraph"BINDIR="HOME/.local/bin”
创建目录
mkdir -p “INSTALLDIR/versions/INSTALL_DIR/versions/INSTALLDIR/versions/VERSION”
mkdir -p “$BIN_DIR”
解压
tar -xzf codegraph-linux-x64-v1.4.0.tar.gz
-C “INSTALLDIR/versions/INSTALL_DIR/versions/INSTALLDIR/versions/VERSION”
–strip-components=1
创建版本软链接 + 全局命令
ln -sfn “INSTALLDIR/versions/INSTALL_DIR/versions/INSTALLDIR/versions/VERSION” “INSTALLDIR/current"ln−sf"INSTALL_DIR/current" ln -sf "INSTALLDIR/current"ln−sf"INSTALL_DIR/current/bin/codegraph” “$BIN_DIR/codegraph”
检查并添加PATH(不存在才写入bashrc)
if ! echo “PATH"∣grep−q"PATH" | grep -q "PATH"∣grep−q"HOME/.local/bin”; then
echo ‘export PATH=“HOME/.local/bin:HOME/.local/bin:HOME/.local/bin:PATH”’ >> ~/.bashrc
echo “已向 ~/.bashrc 添加 PATH”
fi
echo “安装完成!执行 source ~/.bashrc 或重启终端后运行 codegraph”
执行以下指令
chmod +x install-codegraph.sh
./install-codegraph.sh
验证安装
source ~/.bashrc
codegraph --version
验证
which codegraph
codegraph --version
codegraph --help
构建docker离线镜像
现在使用的 @colbymchenry/codegraph(npm 版本)原生只有 stdio 模式,不自带 HTTP / SSE / TCP 远程监听参数,这里采用 mcp-remote 桥接(stdio → HTTP)方式,更适合生成环境。这里默认系统已安装npm包。
项目github地址 https://github.com/dora-wang-x/codegraph-mcp-gateway
构建docker离线镜像的目录结构
docker/
.env
batch_codegraph_init.sh
codegraph.Dockerfile
multi_project_gateway.js
codegraph-linux-x64-v1.4.0.tar.gz
install-codegraph.sh
README.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.gz:CodeGraph 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 shell:
set -a
. docker/.env
set +a
docker build
-f docker/codegraph.Dockerfile
–build-arg NODE_IMAGE=“NODEIMAGE" −−build−argAPTMIRRORBASE="{NODE_IMAGE}" \ --build-arg APT_MIRROR_BASE="NODEIMAGE" −−build−argAPTMIRRORBASE="{APT_MIRROR_BASE}”
–build-arg CODEGRAPH_VERSION=“CODEGRAPHVERSION" −−build−argCODEGRAPHARCHIVE="{CODEGRAPH_VERSION}" \ --build-arg CODEGRAPH_ARCHIVE="CODEGRAPHVERSION" −−build−argCODEGRAPHARCHIVE="{CODEGRAPH_ARCHIVE}”
–build-arg SUPERGATEWAY_VERSION=“SUPERGATEWAYVERSION" −t"{SUPERGATEWAY_VERSION}" \ -t "SUPERGATEWAYVERSION" −t"{IMAGE_NAME}😒{IMAGE_TAG}”
.
Windows PowerShell:
Get-Content .\docker.env | Where-Object { $_ -and $_ -notmatch ‘^#’ } | ForEach-Object {
$k, $v = −split′=′,2Set−Item−Path"Env:_ -split '=', 2 Set-Item -Path "Env:−split′=′,2Set−Item−Path"Env:k" -Value $v
}
docker build -f .\docker\codegraph.Dockerfile
–build-arg NODE_IMAGE=“env:NODEIMAGE"‘−−build−argAPTMIRRORBASE="env:NODE_IMAGE" ` --build-arg APT_MIRROR_BASE="env:NODEIMAGE"‘−−build−argAPTMIRRORBASE="env:APT_MIRROR_BASE” --build-arg CODEGRAPH_VERSION="$env:CODEGRAPH_VERSION"
–build-arg CODEGRAPH_ARCHIVE=“env:CODEGRAPHARCHIVE"‘−−build−argSUPERGATEWAYVERSION="env:CODEGRAPH_ARCHIVE" ` --build-arg SUPERGATEWAY_VERSION="env:CODEGRAPHARCHIVE"‘−−build−argSUPERGATEWAYVERSION="env:SUPERGATEWAY_VERSION” -t "$env:IMAGE_NAME:$env:IMAGE_TAG" `
.
导出镜像:
Linux/macOS shell:
docker save “IMAGENAME:{IMAGE_NAME}:IMAGENAME:{IMAGE_TAG}” -o “${IMAGE_TAR}”
Windows PowerShell:
docker save “env:IMAGENAME‘:env:IMAGE_NAME`:env:IMAGENAME‘:env:IMAGE_TAG” -o “$env:IMAGE_TAR”
离线环境加载并运行
加载镜像:
在执行以下指令之前,需要将 .env文件中的HOST_PROJECTS_PATH变量改为真实的项目路径
set -a
. docker/.env
set +a
docker load -i “IMAGETAR"运行容器:dockerrun−d −−name"{IMAGE_TAR}" 运行容器: docker run -d \ --name "IMAGETAR"运行容器:dockerrun−d −−name"{CONTAINER_NAME}”
–env-file docker/.env
-p “HOSTPORT:{HOST_PORT}:HOSTPORT:{MCP_PORT}”
-v “HOSTPROJECTSPATH:{HOST_PROJECTS_PATH}:HOSTPROJECTSPATH:{CONTAINER_PROJECTS_PATH}”
–restart unless-stopped
“IMAGENAME:{IMAGE_NAME}:IMAGENAME:{IMAGE_TAG}”
更多推荐

所有评论(0)