Server Setup Guide

Your own Iskra server
in about two hours.

No experience needed. One cheap VPS, a domain name, and these instructions. We'll walk through every command together — copy, paste, done.

Always-on, no home hardware
CGNAT-proof for everyone
Full SSL encryption
~$6–10/month total
Automated installer

Skip the guide. One command does everything.

SSH into your VPS, paste this, answer four questions. The script installs nginx, coturn, and Iskra, wires it all together, and gets your SSL certificate. Takes about 5 minutes.

Ubuntu 22.04 Root access Domain already pointing at VPS
Run on your VPS
curl -fsSL https://iskra.foo/install.sh | bash
Download script to inspect first · MIT licensed, ~250 lines
Point your domain's DNS at this VPS before running — certbot needs it to issue the SSL certificate.
or follow the step-by-step guide below
Before you start
What you'll need

Four things. That's it. You don't need to know how servers work — the guide handles all of that.

💳

A credit or debit card

To pay for the VPS. You'll spend $4–10 per month depending on provider. Cancel any time.

🌐

A domain name

Something like myfriends.com. Around $10–15/year from Namecheap or Cloudflare.

Technically optional, but you won't get SSL without one — strongly recommended.

⏱️

About two hours

Most people finish faster. Take your time, read each step, and don't skip anything.

💻

A terminal app

Windows: Windows Terminal (free, Microsoft Store) or PuTTY.
Mac/Linux: Terminal is already installed.


The guide
Step by step

Follow these in order. Each step tells you what to run, what to expect, and what to do if something goes wrong.

1

Get a VPS (Virtual Private Server)

A VPS is a tiny computer in a data center that runs 24/7 so your friends can connect even when your PC is off.

Sign up with one of the providers below. You want a plan with at least 1 GB RAM (2 GB is better), and choose Ubuntu 22.04 LTS as the operating system when asked. Pick a data center location closest to most of your friends.

Hetzner

~$4–6/month

Best value. CX22 (2 vCPU, 4 GB RAM) is excellent for Iskra.

hetzner.com →

DigitalOcean

~$6/month

Very beginner friendly. Basic Droplet (1 GB RAM) works fine.

digitalocean.com →

Vultr

~$6/month

Good global coverage. Cloud Compute (1 GB RAM) is plenty.

vultr.com →
After you create the VPS, the dashboard will show you its public IP address — something like 5.75.134.210. Write it down, you'll need it in every step.

Copy this prompt and paste it into ChatGPT, Gemini, or Claude (all free). Add your question at the end.

Edit the prompt above to describe your exact problem, then copy it.
2

Point your domain at the VPS

So your friends connect to chat.yourdomain.com instead of a raw IP, and so SSL certificates work.

Go to wherever you bought your domain (Namecheap, Cloudflare, Google Domains, etc.) and add a DNS A record:

DNS Record to add
Type: A Name: chat (or @ for the root domain, or any name you like) Value: YOUR_VPS_IP (the IP address from Step 1) TTL: Auto / 3600

This creates an address like chat.yourdomain.com that points to your VPS. DNS changes take anywhere from 1 minute to a few hours to "spread" across the internet — Cloudflare is usually instant, others can be slower.

You can check if your DNS has spread by running ping chat.yourdomain.com in your terminal. When it shows your VPS IP, you're ready to continue.
Cloudflare users: Make sure the DNS record is set to DNS only (grey cloud), not Proxied (orange cloud). The orange cloud will break WebSocket connections that Iskra needs.

Copy this prompt into ChatGPT, Gemini, or Claude and describe your specific domain registrar.

Fill in your registrar and IP before copying.
3

Connect to your VPS via SSH

SSH is how you type commands on the remote server. Think of it as a text-only remote desktop.

Open your terminal (Windows Terminal on Windows, Terminal on Mac/Linux) and run this command, replacing the IP with your VPS's IP:

Your terminal — run once
ssh root@YOUR_VPS_IP

The first time you connect, SSH will ask you to confirm the server's identity. Type yes and press Enter. Then enter the root password your VPS provider gave you (you won't see it being typed — that's normal).

What you should see

A prompt like root@ubuntu-server:~# — this means you're now in control of your VPS. Every command from this point runs on the remote server, not your own PC.

Windows users: If you get "ssh is not recognized", open the Microsoft Store and install Windows Terminal. Modern Windows 10/11 includes SSH, but older versions may not.

Copy this into ChatGPT, Gemini, or Claude.

Paste the exact error message you got into the prompt.
4

Update the system

Fresh VPS installs often have outdated software. This makes sure everything is up to date before we install anything.

Run these two commands. The first downloads the list of available updates. The second installs them. This may take a minute or two.

Run on your VPS
apt update && apt upgrade -y
What you should see

A lot of scrolling text as packages are downloaded and updated. It ends with something like X upgraded, X newly installed, 0 to remove.... That's normal and good.

If a purple screen appears asking about restarting services, just press Enter to accept the default selection.
5

Install all the software

We need nginx (web server for SSL), certbot (gets your SSL certificate), dotnet (runs Iskra), and coturn (relays voice for users behind firewalls).

First, add Microsoft's package source so we can install .NET. Then install everything in one go. Copy and paste all of this exactly:

Run on your VPS — adds .NET source
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb apt update
Run on your VPS — installs everything
apt install -y nginx certbot python3-certbot-nginx dotnet-runtime-8.0 coturn unzip
What you should see

Each package downloads and installs. At the end you'll be back at the prompt with no errors. The whole thing takes 1–3 minutes.

Copy this into ChatGPT, Gemini, or Claude and paste the error you got.

Paste the full error output into the prompt.
6

Open the right ports in the firewall

By default your VPS blocks almost everything. We need to open specific doors for web traffic, Iskra, and voice relay.

Run each line. Each one opens a specific "door" in the firewall. The last command turns the firewall on.

Run on your VPS
ufw allow 22/tcp # SSH — don't skip this or you'll lock yourself out ufw allow 80/tcp # HTTP (needed for SSL certificate) ufw allow 443/tcp # HTTPS (your secure web connection) ufw allow 8080/tcp # Iskra server direct port ufw allow 3478/udp # TURN relay (standard) ufw allow 5349/tcp # TURN relay (secure) ufw allow 49152:65535/udp # TURN relay data ports ufw enable

When asked "Command may disrupt existing ssh connections. Proceed with operation?" — type y and press Enter.

What you should see after ufw enable

Firewall is active and enabled on system startup

The large port range 49152:65535 is used by coturn to relay actual voice/video data between your friends. It needs a lot of ports because each call gets its own temporary port pair.
7

Download and set up the Iskra server

This puts the actual Iskra server software on your VPS.

Create a folder for Iskra, download the latest server release from GitHub, and extract it. Go to github.com/quikmn/iskra/releases/latest, find the Iskra-Server.zip file, right-click it and copy the download link. Then use that link in the command below:

Run on your VPS
mkdir -p /opt/iskra cd /opt/iskra wget -O Iskra-Server.zip "PASTE_ISKRA_SERVER_ZIP_URL_HERE" unzip Iskra-Server.zip ls
What you should see after ls

A list of files including something like iskra_server.dll, iskra_server, and some other files. The exact names depend on the release.

Now test that it can run. If you see a file ending in .dll:

Test run — press Ctrl+C to stop it after a few seconds
dotnet /opt/iskra/iskra_server.dll
What you should see

Something like Iskra server listening on port 8080. Press Ctrl+C to stop it — we'll set it up as a proper background service in a later step.

Copy this into ChatGPT, Gemini, or Claude.

Paste the output of ls and any error messages.
8

Create your server config file

This is where you give your server its name, set the port, and configure your TURN relay details.

Copy this command exactly. Replace the values in ALL_CAPS with your own. YOUR_DOMAIN is the domain you set up in Step 2. YOUR_TURN_PASSWORD should be a long random password (make something up, like hunter2waffles99).

Run on your VPS — creates server.json
cat > /opt/iskra/server.json << 'EOF' { "ServerName": "My Iskra Server", "Port": 8080, "MaxUsers": 50, "HistoryRetentionDays": 30, "TurnUrls": ["turn:YOUR_DOMAIN:3478", "turns:YOUR_DOMAIN:5349"], "TurnUsername": "iskra", "TurnCredential": "YOUR_TURN_PASSWORD" } EOF
TurnUrls points to your own VPS — the TURN server we'll set up next runs on the same machine as Iskra. This is what makes voice work even when friends are behind strict firewalls or mobile data (CGNAT).

Verify the file looks right:

Check the file
cat /opt/iskra/server.json
9

Configure coturn (TURN relay)

coturn is what lets people on restrictive networks (mobile data, corporate WiFi, CGNAT) still use voice. Without it, some friends simply won't be able to connect voice.

Replace YOUR_DOMAIN and YOUR_TURN_PASSWORD with the same values you used in Step 8. The password must match exactly.

Run on your VPS — creates coturn config
cat > /etc/turnserver.conf << 'EOF' listening-port=3478 tls-listening-port=5349 realm=YOUR_DOMAIN user=iskra:YOUR_TURN_PASSWORD lt-cred-mech fingerprint min-port=49152 max-port=65535 EOF

Now tell the system to run coturn automatically and start it:

Run on your VPS
sed -i 's/#TURNSERVER_ENABLED=1/TURNSERVER_ENABLED=1/' /etc/default/coturn systemctl enable coturn systemctl start coturn systemctl status coturn
What you should see

Active: active (running) in green. That means coturn is running and will restart automatically if the server ever reboots.

Copy this into ChatGPT, Gemini, or Claude.

Run journalctl -u coturn -n 50 to get the logs and paste them.
10

Configure nginx as a reverse proxy

nginx sits in front of Iskra and handles the SSL encryption, so your friends' connections are always secure. It also lets Iskra work on the standard HTTPS port (443) instead of 8080.

Replace YOUR_DOMAIN with your actual domain (e.g. chat.myfriends.com).

Run on your VPS — creates nginx config
cat > /etc/nginx/sites-available/iskra << 'EOF' server { listen 80; server_name YOUR_DOMAIN; location / { proxy_pass http://localhost:8080; 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_read_timeout 86400; } } EOF ln -sf /etc/nginx/sites-available/iskra /etc/nginx/sites-enabled/iskra rm -f /etc/nginx/sites-enabled/default nginx -t && systemctl reload nginx
What you should see

nginx: configuration file /etc/nginx/nginx.conf test is successful

The proxy_read_timeout 86400 keeps WebSocket connections alive for up to 24 hours. Without this, long voice sessions might get cut off.

Copy this into ChatGPT, Gemini, or Claude.

Paste your config and the nginx -t output.
11

Get your SSL certificate

SSL makes all connections encrypted. Without it, your friends' messages and voice traffic could theoretically be intercepted. certbot gets a free certificate from Let's Encrypt automatically.

Replace YOUR_DOMAIN and YOUR_EMAIL. The email is just for certificate expiry reminders — certificates are free and auto-renew.

Run on your VPS
certbot --nginx -d YOUR_DOMAIN --non-interactive --agree-tos -m YOUR_EMAIL
What you should see

Successfully deployed certificate for YOUR_DOMAIN and Congratulations! You have successfully enabled HTTPS. certbot automatically updates your nginx config with the SSL settings.

If certbot fails: the most common reason is that your DNS hasn't spread yet (Step 2). Wait 15–30 minutes and try again. Let's Encrypt needs to be able to reach your domain from the internet.

Copy this into ChatGPT, Gemini, or Claude.

Paste the full certbot error output.
12

Run Iskra as a background service

Right now Iskra only runs when you manually start it. A systemd service makes it start automatically on boot and restart itself if it ever crashes.

Create the service file, enable it, and start it:

Run on your VPS
cat > /etc/systemd/system/iskra.service << 'EOF' [Unit] Description=Iskra Voice Chat Server After=network.target [Service] Type=simple User=root WorkingDirectory=/opt/iskra ExecStart=/usr/bin/dotnet /opt/iskra/iskra_server.dll Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable iskra systemctl start iskra systemctl status iskra
What you should see

Active: active (running) in green. Iskra is now running in the background and will survive reboots.

Useful commands to know: systemctl restart iskra to restart, systemctl stop iskra to stop, journalctl -u iskra -f to watch live logs.

Copy this into ChatGPT, Gemini, or Claude.

Run journalctl -u iskra -n 30 and paste the output.
13

Set up automatic certificate renewal

Let's Encrypt certificates expire after 90 days. certbot can renew them automatically so you never have to think about it.

Run these two commands — they test that renewal works, then set up a timer to do it automatically:

Run on your VPS
certbot renew --dry-run systemctl enable certbot.timer systemctl start certbot.timer
What you should see after dry-run

Congratulations, all simulated renewals succeeded. The timer will now automatically renew your certificate before it expires.

14

Connect with the Iskra app

The server is running. Time to actually use it.

Download the Iskra client for Windows from the link in the nav bar above. Open it, go to Settings → Servers → Add Server, and enter:

Connection details for Iskra client
Address: YOUR_DOMAIN (e.g. chat.myfriends.com) Web port: 443 (the HTTPS port nginx is handling) Name: My Server (whatever you want)

Click Connect. You should see your server's channel list. To invite friends, right-click the server icon and choose Copy Invite Link — send them that link and they can join with one click.

The first account to connect gets owner role automatically. Use /adduser friendname password123 in chat to create accounts for your friends, or set the server to open registration in admin settings.
Friends can also use the web client at app.iskra.foo — no install needed. The same invite link works there too.

Copy this into ChatGPT, Gemini, or Claude — this prompt gives full context about the whole setup.

This prompt has full context — paste your service status outputs and describe the problem.

You're done. 🎉

You now have a self-hosted voice chat server that runs 24/7, works for everyone regardless of ISP or firewall, and belongs to you — no company, no moderation, no data collection.

Iskra server running
TURN relay active
SSL secured
Auto-restarts on crash
Certificate auto-renews
Download Iskra Client ← Back to iskra.foo