Skip to main content
This guide covers installing and running TeamSpeak 6 Server directly on Linux systems without Docker. This method provides maximum control and performance for dedicated server deployments.

System Requirements

  • Operating System: Linux (64-bit)
    • Ubuntu 20.04 LTS or later
    • Debian 11 or later
    • CentOS 8 / Rocky Linux 8 or later
    • Other modern Linux distributions
  • Architecture: x86_64 (AMD64)
  • RAM: Minimum 512 MB (1 GB+ recommended)
  • Disk Space: 100 MB for server files + space for database and logs
  • Network: Open ports 9987/UDP and 30033/TCP

Installation

1

Download the server package

Download the latest TeamSpeak 6 Server for Linux from the official website:
# Create a directory for TeamSpeak
mkdir -p ~/teamspeak6-server
cd ~/teamspeak6-server

# Download the latest version (replace URL with actual download link)
wget https://files.teamspeak-services.com/releases/server/6.x.x/teamspeak6-server-linux_amd64-x.x.x.tar.gz
Visit the TeamSpeak Downloads page to get the latest version URL.
2

Extract the archive

Extract the downloaded archive:
tar -xzf teamspeak6-server-linux_amd64-*.tar.gz
cd teamspeak6-server-linux_amd64
List the extracted files:
ls -la
You should see files including tsserver, LICENSE, and various directories.
3

Make the server binary executable

Ensure the server binary has execute permissions:
chmod +x tsserver
Verify the server version:
./tsserver --version
4

Start the server

Run the server for the first time, accepting the license:
./tsserver --accept-license
The server will start in the foreground and display log output. You should see the ServerAdmin privilege key in the output - save this key immediately!
The ServerAdmin privilege key is only displayed during the first startup. Make sure to copy and save it securely.
5

Test the connection

With the server running, test the connection:
  1. Download the TeamSpeak 6 Client
  2. Connect to localhost:9987 (or your server’s IP)
  3. Use the ServerAdmin privilege key to gain admin access

Running as a Background Service

For production use, you should run the server as a systemd service.
1

Create a dedicated user

Create a system user for running the TeamSpeak server:
sudo useradd -r -m -d /opt/teamspeak6 -s /bin/bash teamspeak
The -r flag creates a system user, -m creates a home directory, and -d specifies the directory location.
2

Move server files

Move the server files to the dedicated directory:
sudo mv ~/teamspeak6-server/teamspeak6-server-linux_amd64/* /opt/teamspeak6/
sudo chown -R teamspeak:teamspeak /opt/teamspeak6
3

Create a systemd service file

Create a systemd service file:
sudo nano /etc/systemd/system/teamspeak6.service
Add the following content:
/etc/systemd/system/teamspeak6.service
[Unit]
Description=TeamSpeak 6 Server
After=network.target

[Service]
Type=simple
User=teamspeak
Group=teamspeak
WorkingDirectory=/opt/teamspeak6
ExecStart=/opt/teamspeak6/tsserver --accept-license
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/teamspeak6

[Install]
WantedBy=multi-user.target
Save and close the file (Ctrl+X, then Y, then Enter).
These security settings provide additional protection by restricting what the server process can access.
4

Enable and start the service

Reload systemd, enable the service to start on boot, and start it:
sudo systemctl daemon-reload
sudo systemctl enable teamspeak6
sudo systemctl start teamspeak6
Check the service status:
sudo systemctl status teamspeak6
The status should show “active (running)”.
5

Retrieve the ServerAdmin key

If this is the first startup, get the ServerAdmin privilege key from the logs:
sudo journalctl -u teamspeak6 -n 100 --no-pager | grep -i "serveradmin\|privilege"
Save this key securely.

Service Management

Use these commands to manage your TeamSpeak 6 Server service:
sudo systemctl start teamspeak6

Firewall Configuration

You need to open the required ports in your firewall:
# Allow TeamSpeak voice port (UDP)
sudo ufw allow 9987/udp

# Allow file transfer port (TCP)
sudo ufw allow 30033/tcp

# Optional: WebQuery port
# sudo ufw allow 10080/tcp

# Optional: SSH Query port
# sudo ufw allow 10022/tcp

# Enable the firewall if not already enabled
sudo ufw enable

# Check status
sudo ufw status

Configuration

You can configure the server using command-line arguments, environment variables, or a configuration file.

Using Command-Line Arguments

Modify the ExecStart line in the systemd service file:
ExecStart=/opt/teamspeak6/tsserver --accept-license --default-voice-port 9987 --filetransfer-port 30033

Using a Configuration File

Generate a default configuration file:
cd /opt/teamspeak6
sudo -u teamspeak ./tsserver --write-config-file
This creates a tsserver.yaml file. Edit it:
sudo nano /opt/teamspeak6/tsserver.yaml
Example configuration:
tsserver.yaml
server:
  accept-license: accept
  default-voice-port: 9987
  voice-ip:
    - 0.0.0.0
    - "::"
  filetransfer-port: 30033
  filetransfer-ip:
    - 0.0.0.0
    - "::"
  log-path: logs
  
  database:
    plugin: sqlite3
    sql-path: sql/
    sql-create-path: sql/create_sqlite/
    client-keep-days: 30

  query:
    http:
      enable: false
      port: 10080
    ssh:
      enable: false
      port: 10022
After editing, restart the service:
sudo systemctl restart teamspeak6
For a complete list of configuration options, see the Configuration documentation.

Verification Steps

1

Check server process

Verify the server process is running:
ps aux | grep tsserver
You should see the tsserver process running as the teamspeak user.
2

Check listening ports

Verify the server is listening on the correct ports:
sudo netstat -tulpn | grep tsserver
Or using ss:
sudo ss -tulpn | grep tsserver
You should see ports 9987 (UDP) and 30033 (TCP) in the LISTEN state.
3

Check service status

Verify the systemd service is active:
sudo systemctl status teamspeak6
The output should show “active (running)” with no errors.
4

Review logs

Check the logs for any errors:
sudo journalctl -u teamspeak6 -n 50 --no-pager
Look for any warnings or errors that might indicate problems.
5

Test client connection

  1. Download the TeamSpeak 6 Client
  2. Connect to your server’s IP address and port 9987
  3. Verify you can connect successfully

Updating the Server

1

Stop the server

sudo systemctl stop teamspeak6
2

Backup your data

sudo cp -r /opt/teamspeak6 /opt/teamspeak6-backup-$(date +%Y%m%d)
Always backup your server data before updating!
3

Download and extract the new version

cd /tmp
wget https://files.teamspeak-services.com/releases/server/6.x.x/teamspeak6-server-linux_amd64-x.x.x.tar.gz
tar -xzf teamspeak6-server-linux_amd64-*.tar.gz
4

Replace the binary and files

sudo cp /tmp/teamspeak6-server-linux_amd64/tsserver /opt/teamspeak6/
sudo cp -r /tmp/teamspeak6-server-linux_amd64/sql /opt/teamspeak6/
sudo chown -R teamspeak:teamspeak /opt/teamspeak6
Keep your existing configuration files, logs, and database. Only replace the binary and SQL files.
5

Start the server

sudo systemctl start teamspeak6
sudo systemctl status teamspeak6
Check the logs to ensure the update was successful:
sudo journalctl -u teamspeak6 -f

Troubleshooting

Check the logs for errors:
sudo journalctl -u teamspeak6 -n 100 --no-pager
Common issues:
  • License not accepted: Ensure --accept-license is in the ExecStart command
  • Port already in use: Check if another process is using ports 9987 or 30033
  • Permission issues: Verify the teamspeak user has read/write access to /opt/teamspeak6
Ensure proper ownership of the server directory:
sudo chown -R teamspeak:teamspeak /opt/teamspeak6
sudo chmod +x /opt/teamspeak6/tsserver
  1. Check if the server is running: sudo systemctl status teamspeak6
  2. Verify ports are open: sudo netstat -tulpn | grep tsserver
  3. Check firewall rules: sudo ufw status or sudo firewall-cmd --list-all
  4. Test connectivity: nc -uz <server-ip> 9987
  1. Check the number of connected clients
  2. Review log files for errors or warnings
  3. Consider adjusting thread settings in tsserver.yaml:
server:
  threads-voice-udp: 5  # Adjust based on CPU cores
If you see database-related errors:
  1. Verify database file permissions
  2. Check disk space: df -h
  3. For SQLite integrity issues, the server will attempt to repair on startup
  4. If problems persist, consider switching to MariaDB for better reliability

Next Steps

Configuration

Learn how to customize your server settings

Database Setup

Configure MariaDB for better performance

Build docs developers (and LLMs) love