Skip to main content

Installation

DigitalOcean Marketplace

The easiest way to get started is via the DigitalOcean Marketplace — no manual setup required.

→ Vodia Analytics on DigitalOcean Marketplace

Steps

1. Create Your Droplet

Click the link above and deploy a new Droplet. Choose a size that meets the requirements below. Once the Droplet is running, make note of its public IPv4 address.

2. Point Your Domain

Create a DNS A record pointing your chosen domain (e.g. cdr.example.com) to your Droplet's public IP. DNS must propagate before you proceed — Vodia Analytics needs this to issue a TLS certificate automatically.

3. First-Time Setup

Wait approximately 10 minutes after the Droplet starts, then open:

http://your_droplet_public_ipv4

You will be prompted to enter your domain name and admin email address. Once submitted, Vodia Analytics will configure itself and redirect you to the login portal.

4. Access the Application

After setup completes, access your instance at:

https://your_domain

Log in with the admin email and password you set during first-time setup.


Self-Hosted Installation

CPU Compatibility — MongoDB Requirement

Vodia Analytics uses MongoDB 7, which requires a CPU that supports AVX (Advanced Vector Extensions). This is available on Intel Sandy Bridge (2011) or newer, and AMD Bulldozer (2011) or newer.

Older CPUs or virtual machines configured with a generic or legacy CPU model (e.g. QEMU's default kvm64) may not expose AVX even if the underlying hardware supports it — and MongoDB will fail to start.

If MongoDB fails to start, check your hypervisor's CPU type settings and set it to expose a named CPU model (e.g. host, Skylake-Client, or SandyBridge) rather than a generic one.

For servers outside of DigitalOcean, or if you prefer a manual install.

Requirements

ComponentMinimumRecommended
OSUbuntu 24.04Ubuntu 24.04
CPU4 vCPU8 vCPU
RAM8 GB16 GB (for AI transcription)
Disk200 GB500 GB+ (depends on recording volume)
NetworkPublic IP, ports 80/443 openDedicated domain with DNS A record
note

Recordings are stored in uncompressed Linear Stereo WAV format and can consume significant disk space. We recommend configuring an external S3-compatible storage provider such as AWS S3 or DigitalOcean Spaces to offload recording storage — this can be configured under Admin → Storage.

note

For servers with 8+ CPUs, you can speed up transcription by increasing numThreads in worker/src/transcriber.js — for example, set it to 7 on an 8 CPU system. Then in .env, set TRANSCRIPTION_CONCURRENCY=6 (one less than numThreads). After changing these values, rebuild the worker with docker compose build --no-cache worker and restart with docker compose up -d worker.


Install Steps

1. Point Your Domain

Create a DNS A record pointing your chosen domain (e.g. cdr.example.com) to your server's public IP. Let DNS propagate before proceeding.

2. Download and Run

apt-get install -y wget unzip
wget https://cdn.vodia.net/cdrstats/cdrstats.zip
unzip cdrstats.zip
cd cdrstats
bash install.sh

3. Answer the Prompts

PromptRequiredNotes
DomainYese.g. cdr.example.com — or localhost for local dev
Admin emailYesUsed as your login username
Admin passwordYesMinimum 8 characters
OpenAI API keyNoEnables AI summaries and sentiment analysis. Transcription works without it. You can add it later under Admin settings, or use Gemini or Claude instead.
PBX IP whitelistNoComma-separated IPs of your Vodia PBX servers. Only these IPs can push CDR/recording data. Leave blank to allow all. Can be configured later under Admin settings.

4. Wait ~5–10 Minutes

The installer will:

  • Install Docker if not present
  • Generate all secrets (MongoDB, Redis, MinIO, JWT)
  • Build the frontend and all containers
  • Start all services with auto-HTTPS via Caddy
  • Configure UFW firewall
  • Set up a daily backup cron job

5. Verify

Open https://your-domain.com in a browser and log in with the email and password you entered.

What the installer creates

All services run in Docker containers managed by Docker Compose: Caddy (reverse proxy + auto-HTTPS), Fastify API, BullMQ worker (transcription), MongoDB 7, Redis 7, MinIO (recording storage), and Grafana (optional monitoring). Configuration lives in .env at the project root.


Network & Firewall Requirements

info

The self-hosted installer configures UFW on the server itself. This section covers any firewall in front of the server — DigitalOcean Cloud Firewalls, Azure NSGs, AWS Security Groups, or a corporate edge device — which the installer cannot configure.

Inbound (Ingress)

PortProtocolSourcePurpose
80TCPAnyLet's Encrypt HTTP-01 validation, HTTPS redirect, first-time setup wizard
443TCPAny, or restrict to user + PBX IPsWeb UI, API, CDR/recording push from the PBX, live call WebSocket
443UDPAnyHTTP/3 (QUIC) — optional; Caddy falls back to TCP if closed
22TCPYour admin IPs onlySSH
Port 80 must be open from everywhere

Let's Encrypt validates from multiple locations worldwide. Geo-IP filtering or country blocking on inbound TCP 80 will cause certificate issuance and renewal to fail, even if the site loads fine for you. If you cannot open port 80 globally, you will need a Caddy build with a DNS-01 challenge provider instead.

note

Your Vodia PBX servers push CDRs and recordings into Vodia Analytics over port 443. If you restrict inbound 443, make sure every PBX source IP is allowed. The IP whitelist under Admin settings is an additional application-layer check, not a replacement for it.

Outbound (Egress)

Required in all deployments:

DestinationPortPurpose
Your Vodia PBX servers443 (or your PBX's HTTPS port)Recording downloads, REST API queries, live call WebSocket
acme-v02.api.letsencrypt.org and OCSP responders443TLS certificate issuance and renewal
DNS resolvers53 (UDP/TCP)Name resolution

Required only if the corresponding feature is configured:

DestinationPortRequired for
portal.vodia-teams.com, api.ipify.org443License validation (Marketplace / licensed deployments)
api.openai.com443OpenAI transcription, summaries, AI briefings
api.anthropic.com443Anthropic Claude AI features
generativelanguage.googleapis.com443Google Gemini AI features
Your Ollama serverCustomSelf-hosted local AI
Your SMTP server587, 465, or 25Email briefings, password resets, alerts
AWS S3 / DigitalOcean Spaces / other S3 endpoint443External recording storage backend
download.docker.com, registry.npmjs.org, cdn.vodia.net443Installation, upgrades, container builds