Сборки серверов

СливПлатные

Сейчас онлайн

  • n0rlingg133
  • deezzee777
  • caneda33
  • haker_one
  • DenchikRox
  • GidexPlay
  • triumf
  • yacoxe
  • DeDus0n
  • Patrik2315
  • Arikuse
  • cervertop
  • blogerdanc
  • rereyt111
  • FUZZYYT
  • qeqbwd
  • 2312
  • k1aSoTKA
  • pro_god_pro
  • wermi
  • nirkisss
  • Pando1ra
  • Gurz884
  • Danulokruz
  • ZakiodYT
  • Wamblee
  • asgfwergwerdfhb
  • f0ner
  • Joey342
  • fefsa2
  • WhiteTiger!
  • algari436
  • pensioner
  • hhccjjhgg
  • zyyrtex
  • soviet_banan
  • Fgla_Cripson
  • Rudenis
  • MiyukiSaki
  • qwe111nt
  • vancorl
  • Oscar
  • miminttto
  • LittleRock
  • TRDAntonooRU
  • ejyqyl
  • kantanick01
  • TakumiHiji
  • justpremadeaccount
  • Apeki
  • AbuzzWorld
  • AsteryKnight
  • tenshae1337
  • makseyni
  • MrZuno
  • mixate
  • AMertish
  • NikiZub
  • DAFSSS11
  • SusBruh

Инструкция [ГАЙД] Ультимативная CLI-система администрирования, мониторинга и разделения мощностей VDS без веб-панелей

Приветствую! Большинство создателей серверов совершают одну и ту же ошибку — арендуют базовые игровые хостинги с тяжелыми веб-панелями (Pterodactyl, Multicraft) и пихают всё в один серверный процесс. Панели расходуют драгоценную оперативную память и процессорное время, которые могли бы пойти на просчет игровых тиков (TPS).
Сегодня мы разберем, как построить профессиональную игровую инфраструктуру на чистом Linux (Debian/Ubuntu). Мы создадим кастомную систему администрирования и мониторинга через консоль, настроим изоляцию мощностей процессора и автоматизируем перезапуски. Гайд полностью ориентирован на практику — весь код снабжен комментариями и готов к копипасту.

1. Настройка среды и безопасность (Debian/Ubuntu)​

Постоянная работа под учетной записью root — главный грех начинающих администраторов. Одно неверное движение или уязвимость в плагине могут полностью уничтожить систему. Мы будем работать через изолированного пользователя с правами sudo и настроим вход по криптографическим ключам, полностью заблокировав брутфорс паролей.
Поскольку этот процесс стандартный, мы не будем раздувать гайд рутиной. Если вы не знаете, как сгенерировать ключи или правильно добавить пользователя, используйте эти официальные и максимально подробные пошаговые мануалы:
  1. 🔗 Добавление пользователей и настройка sudo на Linux — Timeweb Cloud
  2. 🔗 Авторизация на сервере по SSH-ключу — Timeweb Cloud
Как только вы перенесли свой ключ на сервер, откройте главный конфиг SSH:

Код:
 sudo nano /etc/ssh/sshd_config

Найдите и выставьте следующие параметры для защиты от взлома:
Plaintext

PermitRootLogin no # Запрещает вход под root напрямую
PubkeyAuthentication yes # Разрешает вход строго по SSH-ключам
PasswordAuthentication no # Полностью отключает текстовые пароли в системе

После этого перезапустите службу SSH:

Код:
sudo systemctl restart sshd

Теперь ваша машина превратилась в неприступную крепость, и можно переходить к развертыванию игровых узлов.

2. Архитектура и разделение мощностей на реальном примере​

В качестве примера мы возьмем стандартную серверную конфигурацию, которая часто покупается под проекты средней руки:
  • Процессор: AMD Ryzen 9 7950X3D (8 виртуальных ядер/потоков до 5.7 GHz)
  • Оперативная память: 24 ГБ DDR5 ECC
  • Диск: 250 ГБ NVMe SSD

Структура сети​

Все серверы хранятся и работают внутри домашней папки нашего безопасного пользователя: /home/minecraft/. Мы делим проект на три независимых узла:
  1. proxy (Velocity/BungeeCord): Точка входа для игроков, защита от ботов.
  2. lobby (Paper/Purpur): Сервер авторизации, спавн и выбор режимов.
  3. game (Folia/Paper/Любое другое ядро): Наш основной игровой режим.
Чтобы тяжелый игровой процесс при пиковых нагрузках (взрывы ТНТ, прогрузка чанков) не вызывал лаги на прокси-сервере и не отключал игроков от сети, мы жестко закрепим за каждым процессором свои ядра через утилиту taskset.

Математика распределения ресурсов:​

КомпонентВыделенная память (ОЗУ)Назначенные ядра CPU (taskset)Роль в системе
Система и БД4 ГБЯдро 7Работа ОС, логи, база данных.
Proxy (Velocity)2 ГБЯдро 1Сетевые пакеты изолированы на первом ядре для минимального пинга.
Lobby (Спавн)4 ГБЯдра 1–2Сервер авторизации и хаб.
Game (Основной)14 ГБЯдра 3–64 выделенных ядра полностью отдаются под игровой процесс.

3. Скрипты автоматизации: Безопасные рестарты​

Когда плагины авторестарта (например, UltimateAutoRestart или аналоги) отправляют в консоль команду /stop, процесс Java полностью завершается. Если запускать сервер обычным способом, фоновая сессия screen просто закроется, и сервер останется лежать.
Мы настроим цикл автоматического поднятия с системой Lock-файла, чтобы сервер понимал, когда его перезагружает плагин (нужно подняться), а когда его выключает админ через команду (нужно лечь).

Циклический скрипт запуска run.sh​

Создается в папке каждого сервера (например, /home/minecraft/game/run.sh):
Код:
#!/bin/bash

# Удаляем старый файл блокировки при старте
rm -f stop.lock

while true; do
echo "Запуск игрового процесса на выделенных ядрах..."
    
# Привязываем процесс к ядрам 3,4,5,6 и выделяем 14 ГБ памяти
    taskset -c 3-6 java -Xms14336M -Xmx14336M -Duser.timezone=Europe/Moscow -jar server.jar nogui
    
# После выключения Java проверяем, не админ ли нажал "Выключить"
if [ -f "stop.lock" ]; then
echo "Обнаружен stop.lock! Сервер остановлен администратором. Выходим из цикла."
        rm -f stop.lock
break
fi
    
echo "Сервер завершил работу или упал. Перезапуск через 5 секунд... Нажми Ctrl+C для отмены."
    sleep 5
done

Мастер-крипт старта start.sh​

Кладем в ту же папку (/home/minecraft/game/start.sh). Он запускает наш цикл внутри изолированного фонового терминала Linux Screen:
Код:
#!/bin/bash
SESSION_NAME="game"

echo "Запускаем фоновую сессию $SESSION_NAME..."
screen -dmS $SESSION_NAME bash ./run.sh
echo "$SESSION_NAME успешно запущен!"
Не забудьте выдать обоим скриптам права на исполнение командой:

Код:
 chmod +x *.sh

4. Кастомная система администрирования и мониторинга​

Чтобы не прыгать по папкам и не вводить огромные цепочки команд, мы напишем глобальный системный CLI-инструмент. Он позволит управлять всей сетью серверов одной короткой командой mc из любой точки терминала, а также будет выполнять роль панели мониторинга статуса.
Создаем файл в системной директории Linux (для этого потребуются права sudo):

Код:
sudo nano /usr/local/bin/mc

Вставляем в него следующий готовый скрипт:

Код:
#!/bin/bash

BASE_DIR="/home/minecraft"
# Список ваших серверов (названия папок и сессий screen должны совпадать)
SERVERS=("proxy" "lobby" "game")

status_monitoring() {
echo -e "\e[36m====================================================\e[0m"
echo -e "         \e[1mСИСТЕМА МОНИТОРИНГА И СТАТУСА СЕТИ\e[0m"
echo -e "\e[36m====================================================\e[0m"
printf "%-15s | %-10s | %-8s | %-10s\n" "СЕРВЕР" "СТАТУС" "PID" "CPU/MEM"
echo "----------------------------------------------------"
    
for srv in "${SERVERS[@]}"; do
if screen -list | grep -q "\.$srv"; then
# Получаем PID активного скрина
local pid=$(screen -list | grep "\.$srv" | awk '{print $1}' | cut -d. -f1)
# Измеряем потребление ресурсов процессом Java внутри скрина
local java_pid=$(pgrep -P $pid java)
            
if [ -z "$java_pid" ]; then
# Если java еще заводится, берем PID самого скрина
java_pid=$pid
fi
            
local stats=$(ps -p $java_pid -o %cpu,%mem --no-headers 2>/dev/null)
            
if [ -z "$stats" ]; then
printf "%-15s | \e[32m%-10s\e[0m | %-8s | %-10s\n" "$srv" "ONLINE" "$pid" "Загрузка..."
else
local cpu=$(echo $stats | awk '{print $1}')
local mem=$(echo $stats | awk '{print $2}')
printf "%-15s | \e[32m%-10s\e[0m | %-8s | %-10s\n" "$srv" "ONLINE" "$pid" "${cpu}% / ${mem}%"
fi
else
printf "%-15s | \e[31m%-10s\e[0m | %-8s | %-10s\n" "$srv" "OFFLINE" "-" "-"
fi
done
echo -e "\e[36m====================================================\e[0m"
}

stop_server() {
local srv=$1
if screen -list | grep -q "\.$srv"; then
echo "Останавливаем сервер $srv..."
# Создаем lock-файл, чтобы цикл run.sh не поднял сервер обратно
touch "$BASE_DIR/$srv/stop.lock"
        
# Отправляем команду стопа в консоль нужного скрина
if [ "$srv" == "proxy" ]; then
screen -S $srv -p 0 -X stuff $'end\r'
else
screen -S $srv -p 0 -X stuff $'stop\r'
fi
        
# Мониторинг безопасного закрытия (таймаут 30 секунд)
 local count=0
while screen -list | grep -q "\.$srv"; do
            sleep 1
            ((count++))
if [ $count -ge 30 ]; then
echo "Сервер завис при сохранении. Принудительное завершение!"
screen -S $srv -X quit
break
fi
done
echo "Сервер $srv успешно остановлен."
else
echo "Сервер $srv уже выключен."
fi
}

start_server() {
local srv=$1
if screen -list | grep -q "\.$srv"; then
echo "Сервер $srv уже работает!"
else
echo "Запуск сервера $srv..."
cd "$BASE_DIR/$srv" && ./start.sh
fi
}

case "$1" in
    start)
start_server $2
        ;;
    stop)
stop_server $2
        ;;
    restart)
stop_server $2
        sleep 2
start_server $2
        ;;
    console)
if screen -list | grep -q "\.$2"; then
screen -r $2
else
echo "Сервер $2 не запущен, консоль недоступна."
fi
        ;;
    status)
        status_monitoring
        ;;
    *)
echo -e "\e[33mИспользование:\e[0m mc [start|stop|restart|console] [имя_сервера] ИЛИ mc status"
echo "Примеры:"
echo "  mc status           - Посмотреть общую панель мониторинга"
echo "  mc console game     - Войти в консоль игрового сервера"
echo "  mc stop lobby       - Выключить лобби"
        ;;
esac
Даем скрипту глобальные права на исполнение в Linux:

Код:
sudo chmod +x /usr/local/bin/mc

5. Как теперь выглядит администрирование проекта?​

Вы заходите на сервер по SSH-ключу под вашим безопасным пользователем minecraft и управляете всей сетью в одну команду:
  1. mc status — Выводит красивый визуальный Dashboard. Вы сразу видите в реальном времени, какие подсерверы работают, их PID в Linux и сколько процентов CPU и памяти они потребляют прямо сейчас.
  2. mc console game — Мгновенно открывает живую консоль нужного сервера. Вы можете писать туда команды, выдавать права или смотреть логи. (Чтобы выйти из консоли и оставить её работать в фоне, нажмите сочетание клавиш: Ctrl+A, затем отпустите и нажмите D).
  3. mc stop game — Скрипт сам создаст lock-файл безопасности, отправит команду /stop, дождется, пока ядро полностью сохранит все чанки, регионы и базы данных, после чего корректно закроет сессию. Сервер не подниется сам, пока вы не введете команду старта.
  4. mc restart proxy — Быстрая перезагрузка прокси без риска того, что сессия screen "умрет" или зациклится.
Такой подход экономит до 20-30% ресурсов вашей VDS по сравнению с тяжелыми докер-контейнерами панелей управления, гарантируя вашему игровому серверу максимальную плавность и железобетонный, стабильный TPS при любом онлайне!

Готов обсудить гайд с вами в комментариях
 
ВерхНиз