241 lines
8.2 KiB
ReStructuredText
241 lines
8.2 KiB
ReStructuredText
Продвинутый запуск игрового сервера
|
||
###################################
|
||
|
||
В данной инструкции будет рассмотрено:
|
||
|
||
- ведение жерналирования игрового сервера в файлы (логи)
|
||
- запуск игрового сервера с ограниченными правами в системе
|
||
- запуск игрового сервера как отдельного системного сервиса
|
||
- использование базы данных **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. Значит всё настроено правильно.
|