feat: Продвинутый запуск игрового сервера
This commit is contained in:
@@ -49,7 +49,7 @@
|
||||
|
||||
.. code-block::
|
||||
|
||||
apt-get install -y unzip screen wget
|
||||
apt-get install -y unzip screen wget sudo
|
||||
|
||||
|
||||
Установка .NET 8
|
||||
|
||||
@@ -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
240
source/prod-advenced.rst
Normal 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. Значит всё настроено правильно.
|
||||
Reference in New Issue
Block a user