我现在查资料,越来越少只看传统搜索结果页。
不是搜索引擎没用了,而是很多问题本来就不适合一页页点开:比如“某个工具怎么部署”“这个报错怎么修”“几种方案有什么区别”。普通搜索给你 10 个链接,你还得自己打开、对比、筛掉广告和旧文章。
Perplexity 这类 AI 搜索工具火起来,就是因为它把“搜索 + 总结 + 引用来源”揉到了一起。
但问题也很明显:你搜了什么、点了什么、问了什么,默认都在别人的平台里。
如果你想要一个自己控制的 AI 搜索入口,可以看看 Perplexica。现在项目在 GitHub 上也逐步用 Vane 这个名字,但很多人还是按旧名字 Perplexica 搜。为了方便理解,下面我还是主要叫 Perplexica。
它的思路很直接:
- 用 SearXNG 做搜索后端
- 用大模型整理搜索结果
- 给你一个带引用来源的回答
- 可以接 OpenAI、Claude、Groq,也可以接 Ollama 本地模型
这篇就按 VPS 自托管来讲:怎么部署、要什么配置、怎么配 HTTPS、为什么 SearXNG 的 JSON 很关键,以及哪些坑别踩。
Perplexica 不是普通搜索引擎,也不是纯聊天机器人。
它适合的是这种场景:
| 需求 | 适不适合 Perplexica | 原因 |
|---|---|---|
| 想自建一个类似 Perplexity 的 AI 搜索 | 适合 | 搜索结果会被模型整理成回答 |
| 想减少搜索行为被平台记录 | 适合 | 搜索入口和 SearXNG 都在自己 VPS 上 |
| 做 SEO、竞品、技术资料检索 | 适合 | 能快速汇总多个来源 |
| 只想搭一个普通搜索框 | 不一定 | 单独 SearXNG 更轻 |
| 想做私有文档问答 | 不太适合 | AnythingLLM / Dify 更合适 |
| 想跑完全本地 AI 搜索 | 可以,但机器要够大 | Ollama 本地推理很吃资源 |
我会把它理解成:SearXNG 负责找资料,大模型负责读资料。
如果你只是想搜网页,SearXNG 就够了。如果你希望搜索后直接得到带来源的答案,Perplexica 才有意义。
这里也要分两种情况。
如果你用 OpenAI、Claude、Groq、OpenRouter 这类 API,VPS 压力不大。
VPS 主要跑:
- Perplexica / Vane Web 应用
- 内置或独立 SearXNG
- SQLite / 配置数据
- 反向代理和 HTTPS
建议配置:
| 用法 | VPS 配置 |
|---|---|
| 个人测试 | 1 核 / 2GB / 20GB SSD |
| 长期自用 | 2 核 / 4GB / 40GB SSD |
| 多人使用 | 4 核 / 8GB / 80GB SSD |
这类部署不需要 GPU。模型推理在 API 服务商那里,VPS 只是负责搜索和转发请求。
如果你想让模型也跑在 VPS 上,配置要求就上来了。
| 方案 | 建议配置 |
|---|---|
| Perplexica + 云端 API | 2 核 4GB 很舒服 |
| Perplexica + Ollama 小模型 | 4 核 16GB 起步 |
| 想跑 14B 以上模型 | GPU VPS 或本地显卡机器 |
便宜小鸡可以跑 Perplexica,但别指望 2GB 内存同时跑 Ollama 7B 模型。能启动和能用是两回事。
官方推荐的简单方式是 Docker。Perplexica 的 full 镜像把 SearXNG 一起打进去了,所以不需要单独部署搜索后端。
先登录 VPS:
ssh root@your_server_ip
更新系统:
apt update && apt upgrade -y
安装 Docker:
apt install -y ca-certificates curl gnupg ufw
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
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" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
确认 Docker:
docker --version
docker compose version
运行 Perplexica:
docker run -d \
--name perplexica \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
-v perplexica-data:/home/perplexica/data \
itzcrazykns1337/perplexica:latest
这里我故意用了:
127.0.0.1:3000:3000
意思是只允许本机访问,不直接暴露公网。后面用 Caddy 反代到 HTTPS 域名。
看容器状态:
docker ps --filter "name=perplexica"
看日志:
docker logs perplexica --tail=100
本机测试:
curl -I http://127.0.0.1:3000
如果返回 200、302 或类似响应,说明服务基本起来了。
如果你更喜欢可维护一点的方式,用 Compose。
创建目录:
mkdir -p /opt/perplexica
cd /opt/perplexica
写 docker-compose.yml:
services:
perplexica:
image: itzcrazykns1337/perplexica:latest
container_name: perplexica
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
volumes:
- perplexica-data:/home/perplexica/data
volumes:
perplexica-data:
启动:
docker compose up -d
检查:
docker compose ps
docker logs perplexica --tail=100
这个方案适合大多数人:一个容器,内置 SearXNG,数据用 volume 持久化。
假设你准备使用:
search.example.com
DNS 添加 A 记录:
search.example.com -> your_server_ip
安装 Caddy:
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install -y caddy
编辑配置:
nano /etc/caddy/Caddyfile
写入:
search.example.com {
reverse_proxy 127.0.0.1:3000
}
检查并重载:
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
现在访问:
https://search.example.com
Caddy 会自动申请和续期 HTTPS 证书。
如果你使用 Caddy 反代,只需要开放 SSH、HTTP、HTTPS:
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status
不建议把 3000 端口直接暴露公网:
ufw deny 3000/tcp
如果前面 Docker 已经绑定 127.0.0.1:3000:3000,外部本来就访问不到 3000,这样更稳。
打开网页后,先配置 AI Provider。
常见选择:
| Provider | 适合谁 |
|---|---|
| OpenAI | 想省事、回答质量稳定 |
| Claude | 长文总结、解释类问题多 |
| Groq | 想要更快响应 |
| OpenRouter | 想一个 Key 接多个模型 |
| Ollama | 想本地跑模型,数据尽量不出机器 |
如果你只是个人自用,我建议先用 API Provider 跑通流程。等确定真的需要本地模型,再折腾 Ollama。
配置完成后,问一个简单问题测试:
最近 Docker Compose 部署自托管服务有哪些常见坑?
重点看三件事:
- 能不能返回答案
- 有没有引用来源
- 搜索结果是否和问题相关
如果没有搜索来源,只像普通聊天机器人,那就要查 SearXNG 是否正常。
如果你想接 Ollama,先在宿主机安装:
curl -fsSL https://ollama.com/install.sh | sh
拉一个模型:
ollama pull qwen2.5:7b
测试 Ollama:
curl http://127.0.0.1:11434/api/tags
如果 Perplexica 在 Docker 容器里,它不能用 localhost 访问宿主机的 Ollama。
Linux 上更稳的做法是 Compose 里加:
extra_hosts:
- "host.docker.internal:host-gateway"
完整示例:
services:
perplexica:
image: itzcrazykns1337/perplexica:latest
container_name: perplexica
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- perplexica-data:/home/perplexica/data
volumes:
perplexica-data:
然后在网页里把 Ollama 地址填成:
http://host.docker.internal:11434
别填 http://localhost:11434。那是容器自己,不是宿主机。
单容器 full 镜像适合快速部署,但如果你想更细地控制搜索引擎,或者想让多个工具共用一个 SearXNG,就可以独立部署 SearXNG,再用 slim 版 Perplexica 连接它。
比如:
- Perplexica 用 SearXNG
- Open WebUI 也接 SearXNG 做 Web Search
- 你想单独调整搜索引擎、语言、安全搜索
- 你要控制 SearXNG 的访问策略
这时可以用 perplexica:slim-latest。
创建目录:
mkdir -p /opt/perplexica/searxng
cd /opt/perplexica
创建 SearXNG 配置:
cat > searxng/settings.yml << 'EOF'
use_default_settings: true
server:
secret_key: "replace-with-a-long-random-secret"
search:
formats:
- html
- json
EOF
注意这里的 json 很关键。Perplexica 调用 SearXNG 时需要 JSON 结果,如果没启用,经常会出现“能打开 SearXNG,但 Perplexica 没搜索结果”的情况。
写 Compose:
services:
searxng:
image: searxng/searxng:latest
container_name: perplexica-searxng
restart: unless-stopped
volumes:
- ./searxng:/etc/searxng
networks:
- perplexica-net
perplexica:
image: itzcrazykns1337/perplexica:slim-latest
container_name: perplexica
restart: unless-stopped
environment:
- SEARXNG_API_URL=http://searxng:8080
ports:
- "127.0.0.1:3000:3000"
volumes:
- perplexica-data:/home/perplexica/data
depends_on:
- searxng
networks:
- perplexica-net
volumes:
perplexica-data:
networks:
perplexica-net:
启动:
docker compose up -d
检查:
docker compose ps
docker logs perplexica-searxng --tail=80
docker logs perplexica --tail=80
测试 SearXNG JSON:
docker exec perplexica-searxng sh -c "wget -qO- 'http://127.0.0.1:8080/search?q=vps&format=json' | head"
如果这里没有 JSON 输出,先修 SearXNG,不要急着改 Perplexica。
自建 Perplexica 不等于完全匿名。
你能控制的是:
- 搜索入口在你自己的域名下
- SearXNG 不给用户画像
- 你可以选择哪些搜索后端
- 查询记录不默认交给一个 AI 搜索平台
但如果你接 OpenAI、Claude、Groq 这些云端模型,问题和搜索摘要仍然会发送给对应 API 服务商。
所以更准确的说法是:
- 用云端模型:搜索入口和搜索聚合自托管,模型处理在第三方
- 用 Ollama:搜索和模型都尽量留在自己的机器上,但 VPS 配置要更高
别把“自托管”理解成“所有数据永远不出门”。这要看你接的模型和搜索源。
Perplexica 的关键数据在 Docker volume 里。
先看 volume:
docker volume ls | grep perplexica
如果用的是命名 volume,可以这样备份:
mkdir -p /opt/backups
docker run --rm \
-v perplexica-data:/data \
-v /opt/backups:/backup \
alpine \
tar -czf /backup/perplexica-data-$(date +%F).tar.gz -C /data .
如果你用 bind mount,比如 /opt/perplexica/data,就直接打包目录:
tar -czf /opt/backups/perplexica-data-$(date +%F).tar.gz /opt/perplexica
然后同步到对象存储:
rclone copy /opt/backups/perplexica-data-$(date +%F).tar.gz r2:backup-bucket/perplexica/
至少备份:
- Perplexica 数据 volume
- Compose 文件
- SearXNG settings.yml
- Caddyfile
- 你用到的环境变量和模型配置说明
单容器方式:
docker pull itzcrazykns1337/perplexica:latest
docker stop perplexica
docker rm perplexica
docker run -d \
--name perplexica \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
-v perplexica-data:/home/perplexica/data \
itzcrazykns1337/perplexica:latest
Compose 方式:
cd /opt/perplexica
docker compose pull
docker compose up -d
升级前先备份。升级后检查:
docker compose ps
docker logs perplexica --tail=100
curl -I http://127.0.0.1:3000
然后在网页里实际搜一个问题,确认搜索、引用和模型回答都正常。
先看 Perplexica 是否起来:
docker ps --filter "name=perplexica"
docker logs perplexica --tail=100
再看本机端口:
curl -I http://127.0.0.1:3000
如果本机都访问不了,问题在容器。若本机正常、域名 502,问题多半在 Caddy:
caddy validate --config /etc/caddy/Caddyfile
journalctl -u caddy -n 100 --no-pager
如果你用 full 镜像,先看日志:
docker logs perplexica --tail=100
如果你用独立 SearXNG,重点查 JSON:
docker exec perplexica-searxng sh -c "wget -qO- 'http://127.0.0.1:8080/search?q=test&format=json' | head"
settings.yml 里必须有:
search:
formats:
- html
- json
改完重启:
docker compose restart searxng perplexica
先确认 Provider 配置。
如果用 OpenAI / OpenRouter:
- API Key 是否正确
- 账号是否有余额
- 选择的模型是否可用
- VPS 是否能访问 API 地址
可以在 VPS 上测试网络:
curl -I https://api.openai.com
如果用 Ollama:
curl http://127.0.0.1:11434/api/tags
容器访问宿主机 Ollama,要用 host.docker.internal 或宿主机网关地址。
慢通常有三种原因:
- 搜索源响应慢
- 云端模型 API 慢
- 本地 Ollama 模型太大或机器太弱
先分开测。
测试 SearXNG:
time curl -s 'http://127.0.0.1:3000' > /dev/null
看资源:
htop
free -h
docker stats
如果是 Ollama 本地模型慢,换更小模型通常比加一堆参数更有效。
如果你用 Cloudflare 橙云代理,先确认 HTTPS 正常,再打开代理。
遇到问题时先临时切回 DNS only,排除 Cloudflare 干扰。AI 搜索类应用可能会用到长连接或流式输出,代理层配置不合适时会出现响应中断。
这几个工具容易混。
| 工具 | 更适合 |
|---|---|
| SearXNG | 私有元搜索,不需要 AI 总结 |
| Perplexica / Vane | 自建 Perplexity 类 AI 搜索 |
| Open WebUI | 聊天入口、本地模型前端 |
| AnythingLLM | 私有文档知识库问答 |
| Dify | AI 应用和工作流编排 |
我的建议:
- 只想搜网页:SearXNG
- 想要“搜索 + AI 总结 + 引用”:Perplexica
- 想和模型聊天:Open WebUI
- 想问自己的文档:AnythingLLM
- 想做 AI 应用给别人用:Dify
不要把所有工具都装一遍。先从你的核心需求选一个。
如果是我自己用,我会这样做:
- VPS:2 核 4GB 起步
- 部署:Perplexica full 镜像先跑通
- 域名:Caddy 反代 HTTPS
- 端口:只开放 80/443,不开放 3000
- 模型:先接 OpenRouter 或 OpenAI,确认体验
- 后续:如果经常用,再考虑独立 SearXNG
- 隐私要求高:再接 Ollama,但机器要升级
Perplexica 最大的价值不是“又装了一个 AI 工具”,而是把搜索结果变成可以追溯来源的答案。对做技术调研、SEO、竞品分析、运维排障的人来说,这比普通搜索更省时间。
但它也不是万能的。搜索源质量差、模型乱总结、引用不准,这些都可能发生。真正长期好用的前提,是你愿意维护 SearXNG、模型配置、反代和备份,而不是装完就不管。
