SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-08-07

Як розгорнути Minecraft-сервер на VPS

Покрокове розгортання Paper на Ubuntu 24.04: обсяг RAM, Java 21, systemd, два брандмауери для 25565, безпечні копії світу та точні помилки.

Що ви створюєте

Стабільний сервер Minecraft Java Edition: Paper на Ubuntu 24.04, запущений від імені окремого користувача minecraft через systemd за допомогою Restart=on-failure, із увімкненим whitelist і відкритим портом 25565 в обох брандмауерах між вашими гравцями та JVM. Резервні копії створюються так, щоб не пошкодити світ, який вони мають захищати. Сам сервер — це один jar-файл і одна команда java. Усе, що відрізняє сервер, на якому ваші друзі грають протягом року, від сервера, що припиняє роботу в перші вихідні, стосується цієї команди. Саме це описано в посібнику.

Перш ніж витрачати гроші, врахуйте два важливі попередження. По-перше, Minecraft потребує багато пам’яті й переважно використовує одне ядро процесора: VPS із 1 GB не забезпечить придатну для гри роботу сервера, а одне швидке ядро краще за чотири повільні. По-друге, це Java Edition. Гравці з Bedrock, консолей, телефонів і застосунку Windows Bedrock не можуть підключитися до Java-сервера. Для Bedrock потрібне інше серверне програмне забезпечення, яке використовує UDP 19132, або плагін Geyser. Це виходить за межі цього посібника.

Вам потрібен чистий KVM VPS з Ubuntu 24.04 і доступом root або sudo, а також приблизно тридцять хвилин.

Розмір сервера: які ресурси насправді потрібні для сервера друзів

Оперативна пам’ять має найбільше значення, а реальні показники нижчі, ніж радять на форумах модпаків:

  • 2 GB достатньо для vanilla на 2–5 гравців за помірної дальності промальовування. Грати можна, але запасу ресурсів немає.
  • 4 GB — комфортний обсяг для сервера друзів: приблизно десять одночасних гравців на Paper із кількома плагінами та достатнім залишком для ОС.
  • 8 GB і більше — для модпаків і понад 20 гравців. У такому разі також важлива швидкість одного ядра CPU, оскільки основний цикл гри виконується в одному потоці.

Світ також займає дедалі більше місця на диску в міру дослідження гравцями. Добре досліджений survival-світ може займати кілька гігабайтів, тому залиште запас для самого світу та його резервних копій.

Vanilla чи Paper? Paper — це сумісна заміна офіційного jar-файлу: ті самі світи, ті самі клієнти, модифікації на стороні клієнта не потрібні. Він оптимізує найповільніші ділянки сервера: завантаження чанків, обробку сутностей і hopper-и, а також додає API для плагінів. Єдина причина використовувати vanilla — потреба в побітово точній механіці vanilla для технічних ферм на redstone, на роботу яких можуть впливати оптимізації Paper. Для всіх інших Paper забезпечує більшу кількість гравців на кожен гігабайт. Усе нижче працює для обох варіантів.

Крок 1: установіть Java 21

Minecraft 1.20.5 і всі наступні випуски, зокрема всі версії 1.21.x, потребують Java 21. Ubuntu 24.04 містить її в стандартних репозиторіях, а headless-версія не встановлює бібліотеки робочого столу, які сервер не використовує:

sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -version

Правильний результат: у першому рядку вказано openjdk version "21.0.x". Якщо там зазначено 17 або 11, інша JRE встановлена та має вищий пріоритет. Виправте це за допомогою sudo update-alternatives --config java і виберіть запис, що містить java-21.

Якщо пропустити цю перевірку, згодом виникне найчастіша помилка Minecraft-сервера, яку шукають у Google. З Java 17 server jar завершує роботу одразу з такою помилкою:

Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
	java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been
	compiled by a more recent version of the Java Runtime (class file version 65.0),
	this version of the Java Runtime only recognizes class file versions up to 61.0

Числа показують невідповідність версій: версія class file 65.0 відповідає Java 21, 61.0 — Java 17, а 60.0 — Java 16. Незалежно від того, яку пару ви бачите, виправлення однакове: встановіть новішу JRE і повторно виконайте update-alternatives.

Крок 2: окремий користувач, ніколи не root

Сервер виконує код плагінів і обробляє мережеві дані від кожного, хто може підключитися до порту. Якщо щось піде не так, зловмисник, який отримав доступ із правами root, контролюватиме весь VPS; зловмисник із правами minecraft контролюватиме ігровий світ.

sudo adduser --system --group --home /opt/minecraft minecraft

--system створює обліковий запис без пароля, якому заборонено входити через SSH, а /opt/minecraft використовує як домашній і робочий каталог. Відтепер кожна команда, що взаємодіє із сервером, виконується від імені цього користувача.

Крок 3: завантажте server jar з офіційного джерела

Server jar має надходити лише з двох джерел: з офіційної сторінки завантаження сервера на minecraft.net для vanilla або зі сторінки завантажень на papermc.io для Paper. Сторонні «download hubs», які перепаковують server jar, уже багато років використовують як канал поширення шкідливого програмного забезпечення. Server jar містить довільний код, який ви збираєтеся безперервно запускати на сервері, доступному з Інтернету.

Скопіюйте посилання на завантаження поточної збірки з офіційної сторінки. URL змінюється з кожною версією та збіркою, тому жорстко закодоване посилання тут швидко застаріло б. Потім:

cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'

Очікуваний результат: server.jar обсягом приблизно 50 MB, власник — minecraft; це підтверджено за допомогою ls -lh /opt/minecraft/server.jar.

Крок 4: перший запуск, EULA і надання собі прав оператора

Перед налаштуванням systemd один раз запустіть сервер в інтерактивному режимі. Перший запуск має лише два завдання, для яких потрібна активна консоль.

cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar nogui

Сервер завершить роботу за кілька секунд. Paper спочатку витратить ще кілька секунд на застосування своїх патчів. У журналі з’явиться рядок, з яким стикаються всі:

[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

Це не помилка, а перевірка ліцензії. Під час запуску поруч із jar-файлом було створено eula.txt. Якщо ви ще не ознайомилися з EULA за посиланням, зробіть це, а потім змініть значення прапорця:

sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txt

Знову виконайте ту саму команду java. Цього разу сервер створить світ. Під час першого запуску це може тривати одну-дві хвилини. Після цього він перейде в такий стан:

[Server thread/INFO]: Done (9.204s)! For help, type "help"

Тепер ви маєте активну консоль. Використайте її для другого завдання: введіть op YourMinecraftName, указавши своє точне ігрове ім’я. Сервер додасть вас до ops.json. Після цього, коли консоль не буде підключена, ви зможете виконувати всі адміністративні команди безпосередньо в грі. Потім введіть stop, щоб зберегти дані та коректно завершити роботу.

Крок 5: server.properties і чому online-mode залишається true

Під час першого запуску також було створено server.properties. Більшість значень за замовчуванням підходить. Саме ці параметри варто вибрати свідомо:

online-mode=true
white-list=true
enforce-whitelist=true
view-distance=8
max-players=10
motd=A private server for people I actually know

online-mode=true змушує сервер перевіряти кожне ім’я користувача, який підключається, через сервери сесій Mojang. Так сервер підтверджує, що гравець володіє обліковим записом. Значення false — перемикач «cracked server» — означає, що сервер приймає заявлену клієнтом особу без перевірки. Будь-хто може підключитися під будь-яким ім’ям, зокрема під вашим. Оскільки права оператора й whitelist прив’язані до імені, зловмисник отримає ваші права оператора. Єдина коректна причина встановити це значення в false — використання автентифікаційного проксі, наприклад Velocity, який сам перевіряє гравців. На звичайному сервері це значення завжди має залишатися true.

view-distance — найважливіший параметр продуктивності в цьому файлі. Витрати CPU і RAM приблизно пропорційні його квадрату. Значення 8 є розумним значенням за замовчуванням для VPS. Значення 10 використовується у vanilla за замовчуванням і створює помітно більше навантаження.

white-list=true разом із enforce-whitelist=true закриває сервер для сторонніх гравців. У розділі про безпеку нижче пояснюється, чому це обов’язково. Додавайте гравців за допомогою /whitelist add TheirName у грі, маючи права оператора.

Крок 6: параметри пам’яті, чому -Xms і -Xmx мають збігатися

JVM виділяє heap у межах від -Xms (початковий розмір) до -Xmx (максимальний розмір). На виділеному game server встановіть однакове значення: heap у будь-якому разі досягне максимального розміру, а його поетапне збільшення лише створює додаткові паузи через роботу garbage collector під час гри. На VPS із 4 GB правильна пара має такий вигляд:

/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui

-Xmx — це не загальний обсяг пам’яті, який використовує процес. JVM додатково використовує off-heap пам’ять, стеки потоків, JIT-кеші та direct buffers — приблизно пів гігабайта або більше. Ubuntu також потрібна вільна пам’ять. Практичне правило: -Xmx має становити не більше ніж обсяг RAM VPS мінус 1 GB. Якщо перевищити цей ліміт, виникне одна з двох проблем. Якщо виділення пам’яті не вдасться одразу, server відмовиться запускатися з повідомленням:

Error: Could not reserve enough space for object heap

Ця помилка одразу вказує на причину. Гірший варіант: server запускається, але через кілька годин завершує роботу, коли під навантаженням heap заповнюється, а kernel OOM killer вибирає найбільший процес на сервері — JVM. У журналі server нічого не з’явиться. Доказ буде в sudo dmesg | grep -i oom, у рядку на кшталт Out of memory: Killed process 1234 (java). Якщо service перезапускається «випадково», спочатку перевірте цей файл і зменште -Xmx.

Для Paper у документації проєкту описані параметри Aikar — оптимізований набір параметрів G1GC (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 та ще близько десятка параметрів), який зменшує тривалість пауз garbage collector на більших heap. Сформуйте повний рядок за документацією Paper. Для heap обсягом 2–4 GB перевага невелика, але ці параметри безпечні.

Крок 7: unit systemd із Restart=on-failure

Сервер, запущений вручну, завершує роботу разом із вашим сеансом SSH і не запускається після перезавантаження. Створіть /etc/systemd/system/minecraft.service:

[Unit]
Description=Minecraft server (Paper)
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -f

Очікуваний результат: status показує active (running), а журнал, у якому тепер зберігається вивід консолі сервера, знову завершується рядком Done.

У цьому unit є два свідомі рішення. Restart=on-failure запускає сервер знову після аварійного завершення, але не після штатного stop, тому технічне обслуговування залишається можливим. Також важливий TimeoutStopSec=120, хоча це не завжди очевидно: systemctl stop надсилає SIGTERM, сервер Minecraft перехоплює цей сигнал і зберігає кожен світ перед завершенням роботи, а для великого світу це збереження потребує часу. Стандартний тайм-аут systemd може надіслати SIGKILL JVM під час збереження, через що пошкоджуються файли регіонів. Встановіть тайм-аут у дві хвилини.

Якщо сервіс циклічно перезапускається, а в журналі відображається:

[Server thread/WARN]: **** FAILED TO BIND TO PORT!
[Server thread/WARN]: The exception was: io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use
[Server thread/WARN]: Perhaps a server is already running on that port?

це означає, що порт 25565 уже зайнятий. Майже завжди його все ще використовує попередній процес, запущений у foreground, в іншому сеансі SSH. Знайдіть його за допомогою sudo ss -tlnp | grep 25565 і зупиніть цей процес. Ніколи не запускайте два сервери на одному порту.

Крок 8: відкрийте порт 25565 в обох брандмауерах

Minecraft Java використовує лише TCP 25565 (UDP потрібен тільки для додаткового query-протоколу, який типово вимкнений). На VPS:

sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enable

Це перший брандмауер. Більшість провайдерів VPS мають також другий брандмауер на рівні мережі в панелі керування, про який часто забувають. Відкрийте там TCP 25565. Якщо відкрито лише один із двох брандмауерів, симптоми неінформативні: клієнт зависає на повідомленні "Connecting to the server..." і завершує підключення з Connection timed out: no further information. Відмови в підключенні немає, помилки сервера немає, у журналі нічого немає, оскільки пакети не надійшли. Перевірте з комп’ютера за межами VPS за допомогою nc -vz your.server.ip 25565. Результат succeeded означає, що обидва брандмауери відкриті. Зависання означає, що принаймні один із них не налаштований.

Поки ви працюєте з ufw, врахуйте, що на цьому самому сервері SSH працює через публічну IP-адресу, і протягом кількох годин у журналі з’явиться багато повідомлень про спроби підбору паролів. Перш ніж ви забудете, налаштуйте Fail2ban для SSH на Ubuntu 24.04.

Тепер підключіться: Multiplayer, Direct Connection, IP-адреса сервера. Оскільки на кроці 4 ви надали собі права оператора, внутрішньоігрові команди працюють одразу: /whitelist add FriendName для кожного гравця, /gamemode creative, якщо це передбачено планом.

Крок 9: whitelist, оскільки інтернет знаходить порт 25565

Залишати Minecraft-сервер відкритим в інтернеті — не теоретичний ризик: масові сканери безперервно перевіряють увесь простір IPv4 на наявність порту 25565, аматорські проєкти для griefing у такий спосіб виявили сотні тисяч відкритих серверів, а на сервер без whitelist непрохані відвідувачі приходять протягом кількох днів, а іноді й годин. Виправленням є whitelist із кроку 5: online-mode=true підтверджує особу, а whitelist обмежує доступ особами, яких ви вибрали. Ці два механізми становлять усю модель безпеки, і для сервера друзів цього достатньо.

Для доступу до консолі без запуску гри, скриптового резервного копіювання та cron job увімкніть RCON у server.properties (enable-rcon=true, надійний rcon.password, порт 25575) і зберіть невеликий клієнт mcrcon із його джерел на GitHub безпосередньо на VPS; у репозиторіях Ubuntu його немає. Не відкривайте 25575 у жодному firewall: RCON передає пароль у незашифрованому вигляді, тому він має бути доступний лише через loopback.

Крок 10: резервні копії, які не пошкоджують світ

Єдине правило: ніколи не копіюйте каталог світу, поки сервер записує до нього дані. Файли регіонів постійно перезаписуються під час гри; tar, яка виконується одночасно із записом, створює архів із частково записаними чанками. Під час відновлення, коли резервна копія має спрацювати, журнал заповнюється помилками завантаження чанків, а в ландшафті з’являються прогалини. Цього можна уникнути двома способами.

Stop-copy-start — простий варіант, але він потребує хвилини простою:

sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
  -C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraft

(Paper розподіляє виміри між world, world_nether і world_the_end; vanilla server зберігає все в world, тому вкажіть там решту два каталоги.)

Save-off дає змогу створювати резервну копію під час роботи сервера: через RCON виконайте save-off (зупиніть автоматичне збереження), потім save-all flush (примусово запишіть усі дані на диск і дочекайтеся завершення), створіть tar-архів, а потім виконайте save-on. Саме цей варіант слід додати до cron на 5 a.m.

У будь-якому разі резервна копія, що зберігається на тому самому VPS, що й сервер, не є резервною копією. scp або rclone архіви на інший хост і зберігайте більше однієї копії. Оскільки під час збою ви не стежитимете за консоллю, налаштуйте зовнішню перевірку порту: Uptime Kuma на іншому хості має виконувати TCP-перевірку порту 25565. Так ви дізнаєтеся про недоступність сервера раніше за гравців.

Плагіни та оновлення

У Paper плагін — це JAR-файл, який потрібно скопіювати до /opt/minecraft/plugins/, після чого перезапустити сервер. На цьому встановлення завершено. Завантажуйте плагіни лише з офіційних сторінок відповідних проєктів (Hangar, Modrinth, SpigotMC). Причина та сама, що й для JAR-файлу сервера: кожен плагін є довільним кодом, який виконується від імені користувача minecraft.

Оновлення сервера складається з таких кроків: зупиніть сервер, створіть резервну копію, замініть server.jar збіркою для нової версії Minecraft і запустіть сервер. Врахуйте два моменти. Оновлення світу є незворотним: світ, відкритий новішою версією, не відкриється у старішій. Саме для цього потрібні резервні копії. Крім того, плагіни часто підтримують новий випуск Minecraft із затримкою на кілька днів або тижнів. Тому перед оновленням у день виходу перевірте сумісність.

Якщо ви хочете керувати всім цим у контейнері, зокрема фіксацією версії, прийняттям EULA та параметрами пам’яті через змінні середовища, поширений образ itzg/minecraft-server запускає той самий сервер Paper через Docker Compose на вашому VPS із такими самими правилами для firewall і резервного копіювання.

FAQ

Скільки RAM потрібно серверу Minecraft?

2 GB достатньо для vanilla на 2–5 гравців; 4 GB буде достатньо для сервера друзів приблизно на десять гравців на Paper із кількома плагінами; модпаки та понад 20 гравців потребують 8 GB або більше. Незалежно від розміру VPS, встановлюйте -Xmx не більше ніж на загальний обсяг RAM мінус 1 GB, оскільки JVM використовує пам’ять поза heap, а завелике значення призводить до Error: Could not reserve enough space for object heap або непомітного завершення процесу через OOM.

Чому друзі не можуть підключитися до мого сервера Minecraft?

Зависання клієнта, яке завершується Connection timed out: no further information, майже завжди означає проблему з firewall. Тут їх два: ufw на VPS і мережевий firewall вашого провайдера в панелі керування. TCP 25565 має бути відкритий в обох. Перевірте на сервері за допомогою sudo ss -tlnp | grep 25565, чи справді він прослуховує порт, а потім протестуйте підключення ззовні через nc -vz your.server.ip 25565.

Чи потрібно встановлювати online-mode=false у server.properties?

Ні. У режимі online-mode=false сервер повністю пропускає автентифікацію Mojang. Тому будь-хто може приєднатися під будь-яким ім’ям користувача, зокрема під іменем op, і отримати його дозволи. Скіни та стабільні UUID також перестають працювати належним чином. Єдиний коректний варіант використання — за автентифікаційним проксі на кшталт Velocity, який самостійно перевіряє гравців. Для звичайного сервера має залишатися true.

Чи Paper кращий за vanilla-сервер Minecraft?

Майже для всіх — так. Paper — це jar, який можна безпосередньо замінити. Він завантажує vanilla-світи, приймає незмінених клієнтів, значно ефективніше обробляє сутності й завантажує чанки, а також додає екосистему плагінів. Виняток — технічні redstone-спільноти, яким потрібна побітно точна vanilla-поведінка, оскільки деякі оптимізації Paper її змінюють. На невеликому VPS ефективність Paper фактично дає додатковий вільний RAM.

Як створити резервну копію світу Minecraft без пошкодження даних?

Не архівуйте каталог світу, поки сервер записує до нього дані. Копіювання під час запису region-файлу може пошкодити чанки, і ви виявите це лише під час відновлення. Або зупиніть сервер, заархівуйте каталоги світу за допомогою tar і запустіть сервер знову, або залиште його запущеним, використовуючи save-off, save-all flush, tar і save-on через RCON. Потім перенесіть архів із VPS.