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