用宝塔面板的服务器上跑 AI 工具,有些坑比较特别。这篇记录怎么在宝塔环境里把 Ollama、Docker 这些跑起来,不跟宝塔自带的服务打架。
为什么宝塔用户需要 Docker
宝塔本身能管 PHP、Nginx、MySQL,但 AI 工具基本都用 Docker 部署。宝塔对 Docker 的支持靠”Docker 管理器”插件,说实话不太好用,偶尔还跟宝塔自己的 Nginx 冲突。
我的建议:宝塔管传统服务(网站、数据库),AI 工具用命令行管 Docker。两边各干各的,互不干扰。
装 Docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
apt install -y docker-compose-plugin装完验证 docker compose version。
Ollama 的装法
Ollama 不一定非要用 Docker,直接装更省事:
curl -fsSL https://ollama.com/install.sh | sh默认跑在 127.0.0.1:11434,不占 80/443,跟宝塔完全兼容。要局域网访问就改环境变量 OLLAMA_HOST=0.0.0.0。
用宝塔 Nginx 反代 Docker 容器
这是关键。假设你想用 https://ai.95bok.cn 访问 Open WebUI:
第一步,宝塔添加站点:域名 ai.95bok.cn,PHP 版本选纯静态,不需要数据库。
第二步,站点设置 → 反向代理 → 添加:代理名随便填,目标 URL http://127.0.0.1:3000,发送域名 $host。
第三步,手动优化 Nginx 配置(站点设置 → 配置文件),location 块里加上 WebSocket 支持:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 100m;这三行不加的话,Open WebUI 的实时通信会出问题。宝塔自动生成的反代配置经常漏掉这个。
第四步,开 SSL。站点设置 → SSL → Let’s Encrypt → 申请。
端口规划
宝塔环境端口容易冲突,提前排好:
宝塔面板 8888,网站 80/443,phpMyAdmin 888,MySQL 3306——这些别动。
Docker 容器用其他端口:Ollama 11434,Open WebUI 3000,n8n 5678,Dify 8080,AnythingLLM 3001。
原则:Docker 容器只绑 127.0.0.1,外面通过宝塔 Nginx 反代访问。安全好管理,SSL 统一由宝塔处理。
防火墙
宝塔 → 安全 → 放行端口。推荐只开 80/443 和 SSH 端口,其他全通过 Nginx 反代走。不要直接把 Docker 端口开放到公网。
几个踩过的坑
端口冲突。宝塔已占 80/443,Docker Nginx 不能再绑。解决:用宝塔 Nginx 做反代,Docker 容器不暴露 80/443。
宝塔改配置覆盖反代。在宝塔站点设置里改 PHP 版本、加伪静态时,宝塔会重写 Nginx 配置。用宝塔的反向代理功能添加,不要手动改配置文件。
Docker 容器重启后没自动起。compose 文件里加 restart: unless-stopped,然后 systemctl enable docker。
Docker 访问宝塔的 MySQL。通过 Docker 网关 IP 172.17.0.1 访问,地址填 172.17.0.1:3306。