Запустим обычный PC-сервер под отдельным пользователем Linux, явно выберем мир и сохраним его при перезапусках. Инструкция рассчитана на Ubuntu 24.04 x86_64 и Terraria 1.4.5.8, с подключением по IP. Для tModLoader, TShock и игры между платформами совместимость проверяют отдельно.
Нужны чистый VPS с публичным IPv4, SSH и sudo. Для небольшой группы без модов выделите несколько гигабайт памяти и проверьте расход при генерации мира: это начальная оценка, а не гарантия вместимости. Перед изменением firewall убедитесь, что доступна консоль восстановления у провайдера.
Скачайте сервер той же версии, что и игра#
Сначала сравните полный номер версии у всех игроков. В официальном архиве 1.4.5.8 есть каталог 1458/Linux, launcher и файлы встроенной среды выполнения. Если клиент другой версии, выберите соответствующий сервер на сайте Terraria, не подбирая цифры в URL наугад.
Из обычной административной SSH-сессии:
sudo apt update
sudo apt install -y curl unzip tmux ufw nano file binutils
sudo useradd --system --user-group --create-home \
--home-dir /srv/terraria --shell /bin/bash terraria
sudo install -d -o terraria -g terraria -m 750 \
/srv/terraria/worlds /srv/terraria/backups
curl --fail --location \
https://terraria.org/api/download/pc-dedicated-server/terraria-server-1458.zip \
--output /tmp/terraria-server-1458.zip
sha256sum /tmp/terraria-server-1458.zip
sudo unzip -q /tmp/terraria-server-1458.zip -d /opt/terraria-release
sudo chmod +x /opt/terraria-release/1458/Linux/TerrariaServer \
/opt/terraria-release/1458/Linux/TerrariaServer.bin.x86_64
file /opt/terraria-release/1458/Linux/TerrariaServer.bin.x86_64
Последняя команда определяет архитектуру, но не запускает игру. Сохраняйте весь Linux-каталог: одного бинарника недостаточно. Поставляемый launcher TerrariaServer переходит в свой каталог и задаёт окружение; дальше используем его. Не устанавливайте произвольную системную Mono или .NET, пока не проверили целостность самой поставки.
Создайте мир в интерактивной консоли#
Домашний каталог серверного пользователя — /srv/terraria. Откройте интерактивную сессию от его имени:
sudo -iu terraria
umask 077
cd /opt/terraria-release/1458/Linux
tmux new-session -s terraria
./TerrariaServer -worldpath /srv/terraria/worlds
В диалоге сервера создайте мир, выберите размер и сложность, назовите его Coop. Затем выберите созданный мир, лимит восемь игроков, порт 7777, откажитесь от автоматического проброса портов и задайте непустой пароль. Это пример настроек закрытой группы; для мира Journey нужны и совместимые персонажи.
Дождитесь завершения генерации и проверьте версию в консоли. Командой help посмотрите доступные команды именно этой сборки. Введите save, дождитесь сохранения, затем exit, чтобы сохранить и остановить сервер. Эти команды вводят в консоль игры, не в Bash. Для обычной остановки не используйте exit-nosave: справочник команд сервера различает эти действия.
После завершения процесса проверьте фактическое имя файла:
find /srv/terraria/worlds -maxdepth 1 -type f -name '*.wld' -print
nano /srv/terraria/serverconfig.txt
Скопируйте точное имя с учётом регистра. Если получилось Coop.wld, внесите:
world=/srv/terraria/worlds/Coop.wld
worldpath=/srv/terraria/worlds
maxplayers=8
port=7777
password=REPLACE_WITH_A_PRIVATE_PASSWORD
upnp=0
Замените заглушку пароля до запуска. Эти общие параметры описаны в Windows/serverconfig.txt скачанного архива. Для готового мира не включайте autocreate: ошибку в пути нужно исправить, а не получить из-за неё новый мир. Ограничьте доступ к конфигурации:
chmod 600 /srv/terraria/serverconfig.txt
./TerrariaServer -config /srv/terraria/serverconfig.txt
Для отсоединения нажмите Ctrl+B, затем D. Консоль продолжит работать после закрытия SSH. Позже из исходной административной сессии можно вернуться:
sudo -iu terraria tmux attach-session -t terraria
Tmux переживает разрыв соединения, но не запускает игру после перезагрузки VPS. После reboot создайте новую tmux-сессию под terraria, перейдите в тот же Linux-каталог и запустите ту же конфигурацию. Второй процесс с тем же миром одновременно не запускайте.
Откройте доступ и проверьте вход в мир#
Firewall настраивают из обычной административной SSH-сессии. Посмотрите фактический SSH-порт через sudo sshd -T и разрешите его до включения UFW. Пример предполагает SSH на TCP 22:
sudo ufw allow 22/tcp
sudo ufw allow 7777/tcp
sudo ufw enable
sudo ufw status verbose
sudo ss -ltnp 'sport = :7777'
При другом SSH-порте сначала замените 22. Разрешите TCP 7777 и в firewall провайдера. Для сервера в частной сети понадобится правило на роутере, направленное на его локальный адрес. Одного разрешения UDP для такого TCP-подключения недостаточно.
В PC-клиенте совпадающей версии выберите Multiplayer → Join via IP, введите публичный IPv4 VPS, порт 7777 и пароль. Названия в русской локализации могут отличаться. Прослушиваемый сокет подтверждает локальный запуск; вход персонажа в нужный мир проверяет больше. Сделайте узнаваемое изменение, сохраните мир, перезапустите сервер через exit и убедитесь, что изменение осталось.
Храните копию за пределами VPS#
Предупредите игроков, в подключённой серверной консоли введите save, дождитесь завершения и введите exit. Копировать данные можно после возврата launcher в Bash. Всё ещё под пользователем terraria:
(
set -e
umask 077
terraria_backup="/srv/terraria/backups/terraria-$(date -u +%Y%m%dT%H%M%SZ).tar.gz"
tar -czf "$terraria_backup" -C /srv/terraria worlds serverconfig.txt
tar -tzf "$terraria_backup"
)
Копируйте весь worlds, включая существующие .bak и другие резервные файлы мира. Копия рядом с оригиналом поможет после неудачного редактирования, но исчезнет вместе с тем же диском. В отдельной административной SSH-сессии введите точный путь к архиву и создайте защищённую копию в домашнем каталоге SSH-пользователя:
read -r -p "Exact archive path: " game_archive
ssh_admin=$(id -un)
ssh_group=$(id -gn)
ssh_home=$(getent passwd "$ssh_admin" | cut -d: -f6)
sudo install -o "$ssh_admin" -g "$ssh_group" -m 600 \
"$game_archive" "$ssh_home/terraria-export.tar.gz"
С рабочей машины замените обе заглушки:
scp YOUR_SSH_USER@YOUR_VPS_IP:terraria-export.tar.gz .
Копию для передачи может читать только её владелец. После скачивания и проверки удалите эту промежуточную копию; внешний архив тоже храните защищённым, поскольку в нём есть серверный пароль.
Для восстановления остановите сервер, отдельно сохраните текущий мир и сначала распакуйте архив во временный каталог. Верните выбранный мир и конфигурацию с владельцем terraria:terraria, запустите совпадающую версию и проверьте узнаваемое изменение через клиент. Просмотр списка файлов архива не заменяет проверку восстановления.
Найдите первый уровень, на котором произошёл сбой#
| Наблюдение | Следующая проверка | Что это означает |
|---|---|---|
| Launcher сразу завершается | Запустите интерактивно из его каталога и сохраните полную ошибку | Проблема файлов, прав или среды возникает до сети |
| Консоль сообщает о несовпадении версий | Сравните полные версии клиента и сервера | Firewall не исправит несовместимость сборок |
| Сервер неожиданно предлагает создать мир | Проверьте world= и точное имя файла | Другой путь или пользователь могут выбрать другое сохранение |
| Сокет есть, извне войти нельзя | Проверьте firewall провайдера и публичный адрес | Локальное прослушивание не проверяет внешний маршрут |
| Пропали последние изменения | Проверьте остановку через exit, восстановите копию остановленного мира | Убийство процесса не подтверждает сохранение |
Старые Linux-инструкции часто объединяют автогенерацию, запуск службы и её остановку. Первый интерактивный запуск разделяет эти неисправности и даёт конкретный файл мира для сохранения. Следующее улучшение — управляемая служба, которая при остановке действительно передаёт игре команду сохранения и выхода. Сначала проверьте этот цикл на временном мире.




