🔄 卡若AI 同步 2026-03-06 12:41 | 更新:金仓、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个
This commit is contained in:
62
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/deploy_ollama_nas.sh
Executable file
62
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/deploy_ollama_nas.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 公司 NAS 千问小模型一键部署
|
||||
# 功能:在 NAS Docker 中安装 Ollama + qwen2.5:1.5b,并暴露外网端口 11401
|
||||
# 使用:bash deploy_ollama_nas.sh
|
||||
# ============================================
|
||||
|
||||
set -e
|
||||
NAS_USER="${NAS_USER:-fnvtk}"
|
||||
NAS_PASS="${NAS_PASS:-zhiqun1984}"
|
||||
# NAS 上 sudo 密码(可能与 SSH 不同,如大写 Z)
|
||||
SUDO_PASS="${SUDO_PASS:-Zhiqun1984}"
|
||||
NAS_HOST="${NAS_HOST:-open.quwanzhi.com}"
|
||||
NAS_SSH_PORT="${NAS_SSH_PORT:-22201}"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
COMPOSE_DIR="/volume1/docker/ollama"
|
||||
FRPC_TOML="/volume1/docker/frpc/frpc.toml"
|
||||
|
||||
echo ">>> 1. 创建目录并上传 docker-compose.yml"
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"mkdir -p $COMPOSE_DIR"
|
||||
# 使用 SSH 管道写入(避免 scp subsystem 不可用)
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"cat > $COMPOSE_DIR/docker-compose.yml" < "$SCRIPT_DIR/docker-compose.yml"
|
||||
|
||||
echo ">>> 2. 启动 Ollama 容器"
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"bash -c 'echo $SUDO_PASS | sudo -S /usr/local/bin/docker compose -f $COMPOSE_DIR/docker-compose.yml up -d'"
|
||||
|
||||
echo ">>> 3. 等待容器就绪后拉取千问小模型 qwen2.5:1.5b(约 1GB)"
|
||||
sleep 5
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"bash -c 'echo $SUDO_PASS | sudo -S /usr/local/bin/docker exec ollama-nas ollama pull qwen2.5:1.5b'"
|
||||
|
||||
echo ">>> 4. 配置 frp 外网端口 11401 → NAS 11434"
|
||||
# 若已存在 ollama 代理则跳过
|
||||
if sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" "grep -q 'nas-ollama' $FRPC_TOML 2>/dev/null"; then
|
||||
echo " frp 中已存在 nas-ollama,跳过"
|
||||
else
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"echo '
|
||||
# Ollama 千问小模型 API(外网端口 11401 → NAS 11434)
|
||||
[[proxies]]
|
||||
name = \"nas-ollama\"
|
||||
type = \"tcp\"
|
||||
localIP = \"127.0.0.1\"
|
||||
localPort = 11434
|
||||
remotePort = 11401
|
||||
' >> $FRPC_TOML"
|
||||
echo ">>> 5. 重启 frpc 使配置生效"
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"bash -c 'echo $SUDO_PASS | sudo -S /usr/local/bin/docker restart nas-frpc'"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo "部署完成。千问小模型 API 接口:"
|
||||
echo " 内网: http://192.168.1.201:11434"
|
||||
echo " 外网: http://open.quwanzhi.com:11401"
|
||||
echo " 模型: qwen2.5:1.5b"
|
||||
echo " 说明: 见 参考资料/NAS千问小模型API配置.md"
|
||||
echo "=============================================="
|
||||
24
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/docker-compose.yml
Normal file
24
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/docker-compose.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
# 公司 NAS 千问小模型 - Ollama 独立部署
|
||||
# 部署路径:/volume1/docker/ollama
|
||||
# 内网:http://192.168.1.201:11434 外网:http://open.quwanzhi.com:11401
|
||||
|
||||
services:
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama-nas
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11434:11434"
|
||||
environment:
|
||||
- OLLAMA_HOST=0.0.0.0
|
||||
volumes:
|
||||
- ollama-data:/root/.ollama
|
||||
# 小模型 1.5b 约 1GB,3b 约 2GB,按需调整内存限制
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
|
||||
volumes:
|
||||
ollama-data:
|
||||
driver: local
|
||||
142
01_卡资(金)/金仓_存储备份/群晖NAS管理/参考资料/NAS千问小模型API配置.md
Normal file
142
01_卡资(金)/金仓_存储备份/群晖NAS管理/参考资料/NAS千问小模型API配置.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# 公司 NAS 千问小模型 API 配置说明
|
||||
|
||||
> 部署位置:公司 NAS Docker(ollama-nas 容器)
|
||||
> 模型:qwen2.5:1.5b
|
||||
> 内网/外网均可调用,无需 API Key
|
||||
|
||||
---
|
||||
|
||||
## 一、接口地址
|
||||
|
||||
| 环境 | 基础 URL | 说明 |
|
||||
|------|----------|------|
|
||||
| **内网** | `http://192.168.1.201:11434` | 与 NAS 同网(如公司 WiFi) |
|
||||
| **外网** | `http://open.quwanzhi.com:11401` | 任意网络,经 frp 转发 |
|
||||
|
||||
外网需确保 **frp 服务端(42.194.245.239)已开放 11401 端口**;若无法访问,请在宝塔/安全组中放行 `11401/TCP`。
|
||||
|
||||
---
|
||||
|
||||
## 二、常用 API 端点
|
||||
|
||||
| 用途 | 方法 | 路径 |
|
||||
|------|------|------|
|
||||
| 模型列表 | GET | `/api/tags` |
|
||||
| 生成(流式/非流式) | POST | `/api/generate` |
|
||||
| 对话(OpenAI 兼容) | POST | `/v1/chat/completions` |
|
||||
|
||||
---
|
||||
|
||||
## 三、简单调用示例
|
||||
|
||||
### 1. 查看已安装模型
|
||||
|
||||
```bash
|
||||
# 外网
|
||||
curl -s http://open.quwanzhi.com:11401/api/tags | jq .
|
||||
|
||||
# 内网
|
||||
curl -s http://192.168.1.201:11434/api/tags | jq .
|
||||
```
|
||||
|
||||
### 2. 文本生成(curl)
|
||||
|
||||
```bash
|
||||
# 外网示例(qwen2.5:1.5b)
|
||||
curl -s http://open.quwanzhi.com:11401/api/generate -d '{
|
||||
"model": "qwen2.5:1.5b",
|
||||
"prompt": "用一句话介绍厦门",
|
||||
"stream": false
|
||||
}' | jq .
|
||||
```
|
||||
|
||||
### 3. 对话格式(OpenAI 兼容,便于接入各类客户端)
|
||||
|
||||
```bash
|
||||
curl -s http://open.quwanzhi.com:11401/v1/chat/completions -d '{
|
||||
"model": "qwen2.5:1.5b",
|
||||
"messages": [{"role": "user", "content": "你好,请简短回复"}],
|
||||
"stream": false
|
||||
}' | jq .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、环境变量配置(代码里使用)
|
||||
|
||||
在应用或脚本中配置 base URL,外网用 11401,内网用 11434:
|
||||
|
||||
```bash
|
||||
# 外网(默认)
|
||||
export OLLAMA_BASE_URL="http://open.quwanzhi.com:11401"
|
||||
|
||||
# 内网(与 NAS 同网时改用)
|
||||
# export OLLAMA_BASE_URL="http://192.168.1.201:11434"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、Python 简单配置
|
||||
|
||||
```python
|
||||
import os
|
||||
import requests
|
||||
|
||||
# 外网
|
||||
OLLAMA_BASE = os.environ.get("OLLAMA_BASE_URL", "http://open.quwanzhi.com:11401")
|
||||
|
||||
def chat(text: str, model: str = "qwen2.5:1.5b") -> str:
|
||||
r = requests.post(
|
||||
f"{OLLAMA_BASE}/api/generate",
|
||||
json={"model": model, "prompt": text, "stream": False},
|
||||
timeout=60,
|
||||
)
|
||||
r.raise_for_status()
|
||||
return r.json().get("response", "")
|
||||
|
||||
# 使用
|
||||
print(chat("用一句话介绍厦门"))
|
||||
```
|
||||
|
||||
若用 OpenAI 兼容接口(如 openai 库):
|
||||
|
||||
```python
|
||||
from openai import OpenAI
|
||||
|
||||
client = OpenAI(
|
||||
base_url="http://open.quwanzhi.com:11401/v1",
|
||||
api_key="ollama", # Ollama 不校验,可随意
|
||||
)
|
||||
r = client.chat.completions.create(
|
||||
model="qwen2.5:1.5b",
|
||||
messages=[{"role": "user", "content": "你好"}],
|
||||
)
|
||||
print(r.choices[0].message.content)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、Docker 部署与维护
|
||||
|
||||
- **一键部署(本机执行)**:
|
||||
`bash 群晖NAS管理/scripts/ollama/deploy_ollama_nas.sh`
|
||||
会完成:创建目录、上传 compose、启动容器、拉取 qwen2.5:1.5b、配置 frp 并重启 frpc。
|
||||
|
||||
- **NAS 上手动操作**:
|
||||
- 编排目录:`/volume1/docker/ollama/`
|
||||
- 启动:`sudo docker compose -f /volume1/docker/ollama/docker-compose.yml up -d`
|
||||
- 拉取其他模型:`sudo docker exec ollama-nas ollama pull qwen2.5:3b`
|
||||
- 查看日志:`sudo docker logs -f ollama-nas`
|
||||
|
||||
- **外网端口**:frp 将 **11401** → NAS **11434**,代理名 `nas-ollama`。若未生效,检查 frpc 配置并重启 `nas-frpc`,以及 frps 是否开放 11401。
|
||||
|
||||
---
|
||||
|
||||
## 七、接口速查
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 外网 Base URL | `http://open.quwanzhi.com:11401` |
|
||||
| 内网 Base URL | `http://192.168.1.201:11434` |
|
||||
| 默认模型 | `qwen2.5:1.5b` |
|
||||
| 认证 | 无(内网服务,外网经 frp 暴露,按需在 frp 或上层加鉴权) |
|
||||
Reference in New Issue
Block a user