Gaming Servers

TeamSpeak

How to install and configure a TeamSpeak 3 server on Linux VPS

Platform Support

PlatformSupportNotes
Linux✅ NativeRecommended
Windows✅ Native

Requirements

  • VPS with at least 512 MB RAM and 1 GB disk
  • Operating system: Ubuntu/Debian/CentOS 64-bit

1. Create dedicated user

sudo useradd -m -s /bin/bash teamspeak
sudo su - teamspeak

2. Download TeamSpeak 3 Server

# Check latest version at https://teamspeak.com/en/downloads/#server
VERSION="3.13.7"
wget "https://files.teamspeak-services.com/releases/server/${VERSION}/teamspeak3-server_linux_amd64-${VERSION}.tar.bz2"
tar -xf teamspeak3-server_linux_amd64-${VERSION}.tar.bz2
mv teamspeak3-server_linux_amd64 ~/ts3server
cd ~/ts3server

3. Accept the license

touch ~/ts3server/.ts3server_license_accepted

4. First run

~/ts3server/ts3server_minimal_runscript.sh start

On first run you'll see:

  • Server Admin Token → save it, needed for admin permissions
  • Virtual Server Token: for the first channel
------------------------------------------------------------------
ServerAdmin privilege key created, please use it to gain
serveradmin rights for your virtualserver. please
also check the doc/privilegekey_guide.txt for details.

token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
------------------------------------------------------------------

Copy and save the token, it won't be shown again.


5. systemd service (automatic startup)

exit  # return to root
sudo nano /etc/systemd/system/teamspeak.service
[Unit]
Description=TeamSpeak 3 Server
After=network.target

[Service]
User=teamspeak
WorkingDirectory=/home/teamspeak/ts3server
ExecStart=/home/teamspeak/ts3server/ts3server_linux_amd64 inifile=ts3server.ini
ExecStop=/home/teamspeak/ts3server/ts3server_linux_amd64 stop
PIDFile=/home/teamspeak/ts3server/ts3server.pid
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl enable teamspeak
sudo systemctl start teamspeak
sudo systemctl status teamspeak

6. Open ports

sudo ufw allow 9987/udp    # Voice port (UDP)
sudo ufw allow 10011/tcp   # ServerQuery (telnet/raw)
sudo ufw allow 30033/tcp   # File transfer

7. Configuration (ts3server.ini)

nano ~/ts3server/ts3server.ini
machine_id=
default_voice_port=9987
voice_ip=0.0.0.0
licensepath=
filetransfer_port=30033
filetransfer_ip=0.0.0.0
query_port=10011
query_ip=127.0.0.1    # limit query to localhost for security
query_ip_whitelist=query_ip_whitelist.txt
logpath=logs/
logquerycommands=0
dbsqlpath=sql/
dbsqlcreatepath=create_tables/
licensepath=
createinifile=0
inifile=ts3server.ini
query_skipbruteforcecheck=0

8. Connect to the server

  1. Open TeamSpeak 3 on your PC
  2. Connections → Connect
  3. Address: IP_VPS:9987
  4. Nickname: your name
  5. On first access: insert the admin token in Permissions → Use Privilege Key

9. Backup

# Complete TS3 server backup
tar -czf ~/ts3-backup-$(date +%Y%m%d).tar.gz ~/ts3server/

# Important files:
# ~/ts3server/ts3server.sqlitedb : database (users, channels, permissions)
# ~/ts3server/ts3server.ini      : configuration
# ~/ts3server/files/             : files uploaded by clients

10. Update TeamSpeak

sudo systemctl stop teamspeak

# Backup database
cp ~/ts3server/ts3server.sqlitedb ~/ts3server.sqlitedb.bak

# Download new version
VERSION="3.13.7"  # update with latest version
cd ~
wget "https://files.teamspeak-services.com/releases/server/${VERSION}/teamspeak3-server_linux_amd64-${VERSION}.tar.bz2"
tar -xf teamspeak3-server_linux_amd64-${VERSION}.tar.bz2

# Copy new files keeping database
cp teamspeak3-server_linux_amd64/* ~/ts3server/ --no-clobber
cp ts3server.sqlitedb.bak ~/ts3server/ts3server.sqlitedb

sudo systemctl start teamspeak

Tips & Tweaks

Bandwidth Limiting

Prevent excessive bandwidth in ts3server.ini:

[virtualserver1]
# Voice bandwidth per client (bytes/sec)
# Adjust based on codec
virtualserver_max_voice_clients=100
virtualserver_bandwidth_limit=262144000  # 250 Mbps total

# File transfer
filetransfer_bandwidth_limit=1048576     # 1 Mbps

Codec Optimization

Popular codec settings for minimal bandwidth:

CodecQualityBandwidthUse Case
Speex (8 kHz)Low3 Kb/sLegacy, minimal bandwidth
CELT MonoMedium22 Kb/sDefault, balanced
OpusHigh20-30 Kb/sModern, best quality

Force codec in channel settings (via client or ServerQuery):

# Via ServerQuery
channeledit cid=2 codec=4 codec_quality=10

ServerQuery Admin Commands

Connect via ServerQuery (telnet):

telnet localhost 10011

# Login
login serveradmin password

# List virtual servers
serverlist

# List online clients on server 1
clientlist sid=1

# Send message to client
sendtextmessage targetmode=1 target=4 msg=Hello

# Kick client
kickclient clid=4 reasonid=5 reasonmsg=bye

# Ban IP (48 hours)
banadd ip=192.168.1.1 time=172800 banreason="Spam"

# Delete ban
bandel banid=5

# Get server info
serverinfo sid=1

# Logout
logout
quit

Database Backup Strategy

# Manual backup
tar -czf ~/ts3-backup-$(date +%Y%m%d_%H%M).tar.gz ~/ts3server/ts3server.sqlitedb

# Automated daily backup at 2 AM
# Add to root crontab: crontab -e
0 2 * * * su - teamspeak -c "tar -czf ~/backups/ts3-db-\$(date +\%Y\%m\%d).tar.gz ~/ts3server/ts3server.sqlitedb" 2>/dev/null

# Restore from backup
systemctl stop teamspeak
cp ~/ts3server.sqlitedb.backup ~/ts3server/ts3server.sqlitedb
systemctl start teamspeak

Permission Management

Common permission groups and their use:

GroupPurpose
adminFull server control
moderatorKick/ban clients, manage channels
channelcommanderTemporary channel admin
guestStandard client

Create custom groups via ServerQuery:

servergroupadd name="Trusted" type=1
servergroupaddperm sgid=7 permid=4 permvalue=1

Monitoring Commands

# Server status
systemctl status teamspeak

# Live logs
journalctl -u teamspeak -f

# Check active connections
ss -tulnp | grep 9987

# Database size
du -h ~/ts3server/ts3server.sqlitedb

# List all bans
cat ~/ts3server/ts3server.sqlitedb | sqlite3 "SELECT * FROM bans;"

Performance Tuning

For high-player servers:

[virtualserver1]
# Reduce query overhead
virtualserver_log_query=0

# Connection optimization
virtualserver_ask_for_privilegekey=0
virtualserver_max_channels=999

# Resource limits
virtualserver_complain_autoban_count=4
virtualserver_complain_autoban_time=1200

Port & Firewall Optimization

If behind restrictive firewall, use single port mode:

# server.cfg
query_port=9988         # Different from voice port
filetransfer_port=9988  # Reuse query port

Then open firewall:

ufw allow 9987/udp      # Voice
ufw allow 9988/tcp      # Query + file transfer

On this page