Deploy Perplexica on a RamNode VPS
Self-hosted AI search engine powered by SearXNG and large language models. Get cited, synthesized answers with no tracking, no per-query fees, and full control over your AI provider.
What Is Perplexica?
Perplexica is an open-source, self-hosted AI search engine inspired by Perplexity AI. It combines real-time web search through SearXNG with large language models to deliver cited, synthesized answers to natural language questions — with no tracking, no usage fees per query, and full control over which AI provider you use.
Note on naming: The project was recently rebranded from "Perplexica" to Vane on GitHub (at ItzCrazyKns/Vane). The community still widely uses "Perplexica," and the Docker images continue to work under both names.
Recommended RamNode Plan
Cloud LLM provider (OpenAI, Groq, Anthropic): A 2 GB RAM / 1 vCPU VPS is sufficient. All inference happens off-server.
Local LLM via Ollama: Plan for at least 8 GB RAM and ideally a GPU-enabled node. Smaller quantized models can squeeze onto a 4 GB instance with slow inference, but this is not recommended.
Prerequisites
- A RamNode VPS with Ubuntu 22.04 LTS and root or sudo access
- A domain name pointed at your VPS's IP address (an A record is sufficient)
- Docker and Docker Compose installed (Docker installation guide)
- Basic familiarity with the Linux command line
- At least one LLM provider API key (OpenAI, Anthropic, or Groq) — or Ollama for local inference
Configure the Firewall
Open the ports needed for web traffic and SSH. Perplexica itself only needs to be reachable internally through nginx — do not expose ports 3000 or 8080 to the public.
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableSingle-Container Install (Recommended)
The simplest path is the bundled Vane image, which ships with SearXNG pre-configured inside the container.
mkdir -p /opt/perplexica
cd /opt/perplexicadocker run -d \
-p 127.0.0.1:3000:3000 \
-v perplexica-data:/home/vane/data \
--name perplexica \
--restart unless-stopped \
itzcrazykns1337/vane:latestBinding to 127.0.0.1:3000 keeps the port off the public internet. The volume perplexica-data persists search history, uploaded files, and settings.
docker ps
docker logs perplexicaWait about 30 seconds for the initial startup.
Docker Compose Install (More Control)
Use this method if you want to run SearXNG as a separate container for sharing across services or customizing independently.
version: "3.8"
services:
searxng:
image: searxng/searxng:latest
container_name: perplexica-searxng
volumes:
- ./searxng:/etc/searxng
networks:
- perplexica-net
restart: unless-stopped
perplexica:
image: itzcrazykns1337/perplexica:slim-latest
container_name: perplexica
environment:
- SEARXNG_API_URL=http://searxng:8080
ports:
- "127.0.0.1:3000:3000"
volumes:
- perplexica-data:/home/perplexica/data
- perplexica-uploads:/home/perplexica/uploads
depends_on:
- searxng
networks:
- perplexica-net
restart: unless-stopped
volumes:
perplexica-data:
perplexica-uploads:
networks:
perplexica-net:Enable JSON format in SearXNG (required):
mkdir -p searxng
cat > searxng/settings.yml << 'EOF'
use_default_settings: true
search:
formats:
- html
- json
EOFdocker compose up -d
docker compose psNginx Reverse Proxy & SSL
sudo apt install nginx python3-certbot-nginx -yserver {
listen 80;
server_name search.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_read_timeout 120s;
proxy_send_timeout 120s;
}
}The Upgrade and Connection headers are required — Perplexica uses WebSockets for streaming responses.
sudo ln -s /etc/nginx/sites-available/perplexica /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d search.yourdomain.com
sudo systemctl status certbot.timerConfigure Your LLM Provider
Navigate to https://search.yourdomain.com in your browser. You will land on a setup screen where you configure your AI provider.
OpenAI — Enter your API key and select a model. gpt-4o-mini is cost-effective; gpt-4o gives noticeably better synthesis quality.
Groq — Generous free tier with very low latency. llama-3.3-70b-versatile is a strong choice.
Anthropic — claude-haiku-3-5 for speed, claude-sonnet-4-5 for quality.
Custom OpenAI-compatible — Works with OpenRouter (https://openrouter.ai/api/v1), LM Studio, or any compatible endpoint.
Ollama (local) — Set the API URL to http://host.docker.internal:11434. Pull your model first with ollama pull llama3.2:3b.
Settings are persisted to the Docker volume, so you only need to configure this once.
Keeping Perplexica Updated
Single-container method:
docker pull itzcrazykns1337/vane:latest
docker stop perplexica && docker rm perplexica
docker run -d \
-p 127.0.0.1:3000:3000 \
-v perplexica-data:/home/vane/data \
--name perplexica \
--restart unless-stopped \
itzcrazykns1337/vane:latestDocker Compose method:
cd /opt/perplexica
docker compose pull
docker compose up -dYour data volume is not touched during an upgrade — search history and settings carry over.
docker image prune -fSearch Modes & Features
Web — General web search — the default mode
Academic — Pulls from scholarly sources for research queries
YouTube — Searches and summarizes video content
Wolfram Alpha — Math, conversions, and factual lookups (requires API key)
Reddit — Surfaces community discussions
Speed / Balanced / Quality modes control how many sources are fetched and re-ranked before synthesis. Quality mode is slower but produces more thorough answers on complex topics.
File upload — Perplexica supports querying uploaded PDFs, TXT files, and DOCX documents directly. Uploaded files are stored in the persistent volume.
Troubleshooting
Blank page or cannot connect after setup
Check that nginx is running and the container is healthy:
sudo systemctl status nginx
docker ps
docker logs perplexicaIf nginx shows a 502 error, the container is likely still starting. Wait 30–60 seconds and reload.
WebSocket errors / streaming responses cut off
Confirm your nginx config includes the Upgrade and Connection headers. Also check that proxy_read_timeout is set to at least 60 seconds.
SearXNG not returning results (Docker Compose setup)
The most common cause is JSON format not being enabled. Check your searxng/settings.yml and confirm json is listed under search.formats. Restart after changes:
docker compose restart searxngDisk usage growing over time
Search history and uploaded files accumulate in the Docker volume. Manage them through the Perplexica settings UI, or inspect directly:
docker system df
docker volume inspect perplexica-dataNext Steps
- Point your browser's built-in search to
https://search.yourdomain.com/?q=%sfor quick access from the address bar - Explore the Perplexica API at
/api/searchfor integration with other tools - Consider adding HTTP basic auth in nginx if your instance is public but you want to restrict access
