CodeBuddy企业内网私有化部署必须切断云端通道、强制TLS 1.3本地闭环链路、启用AST指纹与内存快照审计;需禁用systemd-resolved、硬编码内网DNS、确认runc运行时、严格校验模型SHA256、关闭OAuth、绑定专用LDAP服务账号、开启语义沙箱并配置自签名证书含subjectAltName。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让CodeBuddy在企业内网中真正守住代码不出域、不外泄、可审计这条安全底线,必须绕过所有云端通道,切断模型服务与外部网络的任何隐式通信,强制所有请求经由TLS 1.3加密的本地闭环链路完成,且每个代码片段的处理过程都留下不可篡改的AST指纹与内存快照。
确认离线运行环境与权限隔离
检查服务器是否禁用systemd-resolved,并将/etc/resolv.conf硬编码指向内网DNS(如10.10.10.10)——【若仍使用默认systemd-resolved,容器启动时可能静默触发上游DNS查询,导致模型加载阶段意外回源】。
执行docker info | grep "Default Runtime",确认输出为runc而非其他运行时;非runc环境无法启用seccomp策略,将导致代码语义沙箱失效。
验证/opt/codebuddy/onprem/目录属主为codebuddy:codebuddy,且bin/下所有脚本chmod +x;权限错误会导致setup-models.sh中途退出,但日志不报错,仅卡在tokenizer.bin生成环节。
加载本地模型并关闭远程推理
方法一:直接替换模型路径
将tc-code-enterprise-202604.qwen3-int4.gguf放入/opt/codebuddy/models/后,编辑/opt/codebuddy/config/model_config.json,把model_path字段设为绝对路径"/opt/codebuddy/models/tc-code-enterprise-202604.qwen3-int4.gguf",engine设为llama.cpp,n_gpu_layers设为48。
方法二:校验后启用离线加载
运行./bin/setup-models.sh —offline —skip-download;该命令会读取model_config.json,校验GGUF文件SHA256(需与交付包中标注值a7f9e3d2c1b8a4f5e6d7c9b0a1f2e3d4c5b6a7f8e9d0c1b2a3f4e5d6c7b8a9f0一致),失败则终止,不生成任何缓存文件。
执行完后检查/opt/codebuddy/models/下是否出现tokenizer.bin和metadata.json;没有这两个文件,说明模型未通过完整性校验,后续服务启动会报“model load failed: invalid header”。
配置LDAP认证与禁用所有外部登录
第一步:关闭OAuth入口
修改/opt/codebuddy/config/auth_config.yaml,将enable_wechat_login设为false,enable_github_oauth也设为false;这两项若为true,即使无网络也会在登录页渲染微信/ GitHub 图标,构成UI层信息泄露风险。
第二步:绑定企业LDAP源
在auth_config.yaml中填写ldap_url: ldaps://ad.internal.corp:636,bind_dn: "CN=codebuddy-svc,OU=ServiceAccounts,DC=internal,DC=corp",base_dn: "OU=Developers,DC=internal,DC=corp";【bind_dn必须为专用服务账号,禁止复用管理员账号或通配符DN】。
第三步:测试连接有效性
运行./bin/test-ldap.sh —config /opt/codebuddy/config/auth_config.yaml;返回"OK: bound & search succeeded"才算通过,否则CodeBuddy启动后用户登录会卡在503状态,且无明确错误日志。
启用代码语义沙箱与审计追踪
编辑/opt/codebuddy/config/sandbox_config.yaml,设置enable_ast_fingerprint: true,memory_snapshot_interval_ms: 30000;前者开启每次代码建议生成时的AST节点哈希计算,后者每30秒捕获一次推理进程内存快照。
确保/opt/codebuddy/logs/audit/目录存在且codebuddy用户有写权限;审计日志默认按小时切片,文件名格式为audit-20260630-22.log,内容含原始prompt、脱敏后的context snippet、AST指纹、内存快照路径及操作者LDAP DN。
执行./bin/rotate-audit-logs.sh —retention-days 90 —compress;该脚本会清理90天前日志并启用gzip压缩,避免磁盘被audit目录占满导致服务静默降级。
强制TLS 1.3内网加密与域名锁定
在/opt/codebuddy/config/nginx.conf中,删除所有http块,仅保留server块;ssl_protocols必须为TLSv1.3,ssl_ciphers必须包含TLS_AES_256_GCM_SHA384,且proxy_pass必须指向https://127.0.0.1:8080,不能写localhost或域名。
生成自签名证书时,subjectAltName必须包含codebuddy.internal.corp,且私钥密码为空——【若设了密码,docker compose启动时会卡在证书解密环节,无任何错误提示】。
最后检查docker-compose.yml中ports段是否仅暴露8443端口,且environment下有FORCE_HTTPS=true;缺少此变量会导致前端资源仍走HTTP加载,触发浏览器混合内容拦截。


















