-
Notifications
You must be signed in to change notification settings - Fork 1
NFK server on Linux
Для NFK сервера подойдет VDS на платформе виртуализации KVM с гарантированным выделением CPU ресурсов, в минимальной конфигурации (256 МБ памяти, 1 ядро). На OpenVZ не заработает.
dpkg --add-architecture i386
apt-get update
apt-get install wine32 xorg
dpkg-reconfigure xserver-xorg-legacy
X сервер необходим для запуска NFK
nano /etc/systemd/system/xserver.service
[Unit]
Description=X server
[Service]
User=root
WorkingDirectory=/usr/bin/
ExecStart=/usr/bin/X :0
Restart=on-failure
[Install]
WantedBy=multi-user.target
Запускаем Wine отдельно, т.к. иначе он завершается при остановке одного из NFK серверов (если их запущено много). При запущенном notepad.exe Wine будет запущен постоянно.
nano /etc/systemd/system/wine.service
[Unit]
Description=Wine service
After=xserver.service
[Service]
User=root
Environment=DISPLAY=:0
ExecStart=/usr/bin/wine notepad.exe
Restart=on-failure
[Install]
WantedBy=multi-user.target
Каждый запускаемый NFK сервер установить в разных папках (например, 29995, 29996 и т.д.)
Если процессор многоядерный, то внутри service файла параметром CPUAffinity
можно для каждого NFK сервера задать по одному логическому ядру, которыми будет ограничена нагрузка. Например, при CPUAffinity=0,1
будет использоваться только первое и второе ядро. Аналогично можно повесить сервис Wine на отдельное ядро.
nano /etc/systemd/system/nfk_29995.service
[Unit]
Description=NFK server
After=wine.service
[Service]
User=root
Environment=DISPLAY=:0
WorkingDirectory=/usr/local/nfk/29995/
ExecStart=/usr/bin/wine /usr/local/nfk/29995/SERVER.exe +gowindow +nosound +nfkplanet +game server +exec server +dontsavecfg
Restart=on-failure
[Install]
WantedBy=multi-user.target
Включаем службы
systemctl enable /etc/systemd/system/xserver.service
systemctl enable /etc/systemd/system/wine.service
systemctl enable /etc/systemd/system/nfk_29995.service
systemctl start xserver.service
systemctl start wine.service
systemctl start nfk_29995.service
apt-get install nginx php7.0-fpm
nano /etc/nginx/nginx.conf
...
http {
...
server {
listen 80;
server_name localhost;
# Путь к папке с кодом
root /var/www/;
index index.php;
# Обработка php файлов с помощью fpm
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
}
nano /etc/php/7.0/fpm/pool.d/www.conf
...
listen = /run/php/php7.0-fpm.sock
Перезапустить nginx и php-fpm
nginx -s reload
service php7.0-fpm restart
Для работы сервера необходимо открыть игровой UDP порт сервера + TCP порт основного сервера минус 1000 для загрузки карт.
Например, если игровой порт 29995, то порт для карт будет 28995.
Так же необходимо открыть исходящий порт 10003 для соединения сервера с планетой.
- Скопировать файлы из web/server в отдельную папку веб сервера. Например, чтобы основной скрипт был доступен через http://server/nfkcontrol/api.php
- Переименовать
config.php.example -> config.php
, внутри поменять все параметры:
$ApiKey - любой уникальный
$ServerPath - абсолютный путь к папке, в которой находятся другие папки с NFK сервером
$Servers - перечислить в массиве названия папок NFK серверов по пути $ServerPath.
- Установить права на запуск
chmod 777 script/control.sh
-
apt-get install sudo
и в файле/etc/sudoers
разрешить запуск и остановку NFK сервисов для пользователя, под которым запущен веб-сервер (по-умолчаниюwww-data
):
%www-data ALL=(ALL:ALL) NOPASSWD: /bin/systemctl start nfk_29995.service
%www-data ALL=(ALL:ALL) NOPASSWD: /bin/systemctl stop nfk_29995.service
%www-data ALL=(ALL:ALL) NOPASSWD: /bin/systemctl status nfk_29995.service
- Установить права для записи и чтения для
www-data
на папку с NFK серверами:
chown -R www-data /usr/local/nfk/
Чтобы управление серверами этого хоста появились на клиентской части контроллера, достаточно добавить в config.php на клиенте путь к URL, по которому доступна настроенная серверная часть, вместе с $ApiKey.
Так же установить права на запуск для скриптов
chmod 777 script/*.sh
- Cron В папке script находятся два скрипта, которые можно добавить в crontab на запуск раз в день:
0 6 * * * /var/www/html/nfkcontrol/script/restart.sh
0 6 * * * /var/www/html/nfkcontrol/script/maps_sync.sh
Первый для перезапуска служб NFK, чтобы они более стабильно работали. В нем нужно изменить названия служб для перезапуска.
Второй для синхронизации карт с удаленного сервера. В нем нужно изменить путь к папке с картами.
Чтобы не дублировать карты, для них можно создать отдельную папку ссылаться на неё из папки каждого сервера. Структура папок может быть следующей:
/usr/local/nfk/maps // сюда скачиваются карты
/usr/local/nfk/29991 // первый сервер
/usr/local/nfk/29992 // второй сервер
/usr/local/nfk/29991/SERVER/maps -> /usr/local/nfk/maps // symlink
/usr/local/nfk/29992/SERVER/maps -> /usr/local/nfk/maps // symlink