宝塔面板 + Docker 部署本地 AI 全家桶:端口规划、Nginx 反代、避坑指南

用宝塔面板的服务器上跑 AI 工具,有些坑比较特别。这篇记录怎么在宝塔环境里把 Ollama、Docker 这些跑起来,不跟宝塔自带的服务打架。


为什么宝塔用户需要 Docker

宝塔本身能管 PHP、Nginx、MySQL,但 AI 工具基本都用 Docker 部署。宝塔对 Docker 的支持靠”Docker 管理器”插件,说实话不太好用,偶尔还跟宝塔自己的 Nginx 冲突。

我的建议:宝塔管传统服务(网站、数据库),AI 工具用命令行管 Docker。两边各干各的,互不干扰。


装 Docker

BASH
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
apt install -y docker-compose-plugin

装完验证 docker compose version

Ollama 的装法

Ollama 不一定非要用 Docker,直接装更省事:

BASH
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 支持:

NGINX
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

发表评论