15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
09.10.2024

如何在 VPS 上安装 TeamSpeak 服务器(Ubuntu/CentOS 指南)

TeamSpeak是一个自托管、低延迟的语音通信平台,在Linux上作为独立服务器守护进程运行。将其安装在VPS上,您可以完全掌控频道、权限、编解码器和安全策略,无需依赖第三方基础设施或使用限制。

本指南涵盖在Ubuntu上完整安装TeamSpeak 3 Server的全过程(附CentOS/RHEL变体说明),包括用户隔离、systemd服务配置、管理员密码加固及客户端连接。所有命令均已在全新的22.04 LTS环境中经过生产级测试。

为何在VPS上自托管TeamSpeak

Discord等商业语音平台强制执行数据保留政策、算法审核和速率限制,组织无法对此进行覆盖。自托管TeamSpeak实例可完全消除这些限制。您可以控制:

  • 编解码器质量(Opus Voice、Opus Music)及每频道比特率
  • 权限系统,具有精细化的服务器组和频道组ACL
  • 加密,通过TLS进行信令传输,并可选启用语音加密
  • 数据驻留——您的语音流量永远不会经过第三方中继
  • 正常运行时间SLA——直接与您的VPS提供商挂钩,而非共享云服务

对于游戏战队、电竞组织、远程开发团队和企业通信而言,这意味着可量化的可靠性和合规优势。

最低系统要求

TeamSpeak 3 Server极为轻量。以下配置可支持约50–100名并发用户,且不会出现音频质量下降:

资源最低配置推荐配置(100+用户)
CPU核心数1 vCPU2 vCPU
RAM512 MB1 GB
磁盘空间1 GB5 GB(日志 + 数据库)
网络10 Mbps100 Mbps
操作系统Ubuntu 20.04+ / CentOS 7+Ubuntu 22.04 LTS
架构x86_64 (amd64)x86_64 (amd64)

配备1 vCPU和512 MB RAM的VPS托管方案足以满足小型社区的需求。随着并发用户数量的增长,可进行垂直扩展。

需在防火墙中开放的关键端口:

  • `9987/UDP` — 语音数据(默认)
  • `10011/TCP` — ServerQuery(原始或SSH)
  • `30033/TCP` — 文件传输

第一步:准备服务器

以root身份连接到您的VPS:

“`bash

ssh root@your_server_ip -p your_ssh_port

“`

更新所有系统软件包,在引入新软件之前消除已知漏洞:

“`bash

sudo apt update && sudo apt upgrade -y

“`

安装`bzip2`,这是解压TeamSpeak压缩包所必需的:

“`bash

sudo apt install bzip2 -y

“`

在CentOS/AlmaLinux/Rocky Linux上,请将上述命令替换为:

“`bash

sudo dnf update -y && sudo dnf install bzip2 wget -y

“`

第二步:创建专用系统用户

以root身份运行TeamSpeak是严重的安全错误。一旦进程被利用,攻击者将立即获得整个主机的root访问权限。请始终将其隔离在非特权用户下运行:

“`bash

sudo adduser teamspeak

“`

按照提示设置密码。该用户将拥有所有TeamSpeak二进制文件、配置文件和SQLite数据库。

> 安全提示:对于加固环境,建议使用`–disabled-login`创建用户,并对所有操作使用`sudo -u teamspeak`,从而完全禁止交互式shell访问。

第三步:下载并解压TeamSpeak服务器二进制文件

切换到`teamspeak`用户上下文:

“`bash

sudo su – teamspeak

“`

下载最新稳定版TeamSpeak 3 Server的64位Linux版本。在运行此命令之前,请务必在TeamSpeak官方下载页面确认当前版本号,因为版本字符串会随每次发布而变化:

“`bash

wget https://files.teamspeak-services.com/releases/server/3.13.7/teamspeak3-server_linux_amd64-3.13.7.tar.bz2 -O teamspeak-server.tar.bz2

“`

解压压缩包并去除顶层目录,使所有文件直接落入当前工作目录(`/home/teamspeak/`):

“`bash

tar xvfj teamspeak-server.tar.bz2 –strip-components 1

“`

通过创建所需的标记文件来接受TeamSpeak许可协议。服务器守护进程在没有该文件的情况下将拒绝启动:

“`bash

touch ~/.ts3server_license_accepted

“`

返回root用户:

“`bash

exit

“`

第四步:创建systemd服务单元

通过systemd管理TeamSpeak可确保进程在重启或崩溃后自动恢复,与`journald`集成以实现集中日志记录,并在启动时遵循正确的依赖顺序。

打开新的服务单元文件:

“`bash

nano /etc/systemd/system/teamspeak.service

“`

粘贴以下完整的单元配置:

“`ini

[Unit]

Description=TeamSpeak 3 Server

After=network.target

[Service]

WorkingDirectory=/home/teamspeak/

User=teamspeak

Group=teamspeak

Type=forking

ExecStart=/home/teamspeak/ts3server_startscript.sh start inifile=ts3server.ini

ExecStop=/home/teamspeak/ts3server_startscript.sh stop

PIDFile=/home/teamspeak/ts3server.pid

Restart=on-failure

RestartSec=10s

[Install]

WantedBy=multi-user.target

“`

关键指令说明:

  • `After=network.target` — 防止在网络栈就绪之前启动,避免`9987/UDP`上的绑定失败
  • `Type=forking` — 适用于TeamSpeak启动脚本,该脚本会派生后台进程
  • `Restart=on-failure` — 无需人工干预即可自动从意外崩溃中恢复
  • `RestartSec=10s` — 在重启尝试前添加短暂延迟,防止快速崩溃循环

保存文件(`Ctrl+S`,然后`Ctrl+X`),然后重新加载systemd守护进程以注册新单元:

“`bash

systemctl daemon-reload

“`

启用服务以在启动时自动运行,并立即启动:

“`bash

systemctl enable –now teamspeak

“`

验证服务是否处于活动运行状态:

“`bash

systemctl status teamspeak

“`

预期输出包含`Active: active (running)`以及有效的PID。如果状态显示`failed`,请立即检查日志:

“`bash

journalctl -u teamspeak -n 50 –no-pager

“`

第五步:获取管理员权限密钥(令牌)

TeamSpeak Server首次启动时,会在日志文件中生成一个权限密钥(令牌)。该令牌授予首个连接客户端完整的服务器管理员权限。您必须在其他人连接之前获取它。

“`bash

grep -i token /home/teamspeak/logs/*

“`

输出将包含类似以下内容的行:

“`

token=q1a2b3c4d5e6f7g8h9i0jKLMNOPQRSTUVWXYZ

“`

复制此令牌。首次通过TeamSpeak客户端连接时,系统将提示您输入该令牌。输入后,您的客户端将被提升至`Server Admin`服务器组。

> 重要提示:此令牌为一次性使用,首次兑换后即失效。如果在使用前丢失,您必须手动设置新的管理员密码(参见第六步)。请妥善保存。

第六步:设置或重置ServerAdmin密码

`serveradmin`账户用于ServerQuery访问——这是一个原始TCP或SSH接口,允许脚本化管理、机器人集成以及YaTQA或ts3admin等远程管理工具。

要设置或重置此密码,您必须临时停止服务,直接使用密码参数启动服务器二进制文件,然后再次停止并通过systemd重启:

“`bash

systemctl stop teamspeak.service

“`

切换到teamspeak用户并设置密码:

“`bash

su – teamspeak

./ts3server_startscript.sh start serveradmin_password=YourStrongPassword

“`

等待服务器完全初始化(在输出中查找`TeamSpeak 3 Server started successfully`),然后停止它:

“`bash

./ts3server_startscript.sh stop

exit

“`

重启托管服务:

“`bash

systemctl start teamspeak.service

“`

密码要求:使用至少16个字符,包含大小写字母、数字和符号。ServerQuery接口暴露在TCP端口`10011`上,若密码过弱,容易成为暴力破解的目标。

第七步:配置防火墙

如果您的服务器上已启用`ufw`,请开放所需端口:

“`bash

ufw allow 9987/udp comment "TeamSpeak voice"

ufw allow 10011/tcp comment "TeamSpeak ServerQuery"

ufw allow 30033/tcp comment "TeamSpeak file transfer"

ufw reload

“`

对于`firewalld`(CentOS/AlmaLinux):

“`bash

firewall-cmd –permanent –add-port=9987/udp

firewall-cmd –permanent –add-port=10011/tcp

firewall-cmd –permanent –add-port=30033/tcp

firewall-cmd –reload

“`

> 加固提示:如果您不需要公开访问ServerQuery,请将端口`10011`限制为特定的管理IP。对于标准语音服务器操作,无需将其公开暴露。

第八步:从TeamSpeak客户端连接

  1. 为您的桌面操作系统(Windows、macOS、Linux)下载并安装TeamSpeak 3客户端。
  2. 打开客户端,导航至连接 > 连接
  3. 服务器昵称或地址中输入您的VPS IP地址。
  4. 除非您在`ts3server.ini`中更改了端口,否则保持端口为`9987`。
  5. 首次连接时,客户端将提示您输入权限密钥(令牌)。粘贴在第五步中获取的令牌。
  6. 您的客户端现在已成为服务器管理员。

可选:使用自动安装脚本

为实现快速部署,AlexHost提供了一个自动安装脚本,可在单次执行中完成依赖项安装、用户创建、二进制文件下载和服务配置:

“`bash

ssh root@your_server_ip -p your_ssh_port

wget https://bill.alexhost.com/downloads/teamspeak_install.sh

chmod +x teamspeak_install.sh

./teamspeak_install.sh

“`

在执行脚本之前,请先查看其内容以了解它对您系统所做的更改。自动化脚本虽然方便,但切勿在生产基础设施上盲目运行。

TeamSpeak与其他方案对比:自托管语音平台

功能TeamSpeak 3MumbleDiscord(云端)
自托管
RAM占用(空闲)~30 MB~15 MBN/A
延迟极低极低低至中等
加密TLS(信令)DTLS + SRTP专有协议
权限系统高级ACL中等基于角色
客户端可用性Win/Mac/Linux/移动端Win/Mac/LinuxWin/Mac/Linux/移动端
许可证(服务器)免费最多32个槽位开源N/A
编解码器OpusOpus/CELTOpus
ServerQuery API是(TCP/SSH)仅REST API

TeamSpeak的ServerQuery API对于需要程序化服务器管理的组织来说是一个重要的差异化优势——自动化频道创建、机器人集成或CI/CD触发的权限变更。

常见安装问题及解决方案

服务器启动失败——”无法绑定到端口9987″

另一个进程正在使用UDP 9987,或者服务在网络就绪之前启动。使用`ss -ulnp | grep 9987`进行检查,并确认服务单元中存在`After=network.target`指令。

找不到许可证文件错误

`.ts3server_license_accepted`文件必须存在于运行进程的用户主目录中(`/home/teamspeak/`)。使用`ls -la /home/teamspeak/.ts3server_license_accepted`进行确认。

在日志中找不到令牌

日志目录默认为`/home/teamspeak/logs/`。如果您将压缩包解压到其他路径,请相应调整grep命令。令牌仅在首次启动的日志中出现——如果数据库已存在,则不会生成新令牌。

ServerQuery连接被拒绝

确认防火墙中端口`10011/TCP`已开放,且服务器进程正在运行。使用`telnet 127.0.0.1 10011`在本地进行测试——连接成功后将返回`TS3`横幅。

用户较多时CPU使用率过高

TeamSpeak的语音混音是单线程的。如果单个虚拟服务器实例的并发用户超过约200人,请考虑部署多个虚拟服务器,或升级至独立服务器方案,以获得有保障的CPU时钟速度,并消除嘈杂邻居竞争问题。

保护您的TeamSpeak部署安全

除上述用户隔离和防火墙规则外,还需应用以下加固措施:

  • 在`ts3server.ini`中更改默认端口,以减少自动扫描暴露风险。相应更新防火墙规则。
  • 限制ServerQuery(`10011/TCP`),使用防火墙源过滤将其限制为管理IP。
  • 在VPS上启用SSH密钥认证并禁用基于密码的root登录。请参阅您的VPS控制面板了解SSH密钥管理选项。
  • 通过`journalctl -u teamspeak -f`监控日志,检查异常连接模式或重复的ServerQuery认证失败。
  • 定期备份`/home/teamspeak/ts3server.sqlitedb`——该文件包含所有频道配置、服务器组、权限和客户端身份信息。丢失该文件意味着需要从头重建整个服务器结构。
  • 保持二进制文件更新。TeamSpeak会定期发布安全补丁。订阅其发布公告,并在有更新时使用新版本压缩包重复第三至第四步。

如果您在同一VPS上管理多个服务,可以考虑将TeamSpeak实例与VPS控制面板解决方案配合使用,从统一界面简化服务管理、监控和计划任务。

决策矩阵:此方案是否适合您?

场景推荐方案
并发用户不足32人的游戏社区入门级VPS,TeamSpeak免费许可证
32–512名并发用户的组织TeamSpeak许可证升级 + 2–4 vCPU VPS
需要完全硬件隔离,500+用户独立服务器,多个虚拟服务器实例
需要管理面板 + TeamSpeak配备cPanel或DirectAdmin的VPS
需要低延迟欧盟/美国路由选择距离用户最近的VPS数据中心位置
需要配套网络存在添加共享虚拟主机或在同一VPS上设置子域名
需要自定义域名作为服务器地址域名注册 + DNS A记录指向VPS IP

技术要点总结

  • 始终在专用非root用户下运行TeamSpeak。对于任何面向互联网的服务,这是不可妥协的原则。
  • `ts3server_license_accepted`标记文件必须在守护进程启动前存在——这是首次启动时常见的失败点。
  • 在systemd单元中使用`Type=forking`,而非`Type=simple`。启动脚本会派生后台进程;使用`simple`会导致systemd错误跟踪PID。
  • 首次启动后立即从日志中获取权限密钥令牌。该令牌首次使用后即失效,若不执行手动密码重置程序则无法重新生成。
  • 端口`9987/UDP`是基本语音操作所需的唯一端口。`10011/TCP`和`30033/TCP`根据您的使用场景可选开放。
  • 定期备份`ts3server.sqlitedb`。所有服务器配置均存储在这一个文件中。
  • 对于生产环境部署,将ServerQuery限制为本地主机或管理VLAN——切勿在未进行IP白名单设置的情况下公开暴露。

常见问题解答

TeamSpeak服务器免费许可证最多支持多少用户?

免费非营利许可证最多支持32个同时在线槽位。对于更大规模的部署,TeamSpeak提供64、128、256或512个槽位的年度许可证,以及面向符合条件组织的无限槽位”激活许可证”。

我可以在512 MB RAM的VPS上运行TeamSpeak Server吗?

可以。TeamSpeak 3 Server守护进程在空闲时消耗约25–40 MB RAM,并随并发用户数适度增长。512 MB VPS足以支持50名以下同时在线用户的社区,同时为操作系统和系统进程留有充足余量。

如何在不丢失配置的情况下更新TeamSpeak Server?

使用`systemctl stop teamspeak`停止服务,以`teamspeak`用户身份下载新版本压缩包,使用`–strip-components 1`将其解压到同一目录(仅覆盖二进制文件),然后重启服务。此过程不会覆盖`ts3server.sqlitedb`数据库和`ts3server.ini`配置文件。

为什么我的TeamSpeak服务器在公共服务器列表中不可见?

默认情况下,TeamSpeak服务器不会向公共服务器列表注册。要启用列表显示,请在`ts3server.ini`中设置`machine_id=`并配置`serverip`,然后通过ServerQuery或客户端的服务器管理面板启用公共列表选项。确保UDP端口`9987`可从互联网访问。

TeamSpeak流量默认是否加密?

信令流量(连接建立、聊天、权限)通过TLS加密。TeamSpeak 3中通过UDP传输的语音数据默认不加密。可以通过服务器设置按频道或全服务器启用语音加密,代价是CPU使用率略有增加。TeamSpeak 5(目前正在开发中)默认使用端对端加密。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用