Сборка и запуск удалённого сервера
##################################

Данная инструкция описывает способ сборки **Space Station 14** 
из исходных кодовов ("исходники") для запуска на удалённом сервере.

.. note::
  - Предполагается, что читатель умеет собирать сервер :doc:`из исходников <build-and-run>`;
  - Предполагается, что читатель имеет базовые навыки работы с **Linux** системами;
  - Предполагается, что читатель умеет подключаться к удалённому серверу через **SSH**;
  - Данная инструкция рассчитана на пользователей операционной системы **Windows**;
  - В качестве удалённой операционной системы будет использоваться **Debian 12**.


Подготовка релизной сборки
**************************

1. Открываем **PowerShell** в папке, в которой находятся исходные коды **Space Station 14**.

2. Выполняем команду по подготовке встроенного сборщика

  .. code-block:: bash

    dotnet build Content.Packaging --configuration Release

  .. image:: _static/powershell_build_packaging.png
    :alt: Сборка "сборщика"

3. Выполняем релизную сборку Сервера

  .. code-block:: bash

    dotnet run --project Content.Packaging server --platform linux-x64 --hybrid-acz

  .. image:: _static/powershell_run_packaging.png
    :alt: Запуск сборщика

В результате в папке ``release`` будет лежать два архива, но нас интересует
только один из них - ``SS14_Server_linux-x64.zip``.


Настройка удалённого сервера
****************************

Установка дополнительных пакетов
================================

В консоле удалённого сервера выполняем команду:

.. code-block:: bash

  apt-get install -y unzip screen wget sudo


Установка .NET 8
================

Нам понадобятся скачать следующие платформы:

- .NET Runtime 8
- ASP.NET Core Runtime 8

Скачиваем по следующему алгоритму:

1. Заходим на страницу |link_dotnet|

2. Выбираем версию для Linux x64

3. На странице загрузки копируем прямую ссылку (Direct link)

  .. image:: _static/dotnet_directlink.png
    :alt: Страница загрузки .NET 8

4. В консоли удалённого сервера выполняем команду загрузки
  
  .. code-block:: bash

    cd /root/
    wget 'вставить-сюда-прямую-ссылку'

Так повторяем для каждой платформы.

По завершению процедуры, на удалённом сервере в папке ``/root`` должно быть два
архива:

- ``dotnet-runtime-8.0.5-linux-x64.tar.gz``
- ``aspnetcore-runtime-8.0.5-linux-x64.tar.gz``

Распаковываем их в папку ``/root/dotnet``:

.. code-block:: bash

  mkdir /root/dotnet
  cd /root
  tar -xf dotnet-runtime-8.0.5-linux-x64.tar.gz -C /root/dotnet
  tar -xf aspnetcore-runtime-8.0.5-linux-x64.tar.gz -C /root/dotnet


Запуск сборки
*************

Каким способом вы загрузите архив ``SS14_Server_linux-x64.zip`` на ваш удалённый
Linux сервер - не важно. Главное, что бы архив оказался там и с ним можно было
работать.

.. note::

  Далее предполагается, что архив на удалённом сервере доступен по пути
  ``/root/SS14_Server_linux-x64.zip``

Подключаемся по **SSH** к удалённому серверу и распаковываем архив в папку
``/root/ss14``:

.. code-block:: bash

  mkdir /root/ss14
  unzip /root/SS14_Server_linux-x64.zip -d /root/ss14/

Теперь запускаем ``screen``, чтобы при закрытии ssh-соединения, игровой сервер
продолжал работать:

.. code-block:: bash

  screen -S ss14

Внутри screen-сессии переходим в папку ``/root/ss14`` и запускаем игровой сервер

.. code-block:: bash

  cd /root/ss14
  mkdir data
  export DOTNET_ROOT=/root/dotnet
  export PATH=${PATH}:$DOTNET_ROOT
  chmod +x ./Robust.Server
  ./Robust.Server --config-file "./server_config.toml" --data-dir "./data"

Как только консоль игрового сервера напишет текст вида ``[INFO] root: Server Version 222.4.0.0 -> Ready``
значит игровой сервер успешно запущен. К нему можно подключаться напрямую по IP
адресу.

.. image:: _static/ss14_server_run.png
  :alt: Запуск игрового сервера

.. note::

  - Отключиться от screen-сессии не закрывая её можно сочетанием клавиш :kbd:`CTRL+A`, :kbd:`D`
  - Для повторного подключения к screen-сессии, выполните команду

    .. code-block:: bash

      screen -r

.. ########################################################################## ..

.. |link_dotnet| raw:: html

  <a href="https://dotnet.microsoft.com/en-us/download/dotnet/8.0" target="_blank">загрузки данных платформ</a>
