TeamSpeak
| Platform | Support | Notes |
|---|---|---|
| Linux | ✅ Native | Recommended |
| 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:
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.
- Server Admin Token → save it, needed for admin permissions
- Virtual Server Token: for the first channel
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
- Open TeamSpeak 3 on your PC
- Connections → Connect
- Address: IP_VPS:9987
- Nickname: your name
- 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:
| Codec | Quality | Bandwidth | Use Case |
|---|---|---|---|
| Speex (8 kHz) | Low | 3 Kb/s | Legacy, minimal bandwidth |
| CELT Mono | Medium | 22 Kb/s | Default, balanced |
| Opus | High | 20-30 Kb/s | Modern, 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:
| Group | Purpose |
|---|---|
admin | Full server control |
moderator | Kick/ban clients, manage channels |
channelcommander | Temporary channel admin |
guest | Standard 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
Related articles
CS2
How to install and configure a Counter-Strike 2 dedicated server on Linux VPS with SteamCMD
Palworld
Create a dedicated Palworld server on Linux with SteamCMD. Configuration, ports and automatic startup.
Rust
Install and manage a Rust server (Facepunch) on Linux with SteamCMD. Includes automatic updates, Oxide plugins and optimizations.
