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
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
| Component | Minimum | Recommended |
|---|---|---|
| OS | Ubuntu 24.04 | Ubuntu 24.04 |
| CPU | 4 vCPU | 8 vCPU |
| RAM | 8 GB | 16 GB (for AI transcription) |
| Disk | 200 GB | 500 GB+ (depends on recording volume) |
| Network | Public IP, ports 80/443 open | Dedicated domain with DNS A record |
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.
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://vodia.nyc3.cdn.digitaloceanspaces.com/cdrstats/cdrstats.zip
unzip cdrstats.zip
cd cdrstats
bash install.sh
3. Answer the Prompts
| Prompt | Required | Notes |
|---|---|---|
| Domain | Yes | e.g. cdr.example.com — or localhost for local dev |
| Admin email | Yes | Used as your login username |
| Admin password | Yes | Minimum 8 characters |
| OpenAI API key | No | Enables 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 whitelist | No | Comma-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.
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.