如何在 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 vCPU | 2 vCPU |
|---|
| RAM | 512 MB | 1 GB |
|---|
| 磁盘空间 | 1 GB | 5 GB(日志 + 数据库) |
|---|
| 网络 | 10 Mbps | 100 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客户端连接
- 为您的桌面操作系统(Windows、macOS、Linux)下载并安装TeamSpeak 3客户端。
- 打开客户端,导航至连接 > 连接。
- 在服务器昵称或地址中输入您的VPS IP地址。
- 除非您在`ts3server.ini`中更改了端口,否则保持端口为`9987`。
- 首次连接时,客户端将提示您输入权限密钥(令牌)。粘贴在第五步中获取的令牌。
- 您的客户端现在已成为服务器管理员。
可选:使用自动安装脚本
为实现快速部署,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 3 | Mumble | Discord(云端) |
|---|
| — | — | — | — |
|---|
| 自托管 | 是 | 是 | 否 |
|---|
| RAM占用(空闲) | ~30 MB | ~15 MB | N/A |
|---|
| 延迟 | 极低 | 极低 | 低至中等 |
|---|
| 加密 | TLS(信令) | DTLS + SRTP | 专有协议 |
|---|
| 权限系统 | 高级ACL | 中等 | 基于角色 |
|---|
| 客户端可用性 | Win/Mac/Linux/移动端 | Win/Mac/Linux | Win/Mac/Linux/移动端 |
|---|
| 许可证(服务器) | 免费最多32个槽位 | 开源 | N/A |
|---|
| 编解码器 | Opus | Opus/CELT | Opus |
|---|
| 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(目前正在开发中)默认使用端对端加密。
