Переезд сервера TeamSpeak — на другой VDS, к другому хостеру, хоть с Windows на Linux — это копирование нескольких файлов. Каналы, группы, права, баны и даже админки участников переедут вместе с ними, и никто не заметит подмены. Но у переезда есть три места, где легко потерять данные: копирование базы на работающем сервере, запуск на более старой версии и преждевременное удаление старой машины. Эта инструкция проводит через переезд так, чтобы в каждый момент у вас оставался путь назад.
Здесь речь именно о переносе. Регулярный бэкап — отдельная тема, он настроен отдельным шагом в инструкции по установке на Ubuntu: если бэкапа ещё нет, начните с него, потому что перенос по сути и есть восстановление свежего бэкапа на новом месте.
Что переедет, а что нет. В базе ts3server.sqlitedb живёт всё содержимое сервера: виртуальные серверы, каналы со всеми настройками, серверные и канальные группы, права, история банов, зарегистрированные идентификации пользователей вместе с их группами. В каталоге files/ — аватарки, иконки и файлы, загруженные в каналы. Переносите оба — переезжает всё. Не переедут только вещи, которые живут в операционной системе, а не в TeamSpeak: юнит systemd, правила фаервола, cron с бэкапом — их вы заново настроите на новой машине по той же инструкции.
Подготовьте новую машину
Выберите VDS — критерии те же, что при первой установке: минимальный тариф хватает с запасом, важен не CPU, а пинг до участников. Подробно — в статье про выбор VDS для TeamSpeak. Если заодно меняете регион, помните: переезд из Амстердама в Москву поменяет задержку всем участникам, в обе стороны.
Установите на новую машину сервер TeamSpeak по инструкции для Ubuntu — всё до шага с systemd включительно: пользователь, проверка контрольной суммы, принятие лицензии, юнит, фаервол. Первый запуск сделайте как обычно: сервер создаст свежую пустую базу и напечатает пароль serveradmin. Эти учётные данные можно не сохранять — база всё равно будет заменена вашей, вместе с вашим старым паролем serveradmin.
Про версии — важно. Ставьте версию той же или новее, чем на старом сервере. Более новый сервер при первом запуске со старой базой сам обновит её схему — это штатный путь. А вот в обратную сторону дороги нет: более старый сервер с базой, которую уже трогала новая версия, работать откажется. Понизить версию можно только ручной правкой базы по changelog — на практике это означает «нельзя». Проверить версию на старом сервере: ./ts3server_startscript.sh не покажет, а вот лог покажет первой же строкой:
grep -h "TeamSpeak 3 Server" /opt/teamspeak/teamspeak3-server_linux_amd64/logs/ts3server_*_1.log | tail -n 1
Проще способ: версия написана в имени скачанного архива, а на живом сервере её видно в клиенте — правый клик по серверу → в окне подключения, либо во вкладке с информацией о сервере.
Когда сервер на новой машине поднялся и вы дошли до пустого лобби — остановите его:
systemctl stop ts3server
Остановите старый сервер
Перед копированием старый сервер обязательно останавливается:
systemctl stop ts3server
Причина не в вежливости, а в устройстве SQLite. Работающий сервер пишет в ts3server.sqlitedb постоянно — кто-то зашёл, кто-то сменил канал, тикнул счётчик времени. Копируя файл в этот момент, вы можете застать его посреди транзакции: часть страниц базы уже новая, часть ещё старая. Такая копия — лотерея: в лучшем случае она откроется с потерей последних изменений, в худшем новый сервер объявит базу повреждённой и создаст пустую. Остановленный сервер закрывает базу корректно, и файл гарантированно цел.
Предупредите участников заранее: с этого момента и до переключения на новый адрес сервер недоступен. При подготовленной новой машине простой — минуты.
Скопируйте файлы переезда
Список — из официальной статьи TeamSpeak о переносе сервера. Всё лежит в каталоге сервера (в нашей установке — /opt/teamspeak/teamspeak3-server_linux_amd64/):
| Файл | Что в нём |
|---|---|
ts3server.sqlitedb | Каналы, группы, права, баны, идентификации |
files/ целиком | Аватарки, иконки, файлы из каналов |
ts3server.ini | Порты и привязка ServerQuery |
query_ip_allowlist.txt, query_ip_denylist.txt | Доступ к ServerQuery |
licensekey.dat | Платная лицензия, если она есть |
Что случится, если забыть каждый из них:
ts3server.sqlitedb— потеряете всё. Новый сервер поднимется пустым, права придётся раздавать заново.files/— сервер работает, но иконки групп пропали, аватарки пустые, файловые каналы обнулились.ts3server.ini— сервер стартует с настройками по умолчанию. Нестандартные порты слетят, а ServerQuery, привязанный к localhost, снова начнёт слушать все адреса.- Списки доступа — сервер создаст их заново с одним
127.0.0.1, и ваши доверенные адреса вместе с банами query-ботов пропадут. licensekey.dat— сервер откатится на бесплатную лицензию: один виртуальный сервер, 32 слота. Что даёт каждая — в справочнике по лицензиям. На бесплатной лицензии этого файла нет, копировать нечего.
В старых версиях сервера списки доступа назывались query_ip_whitelist.txt и query_ip_blacklist.txt — если у вас такие, копируйте их, новый сервер поймёт. Если сервер использует TSDNS, добавьте к списку tsdns/tsdns_settings.ini; в типовой установке TSDNS не используется — его давно заменила SRV-запись. Каталог logs/ переносить не обязательно: история в нём полезная, но на работу сервера не влияет.
Собираем архив на старой машине и перекидываем на новую одной командой:
cd /opt/teamspeak/teamspeak3-server_linux_amd64
tar czf /root/ts3-move.tar.gz --ignore-failed-read \
ts3server.sqlitedb files ts3server.ini \
query_ip_allowlist.txt query_ip_denylist.txt licensekey.dat
scp /root/ts3-move.tar.gz root@203.0.113.20:/root/
203.0.113.20 — адрес новой машины. Флаг --ignore-failed-read позволяет команде не падать из-за файлов, которых у вас нет (например, licensekey.dat на бесплатной лицензии).
Один нюанс для владельцев платной лицензии: пока licensekey.dat лежит на обеих машинах, не запускайте оба сервера одновременно. Сервер учёта лицензий TeamSpeak видит один ключ с двух адресов, и один из серверов ляжет с ошибкой virtual server is running elsewhere, shutting down!. Наш порядок это исключает сам собой — старый сервер остановлен ещё до копирования, — но не поднимайте его «на минутку посмотреть», пока работает новый.
Разверните архив и запустите новый сервер
На новой машине распакуйте архив поверх свежей установки. Пустую базу, созданную при первом запуске, просто перезаписываем:
cd /opt/teamspeak/teamspeak3-server_linux_amd64
tar xzf /root/ts3-move.tar.gz
chown -R teamspeak:teamspeak /opt/teamspeak
systemctl start ts3server
chown обязателен: файлы приехали от root, а сервер работает от пользователя teamspeak — без смены владельца он не сможет писать в собственную базу. Если новая версия сервера новее старой, при этом первом запуске она обновит схему базы — в логе появятся строки про миграцию, это нормально.
Проверьте, что сервис поднялся и в логе нет ошибок про базу:
systemctl status ts3server
tail -n 30 /opt/teamspeak/teamspeak3-server_linux_amd64/logs/$(ls -t /opt/teamspeak/teamspeak3-server_linux_amd64/logs | head -1)
Проверьте перенос, пока старый сервер цел
Старая машина сейчас — ваша страховка. Не трогайте её, пока лично не убедитесь, что на новой всё на месте. Подключитесь клиентом напрямую по IP новой машины (203.0.113.20) и пройдитесь по списку:
- Каналы — вся структура на месте, включая подканалы и пароли на каналах.
- Ваши права — рядом с ником иконка вашей группы, контекстные меню администратора доступны. Если да — идентификации переехали: сервер узнал ваш клиентский ключ по базе, никаких privilege key вводить не нужно.
- Иконки и аватарки — иконки групп и каналов отрисовались, а не показывают заглушки. Это проверка каталога
files/и заодно порта 30033/TCP на новом фаерволе: файлы ходят отдельным портом, и забытое правилоufwпроявится именно здесь. - Баны — список банов на месте (в клиенте: Tools → Ban List).
- Второй человек — попросите кого-то из участников зайти по новому IP и сказать пару слов. Голос в обе стороны — финальная проверка UDP 9987.
Что-то не сошлось — разбирайтесь сейчас, у вас есть нетронутый оригинал и сколько угодно попыток: остановите новый сервер, поправьте, распакуйте архив заново.
Переключите участников на новый адрес
Сервер переехал, но участники об этом не знают: в их закладках — старый адрес. Клиент TeamSpeak не умеет узнавать о переезде сам, здесь нет никакого механизма перенаправления. Дальнейшее зависит от того, что было в закладках.
Если участники подключались по IP — придётся написать каждому: «новый адрес такой-то, поменяйте закладку». Кто сообщение пропустил, тот будет стучаться в мёртвый адрес и решит, что сервер умер. Это худший сценарий, и он же — причина завести домен прямо сейчас, чтобы следующий переезд прошёл без рассылки.
Если участники подключались по домену — переезд для них невидим. Зайдите в панель DNS и поменяйте в A-записи старый IP на новый:
ts.example.com. 3600 IN A 203.0.113.20
SRV-запись менять не нужно: она указывает на имя ts.example.com, а не на IP, и порт не изменился. Клиенты подхватят новый адрес, когда истечёт TTL записи — при TTL 3600 это до часа. Хотите переключение быстрее — за день до переезда уменьшите TTL до 300, а после переезда верните. Как завести домен и настроить обе записи с нуля — в шаге про домен инструкции по установке.
Погасите старый сервер — не сразу
Даже после успешной проверки не удаляйте старую машину в день переезда. Подержите её выключенной неделю: за это время всплывёт то, что не всплыло при проверке, — участник с экзотической ролью, забытый query-бот, файл из дальнего канала. VDS на неделю стоит копейки по сравнению с ценой невосстановимой потери.
На старой машине сервер уже остановлен — осталось запретить ему подниматься после случайной перезагрузки:
systemctl disable ts3server
Это особенно важно при платной лицензии: случайно ожившая старая машина с тем же licensekey.dat уронит новую (см. выше про virtual server is running elsewhere). Через неделю-две спокойной работы забирайте со старой машины последний архив ts3-move.tar.gz к себе на компьютер — и удаляйте VDS. Не забудьте перенастроить на новой машине ночной бэкап: cron не переехал вместе с базой.
Откатитесь, если что-то пошло не так
План отката простой, потому что мы ничего не ломали: старая машина всё это время стоит с нетронутыми данными.
- Остановите новый сервер:
systemctl stop ts3serverна новой машине. - Запустите старый:
systemctl start ts3serverна старой (иsystemctl enable ts3server, если успели отключить). - Верните A-запись на старый IP, если успели поменять.
Одно предостережение. Если новый сервер успел поработать и участники на нём что-то меняли — создавали каналы, получали права, — эти изменения живут в базе новой машины и при откате пропадут. Перенести их назад копированием базы получится, только если версии серверов совпадают: базу, которую трогала более новая версия, старый сервер не примет. Поэтому решение об откате принимайте быстро, пока на новом сервере не накопилась жизнь, которую жалко терять.
Весь переезд — это одна остановка сервера, один архив с базой и настройками и одна A-запись. Данные ни в один момент не существуют в единственном экземпляре, у каждого шага есть путь назад, а участники с доменом в закладках вообще не узнают, что сервер сменил страну. Именно так и выглядит правильный переезд: скучно.
Если следующий переезд ещё только планируется, заранее сравните хостинги TeamSpeak по локации, каналу и условиям возврата. Это проще сделать до оплаты новой машины, пока старый сервер продолжает работать.