1. 背景
需要关于代码层面的问答
需要账户登陆记录
2. 机器
16c32g
200g的磁盘
centos8.5
3. 选取的模型
Ollama + Open WebUI
ollama的模型库
codellama模型最低就是7b
- 模型:CodeLlama-13B(4-bit量化)
- 内存占用:~10-12GB
- 剩余内存:~20GB用于并发处理
机器申请失败,因此我在自己真机上部署了一套仅仅限制4个人用的模型
我自己的机器
x86_64
16cpu:CPU: model name : Intel® Core™ i7-10700 CPU @ 2.90GHz
64G内存
440G的磁盘
集成显卡:Intel Corporation CometLake-S GT2 [UHD Graphics 630] (rev 05)
存储设备:WD SN550 NVMe SSD
自己配置不高,所以用的是Ollama-7b的小模型,并且限制在4个人使用。因为我的机器有时候还要跑占内存的东西,尽量避免挤压真机使用。
ollama pull codellama:7b
Open WebUI必需的基础模型
bash
ollama pull sentence-transformers/all-MiniLM-L6-v2 # 嵌入模型(必需)
ollama pull nomic-embed-text # 文本嵌入模型
ollama pull all-minilm-l6-v2 # 轻量嵌入模型
查看已经pull下来的模型,我的位置
bash
/root/.ollama/models
查找命令
bash
sudo find / -name "models" -type d 2>/dev/null
config.json
因为在国内环境下,Hugging Face 被屏蔽。从 Hugging Face 下载 sentence-transformers/all-MiniLM-L6-v2 模型会失败,因此直接去下面的网址下载模型在从本地加载到容器中,
https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/
compose文件,使用桥接网络
yaml
version: '3.8'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: zyl-ai-webui
restart: unless-stopped
ports:
- "3000:8080"
volumes:
# 数据存储 (保持不变)
- ./data:/app/backend/data
# 修正后的模型挂载路径 (关键修改)
- /home/great/zhangyuling_ai_ollama_7b/models/sentence-transformers/all-MiniLM-L6-v2:/app/backend/models/sentence-transformers/all-MiniLM-L6-v2
environment:
# Ollama连接
- OLLAMA_BASE_URL=http://host.docker.internal:11434
# 模型配置 (关键修改)
- EMBEDDING_MODEL=/app/backend/models/sentence-transformers/all-MiniLM-L6-v2
- DEFAULT_MODEL=codellama:7b
- DEFAULT_MODELS=codellama:7b
- EMBEDDING_MODEL=nomic-embed-text:latest
- DISABLE_MODEL_DOWNLOAD=true
# 禁用功能 (修正参数)
- DISABLE_VECTOR_DB=false
- DISABLE_EMBEDDINGS=false
# 性能限制(针对4人团队优化)
- MAX_CONCURRENT_REQUESTS=3 # 同时处理3个请求
- REQUEST_QUEUE_SIZE=8 # 队列最多8个请求等待
- REQUEST_TIMEOUT=120 # 请求超时时间(秒)
- MAX_CONCURRENT_SESSIONS=4 # 最大并发会话数
# 内存优化
- MEMORY_LIMIT=4096 # 内存限制4GB
- WORKER_TIMEOUT=300 # 工作进程超时
# 用户认证
- WEBUI_AUTH=true
- USER_REGISTRATION=true
- ALLOW_SIGNUP=true
# 界面设置
- DEFAULT_LOCALE=zh-CN
- TITLE=AI代码助手
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
compose文件使用主机网络(推荐使用)
yaml
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: zyl-ai-webui
restart: unless-stopped
# 使用主机网络模式
network_mode: "host"
volumes:
- ./data:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://127.0.0.1:11434
- OFFLINE_MODE=true
- EMBEDDING_MODEL=nomic-embed-text
- DISABLE_MODEL_DOWNLOAD=true
- DISABLE_HUGGINGFACE=true
- DISABLE_CLOUD_SYNC=true
- DISABLE_TELEMETRY=true
- DISABLE_OPENAI=true
- DISABLE_AZURE=true
- DISABLE_CLOUD=true
- DISABLE_PUBLIC=false
- DEFAULT_MODEL=codellama:7b
- DEFAULT_MODELS=codellama:7b
- WEBUI_AUTH=true
- USER_REGISTRATION=true
- ALLOW_SIGNUP=true
- DEFAULT_LOCALE=zh-CN
- TITLE=AI代码助手(离线模式)
# # ✅ 增加资源限制配置
# deploy:
# resources:
# limits:
# memory: 8G
# cpus: '4.0'
# reservations:
# memory: 4G
# cpus: '2.0'
# 添加启动时安装网络工具的命令
command: >
bash -c "
echo '正在安装网络诊断工具...' &&
apt-get update &&
apt install iputils-ping &&
echo '网络工具安装完成,启动Open WebUI...' &&
/start.sh
"
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8080/api/config"]
interval: 30s
timeout: 15s
retries: 3
start_period: 120s
- 最终验证
great@great-PC:~/zhangyuling_ai_ollama_7b/webui$ ./final-check.sh
powershell
=== 🎉 AI代码助手平台部署完成 ===
📊 服务状态:
WARN[0000] /home/great/zhangyuling_ai_ollama_7b/webui/docker-compose.yml: `version` is obsolete
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
zyl-ai-webui ghcr.io/open-webui/open-webui:main "bash start.sh" open-webui 14 minutes ago Up 14 minutes (healthy) 0.0.0.0:3000->8080/tcp, :::3000->8080/tcp
🔗 网络连接:
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN -
tcp6 0 0 :::3000 :::* LISTEN -
🤖 模型状态:
NAME ID SIZE MODIFIED
nomic-embed-text:latest 0a109f422b47 274 MB 3 hours ago
codellama:7b 8fdf8f752f6e 3.8 GB 19 hours ago
🌐 访问测试:
✅ Web服务正常
================================================
🚀 AI代码助手平台已就绪!
================================================
🌐 访问地址: http://192.168.20.8:3000
🤖 默认模型: codellama:7b
👥 用户限制: 4人并发
💡 功能: 代码生成、调试、多语言支持
================================================
- 使用指南
🎯 访问流程
- 打开浏览器访问:http://您的服务器IP:3000
- 注册账户:点击右上角 "Sign Up" 创建账户
- 开始使用:在聊天界面输入代码相关问题
功能特性:
- ✅ 代码生成和补全
- ✅ 代码调试和解释
- ✅ 多语言支持(Python, Java, JavaScript等)
- ✅ 对话历史记录
- ✅ 用户管理功能
🛠️ 管理命令
yaml
# 查看状态
docker compose ps
# 查看日志
docker compose logs --tail=20
# 重启服务
docker compose restart
# 停止服务
docker compose down
# 更新服务
docker compose pull && docker compose up -d
cd ~/zhangyuling_ai_ollama_7b/webui
创建功能完整的全局管理脚本
yaml
cat > ai-manager.sh << 'EOF'
#!/bin/bash
# 定义项目目录
PROJECT_DIR="/home/great/zhangyuling_ai_ollama_7b/webui"
# 检查项目目录是否存在
if [ ! -d "$PROJECT_DIR" ]; then
echo "❌ 错误:项目目录不存在: $PROJECT_DIR"
exit 1
fi
# 切换到项目目录
cd "$PROJECT_DIR"
show_status() {
echo "=== 🤖 AI代码助手平台管理 ==="
echo "📍 项目目录: $PROJECT_DIR"
echo ""
# 获取服务器IP
SERVER_IP=$(hostname -I | awk '{print $1}')
# 检查服务状态
if docker compose ps 2>/dev/null | grep -q "Up"; then
echo "✅ 服务状态: 运行中"
echo "🌐 访问地址: http://${SERVER_IP}:3000"
else
echo "❌ 服务状态: 停止"
fi
echo ""
echo "📊 资源使用:"
echo " 内存: $(free -h | grep Mem | awk '{print $3 "/" $2}')"
echo " 磁盘: $(df -h . | tail -1 | awk '{print $4}') 可用"
}
case "$1" in
status)
show_status
;;
start)
echo "🚀 启动AI代码助手服务..."
docker compose up -d
sleep 3
show_status
;;
stop)
echo "🛑 停止服务..."
docker compose down
echo "✅ 服务已停止"
;;
restart)
echo "🔄 重启服务..."
docker compose restart
sleep 2
show_status
;;
logs)
echo "📋 查看实时日志 (Ctrl+C退出)..."
docker compose logs -f
;;
update)
echo "📦 更新服务..."
docker compose down
docker compose pull
docker compose up -d
echo "✅ 服务更新完成"
;;
monitor)
echo "📊 实时监控 (Ctrl+C退出)..."
watch -n 5 '
echo "=== AI平台实时监控 ==="
echo "服务状态:"
docker compose ps --services 2>/dev/null | while read service; do
status=$(docker compose ps $service | tail -1 | awk "{print \$4}")
echo " $service: $status"
done
echo ""
echo "资源使用:"
echo " 内存: $(free -h | grep Mem | awk "{print \$3}/\$2}")
echo " 连接: $(netstat -an | grep :3000 | grep ESTABLISHED | wc -l) 个活跃用户"
'
;;
backup)
echo "💾 备份数据..."
BACKUP_FILE="ai-backup-$(date +%Y%m%d-%H%M).tar.gz"
tar -czf "../$BACKUP_FILE" data/
echo "✅ 备份完成: $BACKUP_FILE"
;;
clean)
echo "🧹 清理系统..."
docker system prune -f
echo "✅ 系统清理完成"
;;
help|--help|-h)
echo "🤖 AI代码助手平台管理工具"
echo ""
echo "用法: ai-manager [命令]"
echo ""
echo "可用命令:"
echo " status 查看服务状态"
echo " start 启动服务"
echo " stop 停止服务"
echo " restart 重启服务"
echo " logs 查看实时日志"
echo " update 更新服务版本"
echo " monitor 实时监控"
echo " backup 备份用户数据"
echo " clean 清理系统缓存"
echo " help 显示此帮助"
echo ""
echo "示例:"
echo " ai-manager status # 查看状态"
echo " ai-manager logs # 查看日志"
echo " ai-manager restart # 重启服务"
;;
*)
if [ -z "$1" ]; then
show_status
else
echo "❌ 未知命令: $1"
echo "使用 'ai-manager help' 查看可用命令"
fi
;;
esac
EOF
设置执行权限
yaml
chmod +x ai-manager.sh
📋 故障排除
powershell
如果遇到问题:
查看详细错误
docker compose logs --tail=30
# 重启服务
docker compose restart
# 检查Ollama连接
curl http://localhost:11434/api/tags
#检查ollama配置文件
cat /etc/systemd/system/ollama.service.d/limit.conf
修改后生效
sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl status ollama
6. 折腾了一轮,发现7b的模型我的机器根本带不动!
跟踪耗时
powershell
sudo strace -e trace=file,openat,read,write,mmap -T ollama run qwen:4b "test" 2>&1 | grep -v ENOENT | awk '{if ($NF > 0.1) print}'
如果不是独显,性能会大幅度下降,将cpu调整到性能模式,会有所提升,但是依旧是十几秒
powershell
great@great-PC:~/zhangyuling_ai_ollama_7b/lib/ollama$ time ollama run --verbose llama3.2:1b "test"
Can I help you with something else?
total duration: 11.854634385s
load duration: 99.137755ms
prompt eval count: 26 token(s)
prompt eval duration: 1.354319757s
prompt eval rate: 19.20 tokens/s
eval count: 9 token(s)
eval duration: 10.40069241s
eval rate: 0.87 tokens/s
real 0m11.919s
user 0m0.014s
sys 0m0.007s