Docker部署TeamSpeak服务器:一条平坦的成功之路

作为一名 Linux 爱好者和 TeamSpeak 用户,我一直梦想着在自己的 Ubuntu 服务器上搭建一个稳定、可靠的 TeamSpeak 语音服务器。通过拥抱 Docker,我找到了一条高效、简洁的部署之路,成功地将 TeamSpeak 服务器容器化并投入使用。

为什么选择 Docker?

  • 环境隔离:TeamSpeak 及其所有依赖都在独立的容器中运行,避免污染宿主机系统。

  • 部署便捷docker-compose.yml 文件让部署、迁移和管理变得异常简单。

  • 版本控制:轻松指定和管理 TeamSpeak 服务器的版本。

  • 开箱即用:Docker 镜像通常包含了应用所需的一切。

我的部署环境

  • 宿主机操作系统:Ubuntu 24.04 LTS

  • Docker Engine 版本:27.5.1

  • Docker Compose 版本:v2.37.3 (Docker CLI 插件版)

  • TeamSpeak 服务器镜像teamspeak (Docker Hub 官方镜像)

TeamSpeak Docker 部署指南

以下是我在 Ubuntu 服务器上成功部署 TeamSpeak 的详细步骤:

1. 配置 Docker 代理 (网络环境必备)

如果你的服务器位于需要通过代理才能访问外部网络的复杂环境中,你需要为 Docker Daemon 配置代理。这确保 Docker 能正常拉取镜像。

首先,创建或修改 Docker Daemon 的 systemd 配置文件:

1
2
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

在文件中添加以下内容,将 your_proxy_ip:port 替换为你的实际代理地址:

1
2
3
4
5
# 文件路径: /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://your_proxy_ip:port/"
Environment="HTTPS_PROXY=http://your_proxy_ip:port/"
Environment="NO_PROXY=localhost,127.0.0.1,::1,*.local,169.254/16"

保存并退出。然后,重载 Systemd 配置并重启 Docker 服务使其生效:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

2. 确保 Docker Compose V2 已安装

为了与最新的 Docker Engine 保持最佳兼容性并利用最新功能,建议使用 Docker Compose CLI 插件版 (V2)。

如果尚未安装,请通过以下命令进行安装:

1
2
3
4
# 更新包列表
sudo apt update
# 安装 Docker Compose CLI 插件
sudo apt install docker-compose-plugin

安装完成后,验证其版本:

1
docker compose version

输出应显示 Docker Compose version v2.x.x

3. 编写 docker-compose.yml 文件

在你的服务器上选择一个合适的位置(例如 /opt/teamspeak3-data),创建 docker-compose.yml 文件。这个文件定义了 TeamSpeak 服务的各项配置:

1
2
3
sudo mkdir -p /opt/teamspeak3-data
cd /opt/teamspeak3-data
sudo nano docker-compose.yml

将以下内容粘贴到 docker-compose.yml 文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 文件路径: /opt/teamspeak3-data/docker-compose.yml
services:
teamspeak:
image: teamspeak # 使用官方的 'teamspeak' 镜像
container_name: teamspeak
environment:
- PUID=1000 # 映射到宿主机的用户 ID,通常是你的普通用户 ID
- PGID=1000 # 映射到宿主机的组 ID
- TZ=Asia/Shanghai # 设置容器内部时区,请根据实际情况修改
- TS3SERVER_LICENSE=accept # 接受 TeamSpeak 许可协议,此行必须存在!
volumes:
- ./config:/config # 将宿主机当前目录下的 config 文件夹映射到容器的 /config
ports:
- 9987:9987/udp # TeamSpeak 语音数据端口 (UDP)
- 10011:10011/tcp # ServerQuery 端口 (TCP)
- 30033:30033/tcp # 文件传输端口 (TCP)
restart: unless-stopped # 设置容器在宿主机重启或容器崩溃时自动重启

配置说明:

  • image: teamspeak:指定使用的 TeamSpeak 官方 Docker 镜像。

  • PUID=1000PGID=1000:这些环境变量允许容器内部的 TeamSpeak 进程以特定的用户和组 ID 运行,这对于正确管理数据卷的权限至关重要。请将 1000 替换为你的 Ubuntu 用户对应的 ID(通常为 1000)。

  • TZ=Asia/Shanghai:设置服务器的时区。

  • TS3SERVER_LICENSE=accept:这是启动 TeamSpeak 服务器的强制要求,表示你已接受其许可协议。

  • volumes:将宿主机的 ./config 目录挂载到容器的 /config 目录,用于持久化存储 TeamSpeak 的配置、数据库和日志。

  • ports:将容器的必要端口映射到宿主机,使外部网络能够访问 TeamSpeak 服务。

  • restart: unless-stopped:确保 TeamSpeak 容器在宿主机重启或容器意外退出时自动重新启动。

4. 配置数据卷权限

为了确保 TeamSpeak 容器能够正常读写其数据,必须为挂载的 ./config 目录设置正确的权限:

1
2
3
sudo mkdir -p config           # 如果 config 目录不存在,创建它
sudo chown -R 1000:1000 config # 将 config 目录及其内容的拥有者设置为 PUID/PGID (用户ID 1000)
sudo chmod -R 775 config # 给予所有者和组读写执行权限,其他用户读执行权限

5. 启动 TeamSpeak 服务器

现在,所有准备工作都已完成,我们可以启动 TeamSpeak 服务了。首先,拉取 TeamSpeak 镜像:

1
sudo docker pull teamspeak

然后,确保你在包含 docker-compose.yml 文件的目录 (/opt/teamspeak3-data) 中执行以下命令启动服务:

1
sudo docker compose up -d --no-build
  • up: 启动服务。

  • -d: 在后台(detached mode)运行容器,不占用终端。

  • --no-build: 告诉 Docker Compose 不要尝试构建镜像,直接使用本地已有的镜像。

如果一切顺利,你将看到类似以下成功的输出:

1
2
3
[+] Running 2/2
✔ Network teamspeak3-data_default Created
✔ Container teamspeak Started

这意味着你的 TeamSpeak 服务器容器已经成功启动并在后台运行!

6. 获取管理员令牌并连接

TeamSpeak 服务器在首次成功启动时会生成一个管理员权限令牌(Privilege Key)。你需要这个令牌来获取服务器的管理员权限。

查看容器日志来获取令牌:

1
sudo docker logs teamspeak

在日志输出中,找到包含 token= 的行,例如:

1
token=iqIQI6zRbFrGuM49H9wLgTlHjht1foRc3xTWPSpK

复制 token= 后面的完整字符串(这就是你的管理员令牌)。

最后,打开你的 TeamSpeak 客户端,在连接界面输入你 Ubuntu 服务器的 IP 地址进行连接,并在提示时粘贴你复制的管理员令牌。