TeamSpeak is a long-standing voice chat platform, popular with gaming clans, esports teams and communities that value low latency, crisp audio and fine-grained permissions. Hosting your own TeamSpeak 3 server on a VPS gives you full control over channels, permissions and who can join. The free licence covers up to 32 slots (one virtual server).
Open-source alternative: Mumble.
Requirements
- A small VPS is plenty: 1 vCPU and 512 MB–1 GB RAM for dozens of users. Voice is light: roughly 30–60 kbit/s per speaking user.
- Low latency to your players matters most. Choose a location near them. See choosing a VPS location and game server VPS.
Option 1: native install
Create a dedicated user, and download the server (check teamspeak.com for the current version):
sudo adduser --system --group --home /opt/teamspeak teamspeak
cd /opt/teamspeak
sudo -u teamspeak wget https://files.teamspeak-services.com/releases/server/3.13.7/teamspeak3-server_linux_amd64-3.13.7.tar.bz2
sudo -u teamspeak tar xjf teamspeak3-server_linux_amd64-*.tar.bz2 --strip-components=1
sudo -u teamspeak touch .ts3server_license_accepted # accept the licence
systemd unit:
# /etc/systemd/system/teamspeak.service
[Unit]
Description=TeamSpeak 3 Server
After=network.target
[Service]
User=teamspeak
Group=teamspeak
WorkingDirectory=/opt/teamspeak
ExecStart=/opt/teamspeak/ts3server_minimal_runscript.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now teamspeak
sudo journalctl -u teamspeak | grep -iE 'token|loginname|password'
On the very first start, the log shows the ServerQuery admin password and a privilege key (token). Save both.
Option 2: Docker
services:
teamspeak:
image: teamspeak:latest
restart: unless-stopped
ports:
- "9987:9987/udp"
- "30033:30033"
# - "10011:10011" # ServerQuery: only if needed, and restricted
environment:
TS3SERVER_LICENSE: accept
volumes:
- ./data:/var/ts3server
docker compose logs shows the privilege key on the first start.
Firewall
| Port | Purpose |
|---|---|
| 9987/udp | Voice (default virtual server) |
| 30033/tcp | File transfers |
| 10011/tcp | ServerQuery (raw), admin only |
| 10022/tcp | ServerQuery over SSH, admin only |
sudo ufw allow 9987/udp
sudo ufw allow 30033/tcp
sudo ufw allow from 203.0.113.50 to any port 10022 proto tcp # ServerQuery only from your IP
Don’t expose ServerQuery to the internet. It’s a full admin interface. See UFW.
Connect and claim admin
- Install the TeamSpeak client, and connect to your server’s IP (or a domain with an A record).
- When asked, paste the privilege key. Your identity becomes Server Admin.
- Create channels, set channel passwords and permissions, server groups, and a welcome message.
Use a domain name for convenience. A DNS SRV record (_ts3._udp.example.com) lets users connect to example.com without a port. See DNS records explained.
Security
- Keep the server updated. Old TeamSpeak versions have had vulnerabilities, and clients warn about outdated servers.
- Set a server password for private communities, or use permission groups.
- Configure anti-flood settings, and ban lists, for public servers.
- Back up your identity (client side) securely. It holds your admin rights.
Backups
All data lives in the server directory, mainly ts3server.sqlitedb (channels, permissions, users) and files/:
sudo systemctl stop teamspeak
sudo tar -czf /backups/teamspeak-$(date +%F).tar.gz -C /opt teamspeak
sudo systemctl start teamspeak
See backup strategy.
Updates
Stop the server, back up, extract the new release over the old one (keeping the database and licence files), and start it again. Check the release notes for database migrations. With Docker, docker compose pull && docker compose up -d.
Quick reference
| Task | Command / setting |
|---|---|
| Accept licence | .ts3server_license_accepted / TS3SERVER_LICENSE=accept |
| Find privilege key | journalctl -u teamspeak | grep token |
| Voice port | 9987/udp |
| Files port | 30033/tcp |
| Database | ts3server.sqlitedb |
Related: game servers on a VPS and Linux server hardening.