Сервер TeamSpeak 6 в Docker Compose на VPS
Запуск официального образа TeamSpeak 6 Server через Docker Compose: порты в UFW, ключ привилегий ServerAdmin, обновление и резервная копия тома без потери каналов и прав. Ubuntu 24.04 и Debian 12.

TeamSpeak 6 — новое поколение голосового сервера TeamSpeak. Сервер пока в бете, но TeamSpeak распространяет его официальным образом Docker с бесплатной бета-лицензией на 32 слота. Поднимается за десять минут: Docker, два порта, один compose-файл, ключ привилегий из лога.
Это бета. Встроенная лицензия даёт 32 слота и обновляется вместе с новыми сборками. Лицензии от TeamSpeak 3 не подходят, миграции с сервера TS3 пока нет.
Что нужно
- Сервер на tanaka.host с Ubuntu 24.04 или Debian 12. Сам сервер лёгкий, хватит минимального тарифа с 1 ядром и 2 ГБ памяти; для голосового сервера, который работает круглосуточно, важнее лимит трафика, чем процессор.
- Доступ по SSH — подключение по SSH.
- Клиент TeamSpeak 6 на вашем компьютере, чтобы подключиться и забрать права администратора.
1. Обновите систему
ssh root@YOUR_SERVER_IP
apt update && apt upgrade -y
2. Установите Docker
Официальный скрипт Docker добавляет репозиторий и ставит Docker Engine вместе с плагином Compose:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
Проверка:
docker --version
docker compose version
Другие способы установки — в статье Docker на VPS.
3. Откройте порты в UFW
TeamSpeak 6 в обычной работе использует два порта:
| Порт | Протокол | Назначение |
|---|---|---|
| 9987 | UDP | голос |
| 30033 | TCP | передача файлов: аватарки, иконки, файлы каналов |
Есть ещё query-интерфейс (HTTP на 10080, SSH на 10022), но он выключен по умолчанию и для работы сервера не нужен.
Сначала SSH, чтобы не закрыть себе доступ, потом порты TeamSpeak:
ufw allow OpenSSH
ufw allow 9987/udp
ufw allow 30033/tcp
ufw enable
ufw status
Docker и UFW. Порты, опубликованные контейнерами, обходят правила UFW. Здесь это не мешает — 9987 и 30033 мы и так открываем, — но реальный список открытых портов определяется секцией
ports:в compose-файле. Не публикуйте лишнего. Подробнее — UFW и firewalld.
4. Создайте compose-файл
mkdir -p /opt/teamspeak
cd /opt/teamspeak
nano compose.yaml
Вставьте конфигурацию на основе официального примера TeamSpeak:
services:
teamspeak:
image: teamspeaksystems/teamspeak6-server:latest
container_name: teamspeak-server
restart: unless-stopped
ports:
- "9987:9987/udp"
- "30033:30033/tcp"
environment:
- TSSERVER_LICENSE_ACCEPTED=accept
volumes:
- teamspeak-data:/var/tsserver
volumes:
teamspeak-data:
name: teamspeak-data
TSSERVER_LICENSE_ACCEPTED=acceptпринимает лицензию TeamSpeak. Без этой строки сервер не стартует.teamspeak-data:/var/tsserverхранит базу, каналы, права и загруженные файлы в именованном томе Docker. Контейнер можно удалить и пересоздать — данные останутся.restart: unless-stoppedподнимает сервер после сбоя или перезагрузки VPS.
Сохраните: Ctrl+O, Enter, Ctrl+X. Если Compose для вас новый инструмент — есть шпаргалка.
5. Запустите и заберите ключ привилегий
docker compose up -d
При самом первом старте сервер создаёт одноразовый ключ привилегий ServerAdmin и печатает его в лог:
docker compose logs -f
Найдите строку с privilege key и сохраните ключ в надёжное место. Ctrl+C закрывает просмотр лога, сервер продолжает работать.
Ключ печатается один раз — только при первом запуске с пустым томом. Если пропустили его и терять пока нечего, быстрее всего удалить контейнер вместе с томом командой
docker compose down -vи запустить заново.
6. Подключитесь и станьте администратором
Откройте клиент TeamSpeak 6 и подключитесь к YOUR_SERVER_IP — стандартный порт 9987 указывать не нужно. При первом подключении к новому серверу клиент предложит ввести ключ привилегий; можно сделать это и позже через соответствующий пункт меню.
После принятия ключа ваша identity получает группу Server Admin: можно создавать каналы, ставить пароль на сервер, раздавать права. Ключ после использования сгорает — права другим администраторам выдавайте из клиента, а не передавайте токены.
Обновление
Новые бета-сборки выходят регулярно, и через них же продлевается лицензия, поэтому сервер стоит держать свежим. Данные в томе, обновление заменяет только контейнер:
cd /opt/teamspeak
docker compose pull
docker compose up -d
Старые образы занимают место — удалите:
docker image prune -f
Резервная копия
Всё важное лежит в томе teamspeak-data. Ненадолго остановите сервер и заархивируйте том:
cd /opt/teamspeak
docker compose stop
docker run --rm -v teamspeak-data:/data -v /root:/backup alpine tar czf /backup/teamspeak-backup.tar.gz -C /data .
docker compose start
Скачайте /root/teamspeak-backup.tar.gz к себе через scp и храните копию вне сервера — при удалении VPS его диск пропадает безвозвратно. Автоматизировать выгрузку можно через restic в S3.
Частые ошибки
| Проблема | Что проверить |
|---|---|
| Клиент не подключается | docker compose ps — поднят ли контейнер; ufw status — есть ли правило для 9987/udp |
| Голос работает, аватарки и файлы нет | закрыт или не опубликован 30033/tcp |
| Контейнер перезапускается по кругу | docker compose logs; обычно не хватает TSSERVER_LICENSE_ACCEPTED=accept |
| Сервер перестал отвечать | проверьте состояние VPS в кабинете tanaka.host и ресурсы сервера — docker stats --no-stream |
Следить за доступностью сервера удобно через Uptime Kuma — он умеет проверять UDP-порты. Официальный репозиторий образа: https://github.com/teamspeak/teamspeak6-server.