整体架构
公网访客
├── aimlc.cn → nginx → Halo (Docker, :8090) → MySQL 8.0
└── ai.aimlc.cn → nginx → 127.0.0.1:8083 → SSH 隧道 → 家里 llama.cpp云服务器
- 腾讯云 2 核 2G / CentOS 7.6 / 50G 盘 / 43.139.86.254
- Halo 2.27(Docker,Xmx512m)+ MySQL 8.0(同 compose 编排)
- nginx 反代 8090,HTTPS 用 acme.sh 签发的 Let's Encrypt 证书
家里电脑
- E5-2680v4 / 32G 内存 / RX 580 2048SP 8G / 512G SSD + 2T HDD
- llama.cpp Vulkan 构建,7B 模型全量跑在显存里
- SSH 反向隧道(Windows 自带 ssh.exe,不用 frp,避免杀软误报)
数据库迁移
从 H2 迁到 MySQL,246 条数据零丢失。三个关键点:
- 迁移插件只认 MySQL 和 H2,PostgreSQL 和 MariaDB 都不行,产品名不对直接拒绝
- 必须开 ANSI_QUOTES,迁移插件用双引号包标识符,MySQL 默认把双引号当字符串
- LOAD DATA LOCAL INFILE 会静默导 0 行,改用 Python + pymysql 逐行写入才成功
显卡这条路
RX 580 不支持 ROCm(gfx803 被官方砍掉),Ollama 也识别不到这块卡。最后走通的组合是 llama.cpp + Vulkan 后端:
- 驱动必须升级到 Adrenalin 23.x(31.0.21923)。旧驱动 20.45 会在显存分配阶段静默崩溃,b3557/b4458/b11925 三个版本全崩
- 驱动升级后一次跑通,3B 28 tok/s、7B 20.5 tok/s
- 升驱动后清一次
%LOCALAPPDATA%\AMD\VkCache让着色器重编
踩坑清单
| 现象 | 原因 | 解法 |
|---|---|---|
| 本地 curl 全部超时 | git-bash 带了 http_proxy | 加 --noproxy '*' |
| 模型下载总断 | 官方源走 Cloudflare | 换 ModelScope 国内源 |
| 计划任务起不来 | 权限不足 | 改用启动目录 + VBS 守护 |
| 流式输出一次性吐出 | nginx 开了 proxy_buffering | 该路径关闭 buffering |