Setting up a Multiplayer Server/ru: Difference between revisions

From Vintage Story Wiki
Updating to match new version of source page
(Updating to match new version of source page)
(Updating to match new version of source page)
Tags: Mobile edit Mobile web edit
Line 2: Line 2:
==Базовая Настройка ==
==Базовая Настройка ==


<div class="mw-translate-fuzzy">
===Временный сервер===
===Временный сервер===
Если вы хотите получить временный многопользовательский опыт, достаточно открыть однопользовательский мир, а затем нажать кнопку "Открыть в локальную сеть" в меню escape. Это позволит игрокам в вашей локальной сети присоединиться.
Если вы хотите получить временный многопользовательский опыт, достаточно открыть однопользовательский мир, а затем нажать кнопку "Открыть в локальную сеть" в меню escape. Это позволит игрокам в вашей локальной сети присоединиться.
Если вы хотите разрешить игрокам за пределами вашей локальной сети присоединиться к вам, вы также можете нажать кнопку "Открыть для Интернета", которая попытается настроить внешнее соединение для подключения к вашему серверу из интернета. Это делается с помощью метода, называемого UPnP, и должно быть включено на вашем интернет-маршрутизаторе, который часто используется по умолчанию. Короче говоря, мы оцениваем вероятность успеха примерно в 60%, что "открытый для интернета" работает мгновенно и без проблем. Если это не так, вам нужно будет настроить так называемую "переадресацию портов" на вашем интернет-маршрутизаторе, что, к сожалению, иногда может быть сложно и неприятно. В этом случае вам нужно будет перенаправить TCP-порт 42420 на ваш компьютер. (Google 'Port forwarding' с именем или моделью вашего интернет-маршрутизатора, чтобы найти помощь.)
Если вы хотите разрешить игрокам за пределами вашей локальной сети присоединиться к вам, вы также можете нажать кнопку "Открыть для Интернета", которая попытается настроить внешнее соединение для подключения к вашему серверу из интернета. Это делается с помощью метода, называемого UPnP, и должно быть включено на вашем интернет-маршрутизаторе, который часто используется по умолчанию. Короче говоря, мы оцениваем вероятность успеха примерно в 60%, что "открытый для интернета" работает мгновенно и без проблем. Если это не так, вам нужно будет настроить так называемую "переадресацию портов" на вашем интернет-маршрутизаторе, что, к сожалению, иногда может быть сложно и неприятно. В этом случае вам нужно будет перенаправить TCP-порт 42420 на ваш компьютер. (Google 'Port forwarding' с именем или моделью вашего интернет-маршрутизатора, чтобы найти помощь.)
</div>


Чтобы этот сервер работал, ваш однопользовательский мир должен оставаться открытым.
Чтобы этот сервер работал, ваш однопользовательский мир должен оставаться открытым.
----
----


<div class="mw-translate-fuzzy">
===Выделенный сервер===
===Выделенный сервер===
В качестве альтернативы игра поставляется с выделенной серверной программой, которую вы можете запустить и оставить включенной навсегда, не входя в систему самостоятельно.
В качестве альтернативы игра поставляется с выделенной серверной программой, которую вы можете запустить и оставить включенной навсегда, не входя в систему самостоятельно.
Существует несколько способов запустить выделенный сервер.
Существует несколько способов запустить выделенный сервер.
</div>


==== Платные хосты ====
==== Платные хосты ====
Line 22: Line 26:
----
----


<div class="mw-translate-fuzzy">
=== Выделенные серверы на Linux ===
=== Выделенные серверы на Linux ===
Здесь описано, как настроить сервер в качестве службы в системах Linux.
Здесь описано, как настроить сервер в качестве службы в системах Linux.
</div>


<div class="mw-translate-fuzzy">
=====Требования к CentOS 7 (RHEL, Fedora, ...)=====
=====Требования к CentOS 7 (RHEL, Fedora, ...)=====
'''1. EPEL/screen/wget/curl Install'''
'''1. EPEL/screen/wget/curl Install'''
</div>


  yum -y install epel-release screen wget curl
<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://dotnet.microsoft.com/en-us/download/dotnet/7.0 .NET Runtime 7.0] This should be all needed to run a Vintagestory server. Everything else is just for convenience to start and manage it.
* install <code>pgrep</code>, <code>screen</code> and <code>wget</code> using your systems package manager.
</div>


'''2. Установка mono"'


  yum -y install yum-utils
<div lang="en" dir="ltr" class="mw-content-ltr">
  rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
===== Setup the server =====
  yum-config-manager --add-repo http://download.mono-project.com/repo/centos/
</div>
  yum -y install mono mono-devel
----
 
===== Требования к Ubuntu (Debian, Mint,...) =====
'''1. screen/wget/curl Install'''
 
  sudo apt install -y screen wget curl
 
'''2. Установка mono"'
 
Начиная с "Vintage Story version 1.12.7" и выше рекомендуется использовать "Mono version 5 или выше".
Это "это написано, предполагая Ubuntu 18.04" в качестве базовой ОС.
Чтобы установить последнюю стабильную версию для вашего конкретного дистрибутива, пожалуйста, следуйте инструкциям из [https://www.mono-project.com/download/stable/#download-lin официальная страница загрузки моно-проекта].
sudo apt install gnupg ca-certificates
  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
  echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
  sudo apt update
  sudo apt install -y mono-complete
 
----<br>


<div class="mw-translate-fuzzy">
'''3. Загрузить игру'''
'''3. Загрузить игру'''
</div>


<div class="mw-translate-fuzzy">
<span style="color:#E16100">Advice: ''Создайте отдельный каталог для Vintage Story так как tar.gz не содержит вложенной папки.''</span>
<span style="color:#E16100">Advice: ''Создайте отдельный каталог для Vintage Story так как tar.gz не содержит вложенной папки.''</span>
   mkdir server && cd server
   mkdir server && cd server
</div>


<div class="mw-translate-fuzzy">
Перейдите http://account.vintagestory.at/downloads<br>
Перейдите http://account.vintagestory.at/downloads<br>
Скопируйте ссылку из новейших "vs_server_*.*.*.пакет tar.gz" ("'Tar.gz Archive/Linux (server only)"' под надписью "'Показать другие доступные загрузки Vintage Story"')<br>
Скопируйте ссылку из новейших "vs_server_*.*.*.пакет tar.gz" ("'Tar.gz Archive/Linux (server only)"' под надписью "'Показать другие доступные загрузки Vintage Story"')<br>
Скачать с помощью "wget" через консоль ("Vintage Story version 1.12.9 в этом примере").
Скачать с помощью "wget" через консоль ("Vintage Story version 1.12.9 в этом примере").
</div>


   wget https://cdn.vintagestory.at/gamefiles/stable/vs_server_1.12.9.tar.gz
   <div class="mw-translate-fuzzy">
wget https://cdn.vintagestory.at/gamefiles/stable/vs_server_1.12.9.tar.gz
</div>


<div class="mw-translate-fuzzy">
'''4. Извлечение tar.gz архива"'
'''4. Извлечение tar.gz архива"'
</div>


   tar xzf vs_server_*.*.*.tar.gz
   <div class="mw-translate-fuzzy">
tar xzf vs_server_*.*.*.tar.gz
</div>


<div class="mw-translate-fuzzy">
'''5. Запустить server.sh "'
'''5. Запустить server.sh "'
</div>


   chmod +x server.sh
   chmod +x server.sh


<div class="mw-translate-fuzzy">
'''6. Редактировать server.sh "'
'''6. Редактировать server.sh "'
</div>


По соображениям безопасности вы не должны запускать сервер от имени пользователя root, поэтому по умолчанию имя пользователя установлено на vintagestory.
По соображениям безопасности вы не должны запускать сервер от имени пользователя root, поэтому по умолчанию имя пользователя установлено на vintagestory.
Line 87: Line 93:
   VSPATH='<your-vs-directory>'
   VSPATH='<your-vs-directory>'


<div class="mw-translate-fuzzy">
'''7. Откройте порт на брандмауэре (если это необходимо)"'
'''7. Откройте порт на брандмауэре (если это необходимо)"'
</div>


firewalld
firewalld
Line 95: Line 103:
   iptables -A INPUT -p tcp -m tcp --dport 42420 -j ACCEPT
   iptables -A INPUT -p tcp -m tcp --dport 42420 -j ACCEPT


<div class="mw-translate-fuzzy">
'''8. Запуск сервера и первые шаги"'
'''8. Запуск сервера и первые шаги"'
</div>


   ./server.sh start
   <div class="mw-translate-fuzzy">
./server.sh start
   Дождитесь завершения запуска, и тогда вы сможете дать себе OP с помощью  
   Дождитесь завершения запуска, и тогда вы сможете дать себе OP с помощью  
   ./server.sh command "/op <youusername>"
   ./server.sh command "/op <youusername>"
</div>


<div class="mw-translate-fuzzy">
'''9. Подключайтесь к IP/домену и получайте удовольствие"'
'''9. Подключайтесь к IP/домену и получайте удовольствие"'
----
----
</div>


===== Требования к Alpine (Advanced, без поддержки) =====  
<div lang="en" dir="ltr" class="mw-content-ltr">
'''1. Установка mono"'
==== Simple Server start command ====
 
If you want to use a custom script or just manually start your server you can run
Поскольку mono находится в тестировании в Alpine, URL-адрес тестирования (http://dl-cdn.alpinelinux.org/alpine/edge/testing) придется раскомментировать в
dotnet VintagestoryServer.dll --dataPath /path/to/data
 
Or
  /etc/apk/repositories
./VintagestoryServer --dataPath /path/to/data
 
if you have the <code>DOTNET_ROOT</code> environment variable set.
после этого
</div>
 
  apk update
  apk add mono mono-dev
 
'''2. Установка tmux"'
 
  apk add tmux
 
'''3. Сертификаты'''
 
  apk add ca-certificates
 
потом
 
  cert-sync /etc/ssl/certs/ca-certificates.crt
 
чтобы обновить сертификаты.
 
'''4. Упрощенный Сценарий Запуска"'
 
Загрузите и извлеките сервер в обычное место, а затем поместите это в скрипт:
 
  #!/bin/ash
  mono VintagestoryServer.exe --dataPath ./data
 
Этот скрипт просто запустит сервер, поместив файлы сохранения мира в ту же папку, в которую был извлечен сервер.
Как продвинутый пользователь, вам не нужно беспокоиться о наличии зависимостей, проверке новых версий, установке сервера или сохранении файлов под разными пользователями и местоположениями.
 
Запустите скрипт в сеансе tmux.
 
Еще немного советов (брандмауэр и т. д.).


==== Обновление серверов ====
==== Обновление серверов ====
Line 193: Line 176:
==== Установка ====
==== Установка ====


'''1. mono Установка Debian 9'''
  sudo apt install apt-transport-https dirmngr gnupg ca-certificates wget nano
  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
  echo "deb https://download.mono-project.com/repo/debian stable-stretch main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
  sudo apt update
  sudo apt install mono-devel
Для Debian 10 use
  echo "deb https://download.mono-project.com/repo/debian stable-buster main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list


<div class="mw-translate-fuzzy">
'''2. создание пользователя'''
'''2. создание пользователя'''
   adduser --shell /bin/bash --disabled-password gameserver
   adduser --shell /bin/bash --disabled-password gameserver
</div>


'''3. создание каталогов'''
'''3. создание каталогов'''
Line 211: Line 187:
   mkdir -p /usr/lib/systemd/system
   mkdir -p /usr/lib/systemd/system


<div class="mw-translate-fuzzy">
'''3. Скачать игру''''
'''3. Скачать игру''''
   cd /srv/gameserver/vintagestory
   cd /srv/gameserver/vintagestory
</div>


<div class="mw-translate-fuzzy">
Перейти http://account.vintagestory.at/downloads<br>
Перейти http://account.vintagestory.at/downloads<br>
Скопируйте ссылку из новейших "vs_server_*.*.*.пакет tar.gz" ("'Tar.gz Archive/Linux (server only)"' под надписью "'показать другие доступные загрузки Vintage Story"')<br>
Скопируйте ссылку из новейших "vs_server_*.*.*.пакет tar.gz" ("'Tar.gz Archive/Linux (server only)"' под надписью "'показать другие доступные загрузки Vintage Story"')<br>
Скачать с помощью "wget" через консоль ("Vintage Story version 1.12.9 в этом примере").
Скачать с помощью "wget" через консоль ("Vintage Story version 1.12.9 в этом примере").
</div>


   wget https://cdn.vintagestory.at/gamefiles/stable/vs_server_1.12.9.tar.gz
   <div class="mw-translate-fuzzy">
wget https://cdn.vintagestory.at/gamefiles/stable/vs_server_1.12.9.tar.gz
</div>


<div class="mw-translate-fuzzy">
'''4. Извлечение tar.gz архива"'
'''4. Извлечение tar.gz архива"'
</div>


   tar xzf vs_server_1.12.9.tar.gz
   <div class="mw-translate-fuzzy">
tar xzf vs_server_1.12.9.tar.gz
'''5. Сменить владельца'''
'''5. Сменить владельца'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
'''4. Change owner'''
</div>


Вы должны установить владельца каталога Вашего игрового сервера, чтобы избежать ошибок разрешения на запись
Вы должны установить владельца каталога Вашего игрового сервера, чтобы избежать ошибок разрешения на запись
   chown -R gameserver:gameserver /srv/gameserver
   chown -R gameserver:gameserver /srv/gameserver


<div class="mw-translate-fuzzy">
'''6. Создать файл сервисного блока systemd"'
'''6. Создать файл сервисного блока systemd"'
</div>


<div class="mw-translate-fuzzy">
Используйте свой любимый инструмент для создания файла сервисной единицы (в этом примере используется nano)
Используйте свой любимый инструмент для создания файла сервисной единицы (в этом примере используется nano)
   nano /usr/lib/systemd/system/vintagestoryserver.service
   nano /usr/lib/systemd/system/vintagestoryserver.service
Line 250: Line 243:
   [Install]
   [Install]
   WantedBy=multi-user.target
   WantedBy=multi-user.target
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Make sure the new user has access to the <code>dotnet</code> command or replace the command with the full path to where you installed the dotnet runtime (if you picked a custom install). Or you can also use <code>ExecStart=VintagestoryServer --dataPath /srv/gameserver/data/vs</code> if you have the <code>DOTNET_ROOT</code> environment variable set.
</div>


<div class="mw-translate-fuzzy">
'''7. Создать конфигурационный файл для rsyslog"'
'''7. Создать конфигурационный файл для rsyslog"'
</div>


<div class="mw-translate-fuzzy">
Используйте свой любимый инструмент для создания конфигурационного файла rsyslog (в этом примере используется nano)
Используйте свой любимый инструмент для создания конфигурационного файла rsyslog (в этом примере используется nano)
   nano /etc/rsyslog.d/vintagestoryserver.conf
   nano /etc/rsyslog.d/vintagestoryserver.conf
Line 282: Line 283:
   systemctl enable vintagestoryserver.service
   systemctl enable vintagestoryserver.service
   systemctl start vintagestoryserver.service
   systemctl start vintagestoryserver.service
</div>


----
----
Line 333: Line 335:
Если вы хотите запустить несколько экземпляров на одной машине, вам просто нужно повторить некоторые из описанных выше шагов. Это всего лишь пример для второго экземпляра:
Если вы хотите запустить несколько экземпляров на одной машине, вам просто нужно повторить некоторые из описанных выше шагов. Это всего лишь пример для второго экземпляра:


   mkdir -p /srv/gameserver/data/vs2
   <div class="mw-translate-fuzzy">
mkdir -p /srv/gameserver/data/vs2
   nano /usr/lib/systemd/system/vintagestoryserver2.service
   nano /usr/lib/systemd/system/vintagestoryserver2.service
Скопируйте из шага 6 и измените эти строки:
Скопируйте из шага 6 и измените эти строки:
Line 353: Line 356:
Введите
Введите
   30 4 * * *      systemctl restart vintagestoryserver2.service
   30 4 * * *      systemctl restart vintagestoryserver2.service
</div>


Приятной игры!
Приятной игры!


<div lang="en" dir="ltr" class="mw-content-ltr">
==Advanced setup==
==Advanced setup==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
===Using an SRV Record to point a domain to your server===
===Using an SRV Record to point a domain to your server===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
In some cases, you may not able to get a server with the default port (Multiple instances on the same server, paid hosts...), and you will have to add the port at the end of the server's address in order to connect to it.<br>
In some cases, you may not able to get a server with the default port (Multiple instances on the same server, paid hosts...), and you will have to add the port at the end of the server's address in order to connect to it.<br>
But you might want to avoid the need to specify the port (Easier to remember, look cleaner).
But you might want to avoid the need to specify the port (Easier to remember, look cleaner).
There is a way to point a domain to your server and avoid the need to add the port : SRV Records<br>
There is a way to point a domain to your server and avoid the need to add the port : SRV Records<br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
SRV Records allow you to point a domain/subdomain to your instance, while letting the game know the port to use.<br>
SRV Records allow you to point a domain/subdomain to your instance, while letting the game know the port to use.<br>
How to set up an SRV Records will depend on your domain provider, and you should check on their documentation before making any changes. However, the idea and values remain the same for every provider.<br>
How to set up an SRV Records will depend on your domain provider, and you should check on their documentation before making any changes. However, the idea and values remain the same for every provider.<br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Let's take a server with the following details :
Let's take a server with the following details :
* Address : <code>play.example.com</code>
* Address : <code>play.example.com</code>
Line 372: Line 385:
* Owned domain : <code>mydomain.com</code>
* Owned domain : <code>mydomain.com</code>
* Desired subdomain : <code>vintagestory.mydomain.com</code>
* Desired subdomain : <code>vintagestory.mydomain.com</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Your raw SRV Records should look something like this :
Your raw SRV Records should look something like this :
   _vintagestory._tcp.vintagestory.mydomain.com.  IN  SRV 10 10 50030 server.example.com.
   _vintagestory._tcp.vintagestory.mydomain.com.  IN  SRV 10 10 50030 server.example.com.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
The underscores and trailing dots are important! Here are some details :
The underscores and trailing dots are important! Here are some details :
* <code>_vintagestory</code> define the service, in our case, Vintage Story<br>
* <code>_vintagestory</code> define the service, in our case, Vintage Story<br>
Line 384: Line 401:
* <code>50030</code> is the port our instance is listening on<br>
* <code>50030</code> is the port our instance is listening on<br>
* <code>server.example.com.</code> is the target, where the server is located. The trailing dot is mandatory as the target server is not on the same domain as us. If it was the case, you would only need to add the subdomain of the target without the trailing dot<br>
* <code>server.example.com.</code> is the target, where the server is located. The trailing dot is mandatory as the target server is not on the same domain as us. If it was the case, you would only need to add the subdomain of the target without the trailing dot<br>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
If you wanted to have your record pointing to your domain directly, you would have <code>mydomain.com.</code> instead of <code>vintagestory.mydomain.com.</code>
If you wanted to have your record pointing to your domain directly, you would have <code>mydomain.com.</code> instead of <code>vintagestory.mydomain.com.</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Here is how to do it for OVH and Hetzner (Don't forget to edit the values to suit your setup !) :
Here is how to do it for OVH and Hetzner (Don't forget to edit the values to suit your setup !) :
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
====OVH====
====OVH====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
You will need to go to your DNS zone and add an entry, select the SRV Record type :
You will need to go to your DNS zone and add an entry, select the SRV Record type :
* Sub-domain : <code>_vintagestory._tcp.vintagestory</code> You don't need to add your domain, as their form do it for you.
* Sub-domain : <code>_vintagestory._tcp.vintagestory</code> You don't need to add your domain, as their form do it for you.
Line 398: Line 423:
* Port : <code>50030</code>
* Port : <code>50030</code>
* Target : <code>server.example.com.</code>
* Target : <code>server.example.com.</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
====Hetzner====
====Hetzner====
You will need to create a record from their DNS Console :
You will need to create a record from their DNS Console :
Line 408: Line 435:
* Port : <code>50030</code>
* Port : <code>50030</code>
* Target : <code>server.example.com.</code>
* Target : <code>server.example.com.</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Wait a few minutes for your record to propagate and then try to use it to connect to the server, using <code>vintagestory.mydomain.com</code> as the address.
Wait a few minutes for your record to propagate and then try to use it to connect to the server, using <code>vintagestory.mydomain.com</code> as the address.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
You are now all set up to share your server with your custom domain.
You are now all set up to share your server with your custom domain.
</div>


{{Game navbox}}
{{Game navbox}}
44,019

edits