用 Docker 搭一个自己的 AI 搜索:从 SearXNG 到大模型配置全流程命令实录
AI搜索 Docker部署教程|附完整命令
随着大模型应用逐渐普及,传统搜索引擎已经无法完全满足“总结式搜索”“追问式搜索”“带来源引用的答案生成”等需求。所谓 AI搜索,通常是指将搜索引擎、网页抓取、向量检索、大语言模型结合起来,让用户输入问题后,系统自动检索网络内容,再由 AI 进行归纳、总结和回答,并尽可能附带引用来源。
本文将以一套较常见的开源 AI 搜索方案为例,介绍如何使用 Docker 快速部署一个可自用、可局域网访问的 AI 搜索服务。整体方案会包含:
- AI 搜索前端与后端服务;
- 搜索引擎服务;
- 大模型接口配置;
- Docker Compose 一键部署;
- 常见问题排查;
- 完整命令示例。
本文适合希望在服务器、NAS、云主机或本地 Linux 环境中部署 AI 搜索工具的用户阅读。
一、AI 搜索是什么?
AI 搜索并不是简单地把 ChatGPT 或其他大模型接入搜索框,而是通常包含以下几个步骤:
- 用户输入问题;
- 系统调用搜索引擎进行关键词检索;
- 抓取网页标题、摘要或正文内容;
- 将检索结果整理后发送给大语言模型;
- 大模型根据搜索结果生成答案;
- 返回带有来源引用的总结结果;
- 用户可以继续追问。
与普通搜索引擎相比,AI 搜索的优势是:
- 可以直接给出结构化答案;
- 支持上下文追问;
- 能够减少逐个打开网页的时间;
- 适合资料整理、技术检索、产品调研、论文初筛等场景。
但它也有局限:
- 结果依赖搜索质量;
- 大模型可能产生幻觉;
- 对 API Key 或本地模型资源有要求;
- 不适合完全替代严肃事实核查。
因此,比较合理的使用方式是:把 AI 搜索当作“信息聚合助手”,而不是绝对权威来源。
二、部署方案说明
本文采用 Docker Compose 部署方式。为了便于理解,我们可以将整个系统拆成三部分:
| 模块 | 作用 |
|---|---|
| AI 搜索应用 | 提供网页界面、问答逻辑、结果整理 |
| 搜索服务 | 提供网页搜索结果,例如 SearXNG |
| 大模型服务 | OpenAI、兼容 OpenAI API 的模型,或本地 Ollama |
在实际部署中,常见组合有两种:
方案一:AI 搜索应用 + SearXNG + OpenAI兼容API
这种方案适合已经拥有大模型 API Key 的用户,例如:
- OpenAI API;
- Azure OpenAI;
- DeepSeek API;
- 通义千问兼容接口;
- 智谱 AI;
- Moonshot;
- OpenRouter;
- 其他支持 OpenAI API 格式的平台。
优点是部署简单,服务器压力小。
方案二:AI 搜索应用 + SearXNG + Ollama本地模型
这种方案适合希望完全本地化部署的用户。
优点是数据更可控,不强依赖外部模型 API。缺点是对服务器性能要求更高,尤其是内存、CPU 或 GPU。
本文会重点演示 Docker Compose 部署结构,并分别给出 API 模型与 Ollama 模型的配置方法。
三、服务器环境要求
建议环境如下:
| 项目 | 建议配置 |
|---|---|
| 操作系统 | Ubuntu 20.04 / 22.04 / 24.04,Debian 11/12,CentOS Stream 等 |
| CPU | 2 核及以上 |
| 内存 | 2GB 起步,推荐 4GB 以上 |
| 磁盘 | 至少 10GB 可用空间 |
| Docker | 20.10 以上 |
| Docker Compose | v2 版本 |
| 网络 | 能访问模型 API 或可拉取 Docker 镜像 |
如果你准备用 Ollama 本地模型,建议配置更高:
| 模型规模 | 建议内存 |
|---|---|
| 1B-3B | 4GB-8GB |
| 7B | 8GB-16GB |
| 14B | 16GB-32GB |
| 32B 以上 | 建议 GPU 或高内存服务器 |
四、安装 Docker 和 Docker Compose
如果你的服务器还没有安装 Docker,可以按照下面步骤操作。
以下命令以 Ubuntu / Debian 为例。
1. 更新系统软件包
sudo apt update
sudo apt upgrade -y
2. 安装基础依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
3. 添加 Docker 官方 GPG Key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
如果你使用的是 Debian,可以将上面的 ubuntu 替换为 debian。
4. 添加 Docker 软件源
Ubuntu 用户执行:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Debian 用户执行:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6. 检查 Docker 版本
docker version
docker compose version
如果能正常输出版本号,说明安装成功。
7. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
8. 可选:允许当前用户直接执行 Docker
默认情况下,普通用户执行 Docker 命令可能需要 sudo。如果你希望当前用户直接使用 Docker,可以执行:
sudo usermod -aG docker $USER
执行后需要重新登录 SSH,或者执行:
newgrp docker
然后测试:
docker ps
五、创建 AI 搜索项目目录
建议将服务统一放到 /opt 目录下,方便维护。
sudo mkdir -p /opt/ai-search
sudo chown -R $USER:$USER /opt/ai-search
cd /opt/ai-search
创建必要目录:
mkdir -p searxng redis data
目录结构大致如下:
/opt/ai-search
├── docker-compose.yml
├── .env
├── searxng
├── redis
└── data
六、准备环境变量文件
在项目目录下创建 .env 文件:
nano .env
写入以下内容:
# 站点访问地址
APP_PORT=3000
# 大模型配置
OPENAI_API_KEY=你的_API_KEY
OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
# 搜索服务地址
SEARXNG_URL=http://searxng:8080
# Redis配置
REDIS_URL=redis://redis:6379
如果你使用的是兼容 OpenAI 格式的第三方模型接口,可以修改:
OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat
OPENAI_API_KEY=你的_DeepSeek_API_KEY
或者类似:
OPENAI_API_BASE=https://openrouter.ai/api/v1
MODEL_NAME=openai/gpt-4o-mini
OPENAI_API_KEY=你的_OpenRouter_API_KEY
需要注意的是,不同 AI 搜索项目使用的环境变量名称可能略有不同。如果你的项目要求变量名为 API_KEY、OPENAI_BASE_URL 或 LLM_MODEL,需要按照对应项目文档调整。本文给出的变量名称主要用于说明通用思路。
七、编写 Docker Compose 文件
在 /opt/ai-search 目录下创建 docker-compose.yml:
nano docker-compose.yml
写入以下内容:
services:
ai-search:
image: itzcrazykns1337/perplexica:main
container_name: ai-search
restart: unless-stopped
ports:
- "${APP_PORT}:3000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENAI_API_BASE=${OPENAI_API_BASE}
- MODEL_NAME=${MODEL_NAME}
- SEARXNG_URL=${SEARXNG_URL}
- REDIS_URL=${REDIS_URL}
depends_on:
- searxng
- redis
networks:
- ai-search-net
searxng:
image: searxng/searxng:latest
container_name: ai-search-searxng
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- BASE_URL=http://localhost:8080/
- INSTANCE_NAME=AI Search SearXNG
networks:
- ai-search-net
redis:
image: redis:7-alpine
container_name: ai-search-redis
restart: unless-stopped
volumes:
- ./redis:/data
command: redis-server --appendonly yes
networks:
- ai-search-net
networks:
ai-search-net:
driver: bridge
说明:
ai-search是 AI 搜索主服务;searxng是元搜索引擎服务;redis用于缓存或临时数据存储;APP_PORT=3000表示你可以通过http://服务器IP:3000访问;searxng的8080端口也暴露了,便于单独测试搜索是否正常。
提醒:不同开源 AI 搜索项目的镜像名称、环境变量、挂载目录可能不同。如果你使用的是其他项目,例如 Open WebUI、AnythingLLM、Morphik、SearchXNG + 自写后端等,需要按照实际项目文档调整。
八、启动服务
在 /opt/ai-search 目录下执行:
docker compose pull
docker compose up -d
查看容器状态:
docker compose ps
正常情况下,你应该看到类似输出:
NAME IMAGE STATUS
ai-search itzcrazykns1337/perplexica:main Up
ai-search-searxng searxng/searxng:latest Up
ai-search-redis redis:7-alpine Up
查看日志:
docker compose logs -f
单独查看 AI 搜索服务日志:
docker logs -f ai-search
查看 SearXNG 日志:
docker logs -f ai-search-searxng
九、访问 AI 搜索服务
在浏览器中访问:
http://服务器IP:3000
如果是在本机部署,可以访问:
http://localhost:3000
如果你部署在云服务器上,需要确认安全组已经放行端口:
- TCP 3000:AI 搜索页面;
- TCP 8080:SearXNG 测试页面,可选。
如果你只希望访问 AI 搜索,不希望暴露 SearXNG,可以在 docker-compose.yml 中去掉:
ports:
- "8080:8080"
改为只在 Docker 内部网络访问。
修改后执行:
docker compose up -d
十、测试 SearXNG 是否可用
AI 搜索能否正常回答,很大程度取决于搜索服务能否返回结果。
你可以打开:
http://服务器IP:8080
搜索一个关键词,例如:
Docker Compose 教程
如果能正常返回搜索结果,说明 SearXNG 服务正常。
也可以使用命令行测试:
curl "http://localhost:8080/search?q=Docker&format=json"
如果返回 JSON 数据,则说明搜索接口可用。
十一、使用 OpenAI 兼容模型接口
如果你使用的是 OpenAI 官方接口,.env 可以这样写:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
如果你使用 DeepSeek:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat
如果你使用 OpenRouter:
OPENAI_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxx
OPENAI_API_BASE=https://openrouter.ai/api/v1
MODEL_NAME=openai/gpt-4o-mini
修改 .env 后,需要重启容器:
docker compose down
docker compose up -d
或者:
docker compose restart ai-search
十二、使用 Ollama 部署本地模型
如果你不想使用外部 API,也可以在服务器上部署 Ollama。
1. 使用 Docker 部署 Ollama
在 docker-compose.yml 中增加一个 ollama 服务:
ollama:
image: ollama/ollama:latest
container_name: ai-search-ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./data/ollama:/root/.ollama
networks:
- ai-search-net
完整示例可以改成:
services:
ai-search:
image: itzcrazykns1337/perplexica:main
container_name: ai-search
restart: unless-stopped
ports:
- "${APP_PORT}:3000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENAI_API_BASE=${OPENAI_API_BASE}
- MODEL_NAME=${MODEL_NAME}
- SEARXNG_URL=${SEARXNG_URL}
- REDIS_URL=${REDIS_URL}
depends_on:
- searxng
- redis
- ollama
networks:
- ai-search-net
searxng:
image: searxng/searxng:latest
container_name: ai-search-searxng
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- BASE_URL=http://localhost:8080/
- INSTANCE_NAME=AI Search SearXNG
networks:
- ai-search-net
redis:
image: redis:7-alpine
container_name: ai-search-redis
restart: unless-stopped
volumes:
- ./redis:/data
command: redis-server --appendonly yes
networks:
- ai-search-net
ollama:
image: ollama/ollama:latest
container_name: ai-search-ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./data/ollama:/root/.ollama
networks:
- ai-search-net
networks:
ai-search-net:
driver: bridge
启动:
docker compose up -d
2. 拉取模型
例如拉取 Qwen2.5 7B 模型:
docker exec -it ai-search-ollama ollama pull qwen2.5:7b
或者拉取 Llama 3.1 8B:
docker exec -it ai-search-ollama ollama pull llama3.1:8b
查看已安装模型:
docker exec -it ai-search-ollama ollama list
测试模型:
docker exec -it ai-search-ollama ollama run qwen2.5:7b
输入一个问题,例如:
请用一句话介绍 Docker Compose。
如果模型可以正常回答,说明 Ollama 运行成功。
3. 配置 AI 搜索使用 Ollama
Ollama 提供兼容 OpenAI 风格的接口,通常地址为:
http://ollama:11434/v1
修改 .env:
OPENAI_API_KEY=ollama
OPENAI_API_BASE=http://ollama:11434/v1
MODEL_NAME=qwen2.5:7b
SEARXNG_URL=http://searxng:8080
REDIS_URL=redis://redis:6379
APP_PORT=3000
然后重启:
docker compose restart ai-search
如果 AI 搜索应用不支持 Ollama 的 OpenAI 兼容接口,需要到应用设置页面中选择 Ollama Provider,并填写:
Ollama Base URL: http://ollama:11434
Model: qwen2.5:7b
十三、配置反向代理和域名访问
如果你希望通过域名访问,例如:
https://search.example.com
推荐使用 Nginx 反向代理。
1. 安装 Nginx
sudo apt install -y nginx
2. 创建站点配置
sudo nano /etc/nginx/sites-available/ai-search.conf
写入:
server {
listen 80;
server_name search.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/ai-search.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
3. 配置 HTTPS 证书
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d search.example.com
按照提示输入邮箱并确认即可。
证书申请完成后,访问:
https://search.example.com
十四、增加访问密码保护
如果 AI 搜索服务部署在公网,强烈建议增加访问控制。你可以通过应用自身的登录功能、Nginx Basic Auth、Cloudflare Access 或防火墙限制来源 IP 来保护服务。
下面以 Nginx Basic Auth 为例。
1. 安装 htpasswd 工具
sudo apt install -y apache2-utils
2. 创建用户名和密码
sudo htpasswd -c /etc/nginx/.ai-search.htpasswd admin
系统会提示输入密码。
3. 修改 Nginx 配置
sudo nano /etc/nginx/sites-available/ai-search.conf
在 location / 中加入:
auth_basic "AI Search Login";
auth_basic_user_file /etc/nginx/.ai-search.htpasswd;
完整示例:
server {
listen 80;
server_name search.example.com;
location / {
auth_basic "AI Search Login";
auth_basic_user_file /etc/nginx/.ai-search.htpasswd;
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
检查并重载:
sudo nginx -t
sudo systemctl reload nginx
十五、常用运维命令
查看所有容器
docker ps
查看项目容器
cd /opt/ai-search
docker compose ps
启动服务
docker compose up -d
停止服务
docker compose down
重启服务
docker compose restart
重启某个容器
docker compose restart ai-search
查看实时日志
docker compose logs -f
查看最近 100 行日志
docker compose logs --tail=100
更新镜像
cd /opt/ai-search
docker compose pull
docker compose up -d
清理无用镜像
docker image prune -f
清理无用容器、网络和镜像
docker system prune -f
谨慎执行以下命令,因为它可能删除未使用的数据卷:
docker system prune -a --volumes
十六、常见问题排查
1. 页面打不开
先检查容器是否启动:
docker compose ps
查看端口是否监听:
ss -lntp | grep 3000
查看日志:
docker logs -f ai-search
如果是云服务器,检查安全组是否放行 3000 端口。
2. AI 搜索页面能打开,但搜索无结果
检查 SearXNG:
curl "http://localhost:8080/search?q=test&format=json"
如果没有返回结果,查看日志:
docker logs -f ai-search-searxng
也可以进入容器测试网络:
docker exec -it ai-search-searxng sh
3. 模型 API 报错 401
通常是 API Key 错误。
检查 .env:
cat .env
确认:
OPENAI_API_KEY=你的真实Key
OPENAI_API_BASE=正确的接口地址
MODEL_NAME=正确的模型名称
修改后重启:
docker compose restart ai-search
4. 模型 API 报错 404
通常是模型名称错误,或者接口地址不兼容。
例如 DeepSeek 常用:
OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat
OpenAI 常用:
OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
Ollama 常用:
OPENAI_API_BASE=http://ollama:11434/v1
MODEL_NAME=qwen2.5:7b
5. Ollama 模型响应很慢
可能原因包括:
- 模型太大;
- 服务器内存不足;
- 没有 GPU 加速;
- 并发请求过多;
- 首次加载模型需要时间。
可以尝试更小模型:
docker exec -it ai-search-ollama ollama pull qwen2.5:3b
然后修改 .env:
MODEL_NAME=qwen2.5:3b
重启服务:
docker compose restart ai-search
6. Docker 镜像拉取很慢
可以考虑配置 Docker 镜像加速器。创建或修改:
sudo nano /etc/docker/daemon.json
示例:
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
然后重新拉取:
docker compose pull
十七、备份与迁移
AI 搜索服务通常需要备份以下内容:
.env;docker-compose.yml;searxng配置目录;redis数据目录;data数据目录;- Ollama 模型目录,如果使用本地模型。
备份命令:
cd /opt
tar -czvf ai-search-backup-$(date +%F).tar.gz ai-search
恢复时:
cd /opt
tar -xzvf ai-search-backup-2025-01-01.tar.gz
cd ai-search
docker compose up -d
如果迁移到新服务器,需要先安装 Docker 和 Docker Compose。
十八、安全建议
如果你的 AI 搜索部署在公网,建议至少做到以下几点:
- 不要直接暴露 Redis 端口;
- 不要把 SearXNG 暴露给公网,除非确实需要;
- 使用 HTTPS;
- 增加登录认证;
- 定期更新镜像;
- 不要把
.env文件上传到公开仓库; - API Key 泄露后应立即作废并重新生成;
- 如果使用云服务器,建议安全组只开放必要端口;
- 对高频访问做好限流,避免 API 费用失控。
十九、完整一键部署命令示例
下面给出一个从创建目录到启动服务的完整命令示例。你可以根据自己的 API Key 修改后执行。
sudo mkdir -p /opt/ai-search
sudo chown -R $USER:$USER /opt/ai-search
cd /opt/ai-search
mkdir -p searxng redis data
cat > .env <<'EOF'
APP_PORT=3000
OPENAI_API_KEY=请替换为你的API_KEY
OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
SEARXNG_URL=http://searxng:8080
REDIS_URL=redis://redis:6379
EOF
cat > docker-compose.yml <<'EOF'
services:
ai-search:
image: itzcrazykns1337/perplexica:main
container_name: ai-search
restart: unless-stopped
ports:
- "${APP_PORT}:3000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENAI_API_BASE=${OPENAI_API_BASE}
- MODEL_NAME=${MODEL_NAME}
- SEARXNG_URL=${SEARXNG_URL}
- REDIS_URL=${REDIS_URL}
depends_on:
- searxng
- redis
networks:
- ai-search-net
searxng:
image: searxng/searxng:latest
container_name: ai-search-searxng
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- BASE_URL=http://localhost:8080/
- INSTANCE_NAME=AI Search SearXNG
networks:
- ai-search-net
redis:
image: redis:7-alpine
container_name: ai-search-redis
restart: unless-stopped
volumes:
- ./redis:/data
command: redis-server --appendonly yes
networks:
- ai-search-net
networks:
ai-search-net:
driver: bridge
EOF
docker compose pull
docker compose up -d
docker compose ps
部署完成后访问:
http://服务器IP:3000
二十、总结
通过 Docker 部署 AI 搜索服务并不复杂,核心步骤可以概括为:
- 安装 Docker 和 Docker Compose;
- 创建项目目录;
- 编写
.env环境变量; - 编写
docker-compose.yml; - 启动 AI 搜索、SearXNG、Redis 等服务;
- 配置大模型 API 或本地 Ollama;
- 根据需要配置域名、HTTPS 和访问认证。
如果你只是个人使用,推荐使用“AI 搜索应用 + SearXNG + OpenAI兼容API”的方案,部署简单、响应速度快。如果你更重视数据本地化,可以使用 Ollama 部署本地模型,但需要准备更高性能的服务器。
AI 搜索的价值不在于完全替代传统搜索,而在于帮助我们更快地理解信息、整理结果、形成初步判断。对于技术排查、资料检索、产品调研和日常知识查询来说,自建一个 AI 搜索服务会非常实用。