Intermediate
    20–30 min
    2 GB+ RAM

    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.

    Multiple search focus modes (Web, Academic, YouTube, Reddit)
    Supports OpenAI, Anthropic, Groq, Ollama, and OpenRouter
    Upload and query PDFs, TXT, and DOCX files
    Self-hosted with full privacy — no external telemetry

    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
    1

    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.

    Configure UFW
    sudo ufw allow OpenSSH
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    2

    Single-Container Install (Recommended)

    The simplest path is the bundled Vane image, which ships with SearXNG pre-configured inside the container.

    Create working directory
    mkdir -p /opt/perplexica
    cd /opt/perplexica
    Start the container
    docker run -d \
      -p 127.0.0.1:3000:3000 \
      -v perplexica-data:/home/vane/data \
      --name perplexica \
      --restart unless-stopped \
      itzcrazykns1337/vane:latest

    Binding to 127.0.0.1:3000 keeps the port off the public internet. The volume perplexica-data persists search history, uploaded files, and settings.

    Verify
    docker ps
    docker logs perplexica

    Wait about 30 seconds for the initial startup.

    3

    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.

    /opt/perplexica/docker-compose.yml
    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):

    Create SearXNG config
    mkdir -p searxng
    cat > searxng/settings.yml << 'EOF'
    use_default_settings: true
    
    search:
      formats:
        - html
        - json
    EOF
    Start the stack
    docker compose up -d
    docker compose ps
    4

    Nginx Reverse Proxy & SSL

    Install nginx and Certbot
    sudo apt install nginx python3-certbot-nginx -y
    /etc/nginx/sites-available/perplexica
    server {
        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.

    Enable site and obtain SSL
    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.timer
    5

    Configure 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.

    Anthropicclaude-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.

    6

    Keeping Perplexica Updated

    Single-container method:

    Update single container
    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:latest

    Docker Compose method:

    Update via Compose
    cd /opt/perplexica
    docker compose pull
    docker compose up -d

    Your data volume is not touched during an upgrade — search history and settings carry over.

    Clean up old images
    docker image prune -f

    Search Modes & Features

    WebGeneral web search — the default mode

    AcademicPulls from scholarly sources for research queries

    YouTubeSearches and summarizes video content

    Wolfram AlphaMath, conversions, and factual lookups (requires API key)

    RedditSurfaces 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:

    Debug connectivity
    sudo systemctl status nginx
    docker ps
    docker logs perplexica

    If 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:

    Restart SearXNG
    docker compose restart searxng

    Disk usage growing over time

    Search history and uploaded files accumulate in the Docker volume. Manage them through the Perplexica settings UI, or inspect directly:

    Check disk usage
    docker system df
    docker volume inspect perplexica-data

    Next Steps

    • Point your browser's built-in search to https://search.yourdomain.com/?q=%s for quick access from the address bar
    • Explore the Perplexica API at /api/search for integration with other tools
    • Consider adding HTTP basic auth in nginx if your instance is public but you want to restrict access