Archived
1
This repository has been archived on 2025-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
ss14-docs/source/prod-advenced.rst

241 lines
8.2 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Продвинутый запуск игрового сервера
###################################
В данной инструкции будет рассмотрено:
- ведение жерналирования игрового сервера в файлы (логи)
- запуск игрового сервера с ограниченными правами в системе
- запуск игрового сервера как отдельного системного сервиса
- использование базы данных **Postgres** в качестве основного хранилища данных
.. note::
- Предполагается, что читатель умеет собирать и запускать сервер :doc:`на удалённой системе <build-for-prod>`;
- Предполагается, что читатель имеет базовые навыки работы с **Linux** системами;
- Предполагается, что читатель умеет подключаться к удалённому серверу через **SSH**;
- Данная инструкция рассчитана на пользователей операционной системы **Windows**;
- В качестве удалённой операционной системы будет использоваться **Debian 12**.
.. note::
Предполагаются те же условности, что были приняты в
:doc:`прошлой статье <build-for-prod>`
Активация логов
***************
То как отображаются логи в консоли screen-сессии это не совсем удобно, потому
как screen-сессию нельзя просто так "промотать вверх" для чтения прошлых
записей, а так же сама по себе screen-сессия имеет ограниченный буффер хранения
этих самых "консольных строчек".
Потому лучшим решением станет активация журналирования игрового сервера в файлы.
1. Создаём папку для логов
.. code-block:: bash
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:: bash
useradd -m ss14
- ``-m`` создаст домашний каталог ``/home/ss14``
2. Переносим все файлы игрового сервера в новую папку
.. warning::
Если у вас включён игровой сервер, то **отключите его** перед дальнейшими
действиями
.. code-block:: bash
mkdir /home/ss14/server
mv /root/ss14/* /home/ss14/server
chown ss14:ss14 -R /home/ss14/server
3. Переносим файлы платформы .NET в новую папку
.. code-block:: bash
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. Значит всё настроено правильно.