Archived
1

feat: Продвинутый запуск игрового сервера

This commit is contained in:
2024-05-20 23:26:17 +03:00
parent 0e142120bd
commit ac88a476fb
3 changed files with 243 additions and 2 deletions

View File

@@ -49,7 +49,7 @@
.. code-block::
apt-get install -y unzip screen wget
apt-get install -y unzip screen wget sudo
Установка .NET 8

View File

@@ -1,5 +1,5 @@
Сборник статей по Space Station 14
==================================
##################################
Данный сборкик инструкций и статей предназначен в первую очередь для хостеров,
администраторов и разработчиков русскоговорящего сегмента.
@@ -9,3 +9,4 @@
build-and-run
build-for-prod
prod-advenced

240
source/prod-advenced.rst Normal file
View File

@@ -0,0 +1,240 @@
Продвинутый запуск игрового сервера
###################################
В данной инструкции будет рассмотрено:
- ведение жерналирования игрового сервера в файлы (логи)
- запуск игрового сервера с ограниченными правами в системе
- запуск игрового сервера как отдельного системного сервиса
- использование базы данных **Postgres** в качестве основного хранилища данных
.. note::
- Предполагается, что читатель умеет собирать и запускать сервер :doc:`на удалённой системе <build-for-prod>`;
- Предполагается, что читатель имеет базовые навыки работы с **Linux** системами;
- Предполагается, что читатель умеет подключаться к удалённому серверу через **SSH**;
- Дання инструкция рассчитана на пользователей операционной системы **Windows**;
- В качестве удалённой операционной системы будет использоваться **Debian 12**.
.. note::
Предполагаются те же условности, что были приняты в
:doc:`прошлой статье <build-for-prod>`
Активация логов
***************
То как отображаются логи в консоли 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:`прошлую статью <build-for-prod>`, то должны были заметить,
что запуск игрового сервера происходит от имени ``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. Значит всё настроено правильно.