From ac88a476fb07a1a6d5164adda1477e2030674fbf Mon Sep 17 00:00:00 2001 From: Voomra Date: Mon, 20 May 2024 23:26:17 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=9F=D1=80=D0=BE=D0=B4=D0=B2=D0=B8?= =?UTF-8?q?=D0=BD=D1=83=D1=82=D1=8B=D0=B9=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=20=D0=B8=D0=B3=D1=80=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/build-for-prod.rst | 2 +- source/index.rst | 3 +- source/prod-advenced.rst | 240 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 243 insertions(+), 2 deletions(-) create mode 100644 source/prod-advenced.rst diff --git a/source/build-for-prod.rst b/source/build-for-prod.rst index d6b5973..10056ec 100644 --- a/source/build-for-prod.rst +++ b/source/build-for-prod.rst @@ -49,7 +49,7 @@ .. code-block:: - apt-get install -y unzip screen wget + apt-get install -y unzip screen wget sudo Установка .NET 8 diff --git a/source/index.rst b/source/index.rst index 42c4a80..92f4c39 100644 --- a/source/index.rst +++ b/source/index.rst @@ -1,5 +1,5 @@ Сборник статей по Space Station 14 -================================== +################################## Данный сборкик инструкций и статей предназначен в первую очередь для хостеров, администраторов и разработчиков русскоговорящего сегмента. @@ -9,3 +9,4 @@ build-and-run build-for-prod + prod-advenced diff --git a/source/prod-advenced.rst b/source/prod-advenced.rst new file mode 100644 index 0000000..6ed1dc3 --- /dev/null +++ b/source/prod-advenced.rst @@ -0,0 +1,240 @@ +Продвинутый запуск игрового сервера +################################### + +В данной инструкции будет рассмотрено: + +- ведение жерналирования игрового сервера в файлы (логи) +- запуск игрового сервера с ограниченными правами в системе +- запуск игрового сервера как отдельного системного сервиса +- использование базы данных **Postgres** в качестве основного хранилища данных + +.. note:: + - Предполагается, что читатель умеет собирать и запускать сервер :doc:`на удалённой системе `; + - Предполагается, что читатель имеет базовые навыки работы с **Linux** системами; + - Предполагается, что читатель умеет подключаться к удалённому серверу через **SSH**; + - Дання инструкция рассчитана на пользователей операционной системы **Windows**; + - В качестве удалённой операционной системы будет использоваться **Debian 12**. + + .. note:: + Предполагаются те же условности, что были приняты в + :doc:`прошлой статье ` + + +Активация логов +*************** + +То как отображаются логи в консоли screen-сессии это не совсем удобно, потому +как screen-сессию нельзя просто так "промотать вверх" для чтения прошлых +записей, а так же сама по себе screen-сессия имеет ограниченный буффер хранения +этих самых "консольных строчек". + +Потому лучшим решением станет активация журналирования игрового сервера в файлы. + +1. Создаём папку для логов + + .. code-block:: + + mkdir /root/ss14/logs + +2. Открываем на редактирование конфигурационный файл игрового сервера + ``server_config.toml`` и в секции ``[log]`` меняем значение поля ``enabled`` + на ``true`` + + .. code-block:: toml + + [log] + path = "logs" + format = "log_%(date)s-%(time)s.txt" + level = 1 + enabled = true + +.. note:: + Перезапустите игровой сервер для применения изменений + + +Запуск с ограниченными правами +****************************** + +Если вы читали :doc:`прошлую статью `, то должны были заметить, +что запуск игрового сервера происходит от имени ``root``, т.е. наивысших +системных прав. **Так делать не безопастно** по многим причинам, рассмотрение +которых выходят за рамки этой статьи. Правильнее всего запускать игровой сервер +с ограниченным набором прав обычного пользователя. + +Новый пользователь +================== + +1. Создаём нового пользователя: + + .. code-block:: + + useradd -m ss14 + + - ``-m`` создаст домашний каталог ``/home/ss14`` + +2. Переносим все файлы игрового сервера в новую папку + + .. warning:: + + Если у вас включён игровой сервер, то **отключите его** перед дальнейшими + действиями + + .. code-block:: + + mkdir /home/ss14/server + mv /root/ss14/* /home/ss14/server + chown ss14:ss14 -R /home/ss14/server + +3. Переносим файлы платформы .NET в новую папку + + .. code-block:: + + mv /root/dotnet /home/ss14 + chown ss14:ss14 -R /home/ss14/dotnet + + +Системный сервис +================ + +.. note:: + Запускать игровой сервер в screen-сессии имеет свои плюсы и минусы. + + | **Плюсы** + | - доступ к игровой консоли + | **Минусы** + | - если игровой сервер "упадёт", сам он не поднимится + + Решением является запуск игрового сервера через системный сервис (systemd). + + | **Плюсы** + | - если игровой сервер "упадёт", система сама его "поднимет" + | **Минусы** + | - утрата доступа к игровой консоли + +В любом удобном редакторе на удалённой системе создаём новый файл +``/etc/systemd/system/ss14.service`` со следующим содержимым + +.. code-block:: + + [Unit] + Description="Space Station 14" + After=syslog.target + After=network.target + + [Service] + Type=simple + User=ss14 + Group=ss14 + WorkingDirectory=/home/ss14/server + Environment=DOTNET_ROOT="/home/ss14/dotnet" + ExecStart=/home/ss14/server/Robust.Server --config-file "/home/ss14/server/server_config.toml" --data-dir "/home/ss14/server/data" + ExecStop=kill -SIGINT $MAINPID + StandardOutput=append:/home/ss14/server/logs/sys-output.log + StandardError=append:/home/ss14/server/logs/sys-error.log + RestartSec=2s + TimeoutStartSec=5 + Restart=always + + [Install] + WantedBy=multi-user.target + +После чего заставляем систему перечитать все имеющиеся у неё конфигурации +сервисов + +.. code-block:: + + systemctl daemon-reload + + +Команды управления сервисом +--------------------------- + +Запуск: + +.. code-block:: + + systemctl start ss14 + +Остановка: + +.. code-block:: + + systemctl stop ss14 + +Перезапуск: + +.. code-block:: + + systemctl restart ss14 + +Статус: + +.. code-block:: + + systemctl status ss14 + + +База данных Postgres +******************** + +Установка и настройка +===================== + +Для установки **Postgres** в **Debian** используется следующая команда: + +.. code-block:: + + apt-get install -y postgresql + +Теперь подключемся к интерактивной postgres-консоли. +Дальнейшие команды будут выполняться там: + +.. code-block:: + + sudo -u postgres psql + +Далее, создаём базу данных для нашего игрового сервера: + +.. code-block:: sql + + CREATE DATABASE ss14; + +Добавляем к новосозданной БД пользователя и указываем ему пароль: + +.. code-block:: sql + + CREATE USER ss14_user WITH encrypted password 'ChangeMePlease'; + +И предоставляем новосозданному пользователю все права на игровую БД: + +.. code-block:: sql + + GRANT ALL PRIVILEGES ON DATABASE ss14 TO ss14_user; + ALTER DATABASE ss14 OWNER TO ss14_user; + + +Выходим из интерактивной postgres-консоли, здесь мы закончили + +.. code-block:: + + \q + +Подключение игрового сервера к БД +================================= + +Открываем на редактирование конфигурационный файл игрового сервера +``server_config.toml`` и добавляем новую секцию + +.. code-block:: toml + + [database] + engine = "postgres" + pg_host = "127.0.0.1" + pg_port = 5432 + pg_database = "ss14" + pg_username = "ss14_user" + pg_password = "ChangeMePlease" + +После запуска сервера, запись в консоли/логе вида +``[DEBG] db.manager: Using Postgres "127.0.0.1:5432/ss14"`` +ознаменует о подключении к БД Postgres. Значит всё настроено правильно.