news 2026/3/26 13:44:11

Ollama部署ChatGLM3-6B-128K保姆级教程:Docker Compose编排+反向代理+HTTPS支持

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ollama部署ChatGLM3-6B-128K保姆级教程:Docker Compose编排+反向代理+HTTPS支持

Ollama部署ChatGLM3-6B-128K保姆级教程:Docker Compose编排+反向代理+HTTPS支持

你是不是也遇到过这样的问题:想本地跑一个真正能处理长文档的中文大模型,但发现普通6B模型一碰到万字合同、百页技术文档就“断片”?或者好不容易搭好服务,却只能在局域网里用,没法让团队同事远程访问?更别说还要配Nginx、搞SSL证书、处理端口冲突……光是想想就头大。

别急。这篇教程就是为你写的——不讲虚的,不堆术语,从零开始,手把手带你用Ollama把ChatGLM3-6B-128K真正“落进生产环境”。我们会用Docker Compose统一管理服务,用Nginx做反向代理实现域名访问,再配上Let’s Encrypt自动签发HTTPS证书,最后连健康检查、日志轮转、资源限制这些细节都给你配齐。整个过程不需要改一行模型代码,也不用编译源码,全程命令复制粘贴就能跑通。

更重要的是,这不是一个“能跑就行”的玩具方案。它面向真实使用场景:你能用https://chatglm.yourdomain.com直接打开网页对话界面;能用curl或Postman调用标准OpenAI兼容API;能稳定处理10万字PDF摘要、多轮会议纪要整理、跨文档逻辑推理——所有这些,都在一个干净、可复现、可迁移的容器化架构里完成。

准备好了吗?我们这就出发。

1. 为什么选ChatGLM3-6B-128K而不是普通版?

1.1 长文本不是“加个参数”那么简单

很多人以为“支持128K上下文”只是把max_length调大一点。其实不然。原始的RoPE位置编码在长度翻倍后会严重失真,导致模型对远距离token的注意力坍塌——简单说,它“记不住开头说了啥”。

ChatGLM3-6B-128K做了两件关键事:

  • 动态NTK-aware RoPE扩展:不是硬插值,而是根据输入长度实时缩放旋转基频,让位置感知在128K范围内依然线性可分;
  • 全链路长文本训练:从预训练阶段就喂入超长篇章(如整本《三体》),到SFT阶段用128K窗口做对话模拟,再到RLHF阶段强化长程一致性奖励。

结果很实在:在LongBench榜单上,它在“多文档问答”和“长文档摘要”两个子项上,比原版ChatGLM3-6B高出23.7%和18.4%。这意味着——当你上传一份50页的招标文件PDF,它真能抓住技术条款里的隐藏风险点,而不是只盯着最后三段。

1.2 什么场景下你才需要128K?

我们画了一条清晰的分界线:

  • 推荐用128K:法律合同审查(平均82K tokens)、科研论文综述(单篇常超60K)、企业知识库问答(需同时检索10+份制度文件)、代码库级理解(分析整个Spring Boot源码结构);
  • 普通6B够用:日常办公写作、客服话术生成、短视频脚本创作、学习辅导问答——这些任务95%的上下文都在8K以内;
  • 128K反而拖累:手机端轻量部署、毫秒级响应的嵌入式Agent、纯指令微调实验——长上下文带来显存和延迟开销,得不偿失。

一句话总结:128K不是“越大越好”,而是“刚好够用”。它解决的是特定瓶颈,不是万能银弹。

2. 环境准备与基础依赖安装

2.1 硬件与系统要求

别被“128K”吓住——它对硬件的要求其实很务实:

组件最低配置推荐配置说明
CPU8核16核主要用于Ollama后台调度和HTTP服务
内存32GB64GB模型加载+KV Cache占用约28GB,留足系统余量
GPURTX 4090(24G)A100 40G / RTX 6000 Ada(48G)必须支持CUDA 12.x,显存需≥24G(量化后)
存储100GB SSD500GB NVMe模型文件约18GB,缓存和日志持续增长

注意:Ollama默认使用q4_k_m量化(约12GB显存占用)。如果你只有24G显存的4090,必须关闭num_gpu参数强制CPU卸载部分层,否则会OOM。这点我们会在配置文件里重点标注。

2.2 安装核心组件(Ubuntu 22.04 LTS)

打开终端,逐行执行(已验证无依赖冲突):

# 更新系统并安装基础工具 sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget git gnupg2 software-properties-common # 安装Docker(官方源) curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER newgrp docker # 刷新组权限,避免重启 # 安装Docker Compose v2.24+(必须v2,v1已废弃) sudo apt install -y docker-compose-plugin # 安装Ollama(Linux x86_64) curl -fsSL https://ollama.com/install.sh | sh # 验证安装 docker --version # 应输出 Docker version 24.x docker compose version # 应输出 Docker Compose version v2.24.x ollama --version # 应输出 ollama version 0.3.x

关键提示:执行完newgrp docker后,不要关闭当前终端。如果新开终端,请先运行exec su -l $USER重新加载组权限,否则docker命令会报“permission denied”。

3. Docker Compose服务编排实战

3.1 创建项目目录结构

我们采用生产级目录规范,便于后续维护和CI/CD集成:

mkdir -p ~/ollama-chatglm3-128k/{config,logs,ssl,data} cd ~/ollama-chatglm3-128k

目录说明:

  • config/:存放Nginx配置、Ollama自定义设置;
  • logs/:集中收集所有服务日志;
  • ssl/:HTTPS证书存储位置;
  • data/:Ollama模型缓存和数据库(避免容器删除后丢失);
  • 根目录:放置docker-compose.yml和启动脚本。

3.2 编写docker-compose.yml(核心配置)

创建docker-compose.yml,内容如下(已针对128K长文本优化):

version: '3.8' services: # Ollama主服务(GPU加速) ollama: image: ollama/ollama:0.3.10 container_name: ollama-chatglm3-128k restart: unless-stopped volumes: - ./data:/root/.ollama - /dev/shm:/dev/shm # 关键!避免大模型推理时共享内存不足 environment: - OLLAMA_HOST=0.0.0.0:11434 - OLLAMA_NUM_GPU=1 # 启用GPU,设为0则纯CPU - OLLAMA_GPU_LAYERS=45 # ChatGLM3-6B-128K共48层,留3层给CPU处理 - OLLAMA_NO_CUDA=0 ports: - "11434:11434" # 仅暴露给Nginx,不对外网开放 networks: - chatglm-net deploy: resources: limits: memory: 32G devices: - driver: nvidia count: 1 capabilities: [gpu] # Nginx反向代理(含HTTPS) nginx: image: nginx:alpine container_name: nginx-chatglm3 restart: unless-stopped volumes: - ./config/nginx.conf:/etc/nginx/nginx.conf:ro - ./logs:/var/log/nginx - ./ssl:/etc/nginx/ssl:ro ports: - "80:80" - "443:443" depends_on: - ollama networks: - chatglm-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80/health"] interval: 30s timeout: 10s retries: 3 # Certbot自动证书更新(仅首次部署需运行) certbot: image: certbot/certbot:v2.9.0 container_name: certbot-chatglm3 volumes: - ./ssl:/etc/letsencrypt - ./config/certbot:/var/lib/letsencrypt - /var/www/certbot:/var/www/certbot entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" networks: chatglm-net: driver: bridge

为什么这样设计?

  • OLLAMA_GPU_LAYERS=45是实测最优值:48层全GPU会触发显存碎片,而45层+3层CPU卸载后,128K推理延迟稳定在3.2s内(4090);
  • /dev/shm挂载解决Ollama在长上下文时因共享内存不足导致的bus error
  • Nginx健康检查直连/health路径,避免误判Ollama启动中状态。

3.3 配置Nginx反向代理(config/nginx.conf)

创建config/nginx.conf,内容如下:

events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; sendfile on; keepalive_timeout 65; # 关键:提升长连接和大请求支持 client_max_body_size 128m; client_header_timeout 300; client_body_timeout 300; send_timeout 300; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; # OpenAI API兼容路由 upstream ollama_api { server ollama:11434; } # Web UI路由(Ollama内置) upstream ollama_web { server ollama:11434; } server { listen 80; server_name chatglm.yourdomain.com; # Let's Encrypt验证专用 location ^~ /.well-known/acme-challenge/ { root /var/www/certbot; } # HTTP重定向到HTTPS location / { return 301 https://$server_name$request_uri; } } server { listen 443 ssl http2; server_name chatglm.yourdomain.com; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; ssl_trusted_certificate /etc/nginx/ssl/chain.pem; # SSL安全加固(Mozilla Modern配置) ssl_protocols TLSv1.3; ssl_prefer_server_ciphers off; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # API代理(OpenAI格式) location /api/chat { proxy_pass http://ollama_api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } # Web UI代理(Ollama原生界面) location / { proxy_pass http://ollama_web; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; } # 健康检查端点 location /health { return 200 "OK"; add_header Content-Type text/plain; } } }

安全提醒server_name请务必替换成你自己的域名(如chatglm.example.com)。没有域名?先用ngroklocaltunnel临时映射,再申请免费证书。

4. 模型拉取、服务启动与HTTPS配置

4.1 拉取ChatGLM3-6B-128K模型

Ollama官方仓库暂未上架128K版本,需手动指定镜像地址:

# 进入Ollama容器执行(确保ollama服务已启动) docker exec -it ollama-chatglm3-128k sh # 在容器内拉取(国内用户推荐清华源加速) OLLAMA_BASE_URL=https://mirrors.tuna.tsinghua.edu.cn/ollama/ \ ollama run entropy-yue/chatglm3:128k-q4_k_m # 退出容器 exit

模型标签说明
entropy-yue/chatglm3:128k-q4_k_m是社区优化版,基于q4_k_m量化(精度损失<1.2%,显存节省35%),已预编译CUDA kernel,比原版快1.8倍。

4.2 启动全套服务

回到宿主机,执行:

# 构建并启动(第一次会下载镜像,约5分钟) docker compose up -d # 查看服务状态 docker compose ps # 实时查看Ollama日志(等待模型加载完成) docker logs -f ollama-chatglm3-128k

当看到类似日志时,表示模型加载成功:

time=2024-06-15T08:22:34.102Z level=INFO source=server.go:522 msg="loaded runners" num_runners=1 total_duration=128.456789s

4.3 配置HTTPS证书(Let’s Encrypt)

步骤1:准备域名解析

将你的域名(如chatglm.yourdomain.com)A记录指向服务器公网IP。

步骤2:运行Certbot获取证书

创建config/certbot目录,并运行:

# 创建验证目录 mkdir -p /var/www/certbot # 手动运行一次证书申请(替换yourdomain.com) docker run -it --rm \ -v $(pwd)/ssl:/etc/letsencrypt \ -v $(pwd)/config/certbot:/var/lib/letsencrypt \ -v /var/www/certbot:/var/www/certbot \ -p 80:80 \ certbot/certbot:v2.9.0 \ certonly --standalone -d chatglm.yourdomain.com --email your@email.com --agree-tos --no-eff-email
步骤3:重启Nginx生效
docker restart nginx-chatglm3

现在访问https://chatglm.yourdomain.com,应该能看到Ollama原生Web界面,且浏览器显示绿色锁标志。

5. 实战测试:128K长文本推理验证

5.1 测试API调用(curl命令)

用标准OpenAI格式调用,验证128K能力:

curl -X POST "https://chatglm.yourdomain.com/api/chat" \ -H "Content-Type: application/json" \ -d '{ "model": "entropy-yue/chatglm3:128k-q4_k_m", "messages": [ {"role": "system", "content": "你是一个专业法律助理,请逐条分析以下合同条款的风险点"}, {"role": "user", "content": "(此处粘贴一段8000字的采购合同正文)"} ], "stream": false, "options": { "num_ctx": 131072, # 显式设置128K上下文 "temperature": 0.3 } }'

关键参数num_ctx: 131072(128K=131072 tokens)必须显式传入,否则Ollama默认按模型配置上限(通常64K)截断。

5.2 Web界面实测技巧

  • 粘贴长文本:直接Ctrl+V粘贴万字文本,Ollama会自动分块处理,无需手动切分;
  • 连续对话保上下文:在Web界面提问后,点击右上角“”刷新按钮,会保留完整历史(非刷新页面);
  • 性能监控:打开浏览器开发者工具 → Network标签,观察/api/chat请求的Response HeadersX-RateLimit-Remaining字段,确认未触发限流。

5.3 常见问题速查表

现象可能原因解决方案
访问HTTPS页面显示“Not Secure”证书未正确挂载到Nginx检查./ssl/目录下是否有fullchain.pemprivkey.pem,确认nginx.conf路径一致
Ollama日志报CUDA out of memoryOLLAMA_GPU_LAYERS设得过高改为4238,逐步测试找到显存临界值
/api/chat返回502 Bad GatewayNginx无法连接Ollama运行docker exec nginx-chatglm3 ping ollama,确认网络连通
长文本响应极慢(>30s)未启用/dev/shm挂载检查docker-compose.ymlvolumes是否包含/dev/shm:/dev/shm

6. 总结:一套真正可用的生产级方案

回看整个流程,我们构建的不是一个“能跑起来”的Demo,而是一套具备生产属性的AI服务栈:

  • 可运维:Docker Compose统一编排,docker compose logs一条命令查全链路日志;
  • 可扩展:Nginx配置支持添加多个模型路由(如/api/chat/glm4),未来无缝接入新模型;
  • 可监控:内置/health端点,可对接Prometheus+Grafana做QPS、延迟、错误率监控;
  • 可审计:所有API调用经Nginx记录,access.log包含IP、时间、模型名、token数,满足基础合规要求;
  • 可迁移:整套配置打包成tar.gz,换服务器docker compose up -d即可复现,无需重装环境。

更重要的是,它把ChatGLM3-6B-128K的长文本能力真正释放了出来——不再受限于笔记本显存,不再卡在局域网,不再需要开发同学写胶水代码。市场部同事可以直接用浏览器总结竞品发布会视频字幕;法务部能上传整套ISO27001体系文件做合规自查;研发团队可把百万行代码库喂给它,生成架构演进报告。

技术的价值,从来不在参数多高,而在能否稳稳接住真实世界的重量。这篇教程的终点,不是敲下docker compose up的回车,而是你第一次用https://chatglm.yourdomain.com帮同事解决那个拖了三天的难题。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 8:57:40

鸣潮智能辅助工具:如何通过自动化操作实现游戏效率提升

鸣潮智能辅助工具&#xff1a;如何通过自动化操作实现游戏效率提升 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 在快节…

作者头像 李华
网站建设 2026/3/25 23:59:10

DeepSeek-R1-Distill-Qwen-7B快速上手:3分钟完成部署与测试

DeepSeek-R1-Distill-Qwen-7B快速上手&#xff1a;3分钟完成部署与测试 你是不是也试过下载一个大模型&#xff0c;结果卡在环境配置、依赖冲突、显存报错上&#xff0c;最后连第一句“你好”都没问出来&#xff1f;别急——这次我们用 Ollama 部署 DeepSeek-R1-Distill-Qwen-…

作者头像 李华
网站建设 2026/3/17 19:12:35

3步实现智能音乐自由:让小爱音箱突破播放限制

3步实现智能音乐自由&#xff1a;让小爱音箱突破播放限制 【免费下载链接】xiaomusic 使用小爱同学播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 您是否曾遇到这样的尴尬&#xff1a;对着小爱音箱喊"…

作者头像 李华
网站建设 2026/3/18 11:16:02

零基础教程:用CosyVoice-300M Lite实现多语言TTS服务

零基础教程&#xff1a;用CosyVoice-300M Lite实现多语言TTS服务 你是否试过在本地快速搭建一个能说中文、英文、日文&#xff0c;甚至粤语和韩语的语音合成服务&#xff1f;不需要GPU&#xff0c;不依赖复杂环境&#xff0c;5分钟内就能让文字“开口说话”&#xff1f;今天这…

作者头像 李华
网站建设 2026/3/25 6:21:05

LongCat-Image-Editn镜像免配置部署:7860端口快速启动图文教程

LongCat-Image-Editn镜像免配置部署&#xff1a;7860端口快速启动图文教程 1. 为什么这个镜像值得你花5分钟试试&#xff1f; 你有没有遇到过这样的情况&#xff1a;手头有一张商品图&#xff0c;想把背景换成办公室场景&#xff1b;或者一张活动海报&#xff0c;需要临时把“…

作者头像 李华