Przejdź do treści
Aktualny kupon:10% zniżkiUżyj w zamówieniu

Własny serwer Rust na VPS (SteamCMD, systemd)

Instalacja Rust Dedicated Server na VPS z Ubuntu 24.04 lub Debianem 13: SteamCMD, skrypt startowy, usługa systemd, porty i zapora, RCON, aktualizacje oraz Oxide lub Carbon.

  • ekspert
  • ~45 min
  • Zaktualizowano 9.10.2026

Postawimy serwer Rust na własnym VPS: pobierzemy go przez SteamCMD, przygotujemy skrypt startowy, uruchomimy go jako usługę systemd, otworzymy porty i ustawimy zarządzanie przez RCON. Na końcu znajdziesz procedurę comiesięcznych aktualizacji i instalacji Oxide lub Carbonu.

Czego potrzebujesz

  • VPS w StormHost z Ubuntu 24.04 lub Debianem 13, najlepiej z 16 GB RAM lub więcej (zobacz Wymagania sprzętowe)
  • Co najmniej 30 GB wolnego miejsca na dysku
  • Połączenie SSH jako root (poradnik), na wszelki wypadek z otwartą konsolą w przeglądarce
  • Rust na komputerze (do testu połączenia)
  • Około 45 minut

Rust w StormHost

Serwery Rust wciąż przygotowujemy. Do tego czasu możesz zbudować serwer Rust na VPS według tego poradnika. Te same kroki działają na każdym VPS z Linuksem.

Jak to będzie działać#

  • Użytkownik rust – serwer nie działa jako root. Jeśli ktoś go zaatakuje (na przykład przez błąd w pluginie), dostanie tylko uprawnienia tego użytkownika.
  • SteamCMD – oficjalne narzędzie Valve do pobierania serwerów gier. Rust Dedicated Server ma na Steamie numer aplikacji 258550.
  • Skrypt startowy /opt/rust/start.sh – zawiera wszystkie parametry serwera (porty, mapa, RCON).
  • Usługa systemd rust – uruchamia serwer przy starcie VPS i uruchamia go ponownie po awarii.
  • RCON – zdalna konsola. Konsola serwera na Linuksie nie jest interaktywna, więc polecenia wysyłasz przez RCON.

Struktura folderów:

ŚcieżkaCo tam jest
/opt/rust/steamcmdSteamCMD
/opt/rust/serverSerwer Rust (katalog główny serwera; trafia tu też Oxide lub Carbon)
/opt/rust/server/server/rustŚwiat, gracze i konfiguracja (identity rust)
/opt/rust/start.shSkrypt startowy

Wymagania sprzętowe#

  • RAM: Facepunch podaje co najmniej 12 GB wolnej pamięci dla serwera, a mapa o rozmiarze 6000 potrzebuje więcej. Do tego dochodzą pluginy i gracze. Planuj więc VPS z 16 GB RAM lub więcej. Swap pomoże przetrwać szczyty, ale nie zastąpi brakującej RAM.
  • Procesor: główna pętla serwera wykorzystuje głównie jeden rdzeń. Wydajność jednego rdzenia jest ważniejsza niż liczba rdzeni.
  • Dysk: Facepunch podaje co najmniej 15 GB wolnego miejsca, najlepiej SSD lub NVMe. Zostaw zapas na aktualizacje, kopie zapasowe i mapy.

Pamięć obciążonego serwera obserwuj poleceniem free -h.

Przygotowanie systemu#

Dotyczy zarówno Ubuntu 24.04, jak i Debiana 13. Polecenia uruchamiaj jako root.

  1. Zaktualizuj listę pakietów i zainstaluj potrzebne programy:

    bash
    apt update
    apt install -y lib32gcc-s1 curl ca-certificates unzip
    • lib32gcc-s1 – 32-⁠bitowa biblioteka, której SteamCMD potrzebuje do działania (SteamCMD to program 32-⁠bitowy).
    • curl – pobiera pliki z internetu.
    • ca-certificates – certyfikaty do bezpiecznego pobierania przez HTTPS.
    • unzip – rozpakowuje archiwum Oxide (jeśli będziesz go używać).
  2. Utwórz użytkownika rust z folderem domowym /opt/rust:

    bash
    useradd --create-home --home-dir /opt/rust --shell /bin/bash rust
    • --create-home --home-dir /opt/rust – tworzy folder /opt/rust, którego właścicielem jest użytkownik rust.
    • --shell /bin/bash – użytkownik dostaje zwykłą powłokę, abyś mógł się na niego przełączyć. Nie ma hasła, więc nie zalogujesz się na niego przez SSH; przełączysz się na niego z roota poleceniem su - rust.

Instalacja SteamCMD#

  1. Przełącz się na użytkownika rust:

    bash
    su - rust

    Znak zachęty zmieni się na rust@…. Wszystkie kolejne polecenia, aż do sekcji o usłudze systemd, uruchamiaj jako ten użytkownik.

  2. Utwórz folder dla SteamCMD i przejdź do niego:

    bash
    mkdir -p ~/steamcmd
    cd ~/steamcmd
  3. Pobierz i rozpakuj SteamCMD:

    bash
    curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
    • curl -sqL "…" – pobiera archiwum z oficjalnego serwera Valve; -s to tryb cichy (bez paska postępu), -q pomija osobisty plik konfiguracyjny curla ~/.curlrc, jeśli istnieje, -L podąża za przekierowaniami.
    • | tar zxvf - – rozpakowuje pobrane archiwum od razu do bieżącego folderu (z gzip, x rozpakuj, v wypisuj pliki, f - czytaj ze standardowego wejścia).

    W folderze jest teraz skrypt steamcmd.sh.

Pobranie serwera Rust#

Nadal jako użytkownik rust uruchom:

bash
~/steamcmd/steamcmd.sh +force_install_dir /opt/rust/server +login anonymous +app_update 258550 validate +quit
  • ~/steamcmd/steamcmd.sh – uruchamia SteamCMD. Przy pierwszym uruchomieniu SteamCMD sam się aktualizuje, co chwilę trwa.
  • +force_install_dir /opt/rust/server – gdzie serwer zostanie zainstalowany. Użyj ścieżki bezwzględnej i zawsze umieszczaj ją przed +login.
  • +login anonymous – anonimowe logowanie. Do pobrania serwera nie potrzebujesz konta Steam.
  • +app_update 258550 – pobiera lub aktualizuje aplikację 258550 (Rust Dedicated Server).
  • validate – sprawdza wszystkie pliki i przywraca uszkodzone lub zmienione do pierwotnego stanu. Uwaga: przywraca też pliki nadpisane przez framework Oxide.
  • +quit – po zakończeniu zamyka SteamCMD.

Pobieranie ma kilka gigabajtów. Na końcu zobaczysz:

Wyniktext
Success! App '258550' fully installed.

Gałęzie testowe

Facepunch oferuje też testowe wersje serwera (na przykład gałąź staging). Dostaniesz je, dodając -beta staging za +app_update 258550. Na serwer produkcyjny używaj domyślnej wersji publicznej.

Skrypt startowy#

  1. Jako użytkownik rust utwórz plik:

    bash
    nano ~/start.sh
  2. Wklej zawartość i dostosuj wartości (wyjaśnienie pod blokiem):

    /opt/rust/start.shbash
    #!/usr/bin/env bash
    cd /opt/rust/server || exit 1
    export TERM=xterm
    export LD_LIBRARY_PATH="/opt/rust/server:/opt/rust/server/RustDedicated_Data/Plugins/x86_64"
    
    # Carbon: odkomentuj następną linię (usuń krzyżyk), gdy go zainstalujesz
    # source /opt/rust/server/carbon/tools/environment.sh
    
    exec ./RustDedicated -batchmode \
      +server.identity "rust" \
      +server.port 28015 \
      +server.queryport 28017 \
      +server.level "Procedural Map" \
      +server.seed 12345 \
      +server.worldsize 3000 \
      +server.maxplayers 50 \
      +rcon.port 28016 \
      +rcon.password "<STRONG_PASSWORD>" \
      +rcon.web 1 \
      +app.port 28082 \
      -logfile /opt/rust/rust.log
  3. Zapisz (Ctrl+O, Enter) i zamknij edytor (Ctrl+X).

  4. Ustaw uprawnienia tak, aby skrypt dało się uruchomić, a hasło w nim mógł odczytać tylko użytkownik rust:

    bash
    chmod 700 ~/start.sh

Co robią poszczególne części:

  • cd /opt/rust/server || exit 1 – serwer uruchamia się z katalogu głównego (Oxide tworzy tam swój folder oxide). Jeśli folder nie istnieje, skrypt się zakończy.
  • export TERM=xterm – typ terminala; usługa systemd nie ma terminala, a według dokumentacji Carbonu niektóre środowiska go wymagają.
  • export LD_LIBRARY_PATH=… – foldery, w których serwer szuka swoich bibliotek (katalog główny serwera i RustDedicated_Data/Plugins/x86_64).
  • source …/environment.sh – wczytuje Carbon. Zostaw zakomentowane, dopóki nie zainstalujesz Carbonu.
  • exec ./RustDedicated – uruchamia serwer; exec sprawia, że systemd śledzi bezpośrednio proces serwera.
  • Parametry serwera (+server.port, +server.seed, +rcon.password …) szczegółowo wyjaśnia artykuł server.cfg i parametry startowe.
  • -logfile /opt/rust/rust.log – wyjście konsoli serwera zapisuje się do tego pliku.

Zamiast <STRONG_PASSWORD> wpisz hasło RCON (bez nawiasów ostrych) złożone tylko z liter i cyfr, o długości co najmniej 24 znaków. Utworzysz je w generatorze haseł. Seed (12345), rozmiar mapy (3000) i liczbę slotów (50) wybierz według siebie. W skrypcie trzymaj tylko porty, RCON, identity, mapę i liczbę slotów, aby to samo ustawienie nie było w dwóch miejscach.

  1. Nadal jako użytkownik rust utwórz plik server.cfg na nazwę serwera, opis, tagi i inne ustawienia:

    bash
    mkdir -p /opt/rust/server/server/rust/cfg
    nano /opt/rust/server/server/rust/cfg/server.cfg
    • mkdir -p … – tworzy folder identity rust i jego podfolder cfg (folder serwer utworzyłby przy pierwszym starcie, ale server.cfg już nie).
    • Co wpisać do pliku, wyjaśnia artykuł o konfiguracji. Na razie wystarczy jedna linia, na przykład server.hostname "Mój serwer Rust".

    Folder i plik utwórz jako użytkownik rust. Gdyby utworzył je root, serwer nie mógłby zapisywać do folderu cfg kont adminów ani banów. Naprawa (jako root): chown -R rust:rust /opt/rust/server/server.

  2. Wróć na roota:

    bash
    exit

Usługa systemd#

Jako root utwórz plik usługi poleceniem nano /etc/systemd/system/rust.service:

/etc/systemd/system/rust.serviceini
[Unit]
Description=Rust Dedicated Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=rust
Group=rust
WorkingDirectory=/opt/rust/server
ExecStart=/opt/rust/start.sh
Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target
DyrektywaCo robiZalecana wartośćKiedy zmieniać
After= i Wants=network-online.targetSerwer uruchomi się dopiero, gdy działa sieć.network-online.target–
User=, Group=Jako który użytkownik działa serwer.rustNigdy root.
WorkingDirectory=Folder roboczy procesu./opt/rust/serverJeśli serwer jest w innej ścieżce.
ExecStart=Skrypt startowy (ścieżka bezwzględna)./opt/rust/start.sh–
Restart=alwaysGdy proces się zakończy, systemd uruchomi go ponownie, nawet jeśli zakończył się „czysto”. Dzięki temu działa też polecenie restart przez RCON (serwer się kończy, a systemd go uruchamia).alwayson-failure, jeśli nie chcesz ponownego uruchomienia po ręcznym wyłączeniu przez RCON.
RestartSec=15Przerwa przed ponownym uruchomieniem.15–
WantedBy=multi-user.targetPo enable serwer uruchomi się przy starcie VPS.multi-user.target–

Dokładniejsze wyjaśnienie usług systemd znajdziesz w poradniku Aplikacja jako usługa systemd.

Wczytaj, włącz i uruchom usługę:

bash
systemctl daemon-reload
systemctl enable --now rust
  • systemctl daemon-reload – systemd wczytuje ponownie pliki usług (po każdej zmianie rust.service).
  • systemctl enable --now rust – włącza uruchamianie przy starcie VPS (enable) i od razu uruchamia usługę (--now).

Przy Restart=always jedynym sposobem zatrzymania serwera jest systemctl stop rust. Jeśli wyłączysz go przez RCON (quit), systemd uruchomi go ponownie.

Porty i zapora#

PortProtokółDo czegoOtwarty dla
28015UDPGra (połączenia graczy).Wszystkich
28017UDPQuery – wyświetlanie serwera w przeglądarce serwerów.Wszystkich
28082TCPRust+ (aplikacja mobilna). Musi być co najmniej 10000.Wszystkich (albo nikogo, jeśli wyłączysz Rust+)
28016TCPRCON (zdalna konsola).Tylko Twojego adresu IP

Jeśli używasz UFW:

bash
ufw allow 28015/udp
ufw allow 28017/udp
ufw allow 28082/tcp
ufw allow from 198.51.100.25 to any port 28016 proto tcp
  • ufw allow 28015/udp – zezwala na port gry przez UDP.
  • ufw allow 28017/udp – zezwala na port query.
  • ufw allow 28082/tcp – zezwala na Rust+.
  • ufw allow from 198.51.100.25 to any port 28016 proto tcp – RCON tylko z adresu IP 198.51.100.25; wpisz swój publiczny adres IP.

Jeśli zapora w strefie klienta jest ustawiona na Blokuj wszystko poza dozwolonym, dodaj tam te same reguły (Kierunek Przychodzący, Akcja Zezwól, właściwy Protokół; dla RCON wypełnij IP / zakres źródłowy). Port musi być dozwolony w obu zaporach.

Nie potrzebujesz Rust+? W skrypcie zamień +app.port 28082 na +app.port 1- (według Facepunch wyłącza to Rust+) i nie otwieraj portu 28082.

Weryfikacja#

  1. Sprawdź stan usługi:

    bash
    systemctl status rust

    Szukaj linii Active: active (running).

  2. Obserwuj wyjście serwera:

    bash
    tail -f /opt/rust/rust.log

    Pierwszy start trwa kilka minut (generuje się mapa). Serwer jest gotowy, gdy pojawi się Server startup complete. Obserwowanie zakończysz klawiszami Ctrl+C.

  3. W grze otwórz konsolę F1 i połącz się:

    text
    connect 203.0.113.10:28015

    Zamiast 203.0.113.10 wpisz adres IPv4 swojego VPS z zakładki Sieć.

  4. Kilka minut po starcie wyszukaj serwer po nazwie w przeglądarce serwerów (bez frameworka w zakładce Community, z Oxide lub Carbonem w Modded).

  5. Połącz się przez RCON (RustAdmin lub konsola webowa) z 203.0.113.10:28016 z hasłem ze skryptu i dodaj się jako właściciel – kroki opisuje artykuł Admin i RCON.

Aktualizacja serwera#

Duża aktualizacja Rusta wychodzi raz w miesiącu (zwykle w pierwszy czwartek miesiąca), a między nimi mniejsze poprawki.

  1. Ogłoś graczom restart i zapisz świat przez RCON: server.save.

  2. Zatrzymaj usługę (jako root):

    bash
    systemctl stop rust
  3. Zaktualizuj serwer jako użytkownik rust:

    bash
    su - rust -c "/opt/rust/steamcmd/steamcmd.sh +force_install_dir /opt/rust/server +login anonymous +app_update 258550 validate +quit"
    • su - rust -c "…" – uruchamia jedno polecenie jako użytkownik rust i wraca.
  4. Jeśli używasz Oxide, wgraj go ponownie (aktualizacja go nadpisała) – zobacz sekcję Oxide lub Carbon niżej. Carbon aktualizuje się sam przy starcie.

  5. Uruchom usługę:

    bash
    systemctl start rust

Nie dawaj aktualizacji do skryptu startowego, jeśli używasz Oxide

Gdyby SteamCMD z validate uruchamiał się przy każdym starcie, każdy restart usuwałby Oxide i serwer działałby bez pluginów. Facepunch wyraźnie ostrzega przed tym w swoim poradniku. Aktualizuj ręcznie według kroków wyżej.

Comiesięczna aktualizacja zwykle oznacza też nowy świat (force wipe). Procedurę i to, co usuwać, opisuje artykuł Wipe serwera Rust.

Oxide lub Carbon#

Czym jest każdy z nich i który wybrać, wyjaśnia artykuł Oxide i Carbon. Instalacja na tym VPS (serwer musi być zatrzymany):

Oxide

  1. Zatrzymaj serwer: systemctl stop rust.

  2. Pobierz i rozpakuj Oxide jako użytkownik rust:

    bash
    su - rust -c "curl -fL -o /opt/rust/oxide.zip https://github.com/OxideMod/Oxide.Rust/releases/latest/download/Oxide.Rust-linux.zip && unzip -o /opt/rust/oxide.zip -d /opt/rust/server"
    • curl -fL -o /opt/rust/oxide.zip … – pobiera najnowszy stabilny Oxide dla Linuksa do folderu domowego użytkownika rust. -f sprawia, że polecenie zakończy się błędem, jeśli plik nie istnieje, -L podąża za przekierowaniem GitHuba.
    • && – kolejne polecenie uruchomi się tylko wtedy, gdy pobieranie się powiodło.
    • unzip -o … -d /opt/rust/server – rozpakowuje archiwum do katalogu głównego serwera i nadpisuje pierwotne pliki gry.
  3. Uruchom serwer: systemctl start rust.

  4. Sprawdź oxide.version przez RCON.

Po comiesięcznej aktualizacji Rusta powtórz kroki 1–⁠3 dopiero wtedy, gdy na GitHubie (otwiera się w nowym oknie) pojawi się wersja Oxide nowsza niż aktualizacja Rusta.

Carbon

  1. Zatrzymaj serwer: systemctl stop rust.

  2. Pobierz i rozpakuj Carbon jako użytkownik rust:

    bash
    su - rust -c "curl -fL -o /opt/rust/carbon.tar.gz https://github.com/CarbonCommunity/Carbon/releases/download/production_build/Carbon.Linux.Release.tar.gz && tar -xzf /opt/rust/carbon.tar.gz -C /opt/rust/server"
    • Pobiera stabilny (produkcyjny) build Carbonu dla Linuksa i rozpakowuje go (-x) z archiwum skompresowanego gzipem (-z, -f plik) do katalogu głównego serwera (-C).
  3. W pliku /opt/rust/start.sh odkomentuj linię source /opt/rust/server/carbon/tools/environment.sh (usuń # na początku).

  4. Uruchom serwer: systemctl start rust.

  5. Sprawdź c.version przez RCON.

Po aktualizacji Rusta wystarczy uruchomić serwer; Carbon aktualizuje się sam.

Kopie zapasowe#

Świat i gracze są w /opt/rust/server/server/rust, pluginy i ich dane w /opt/rust/server/oxide (lub carbon). O kopie zapasowe VPS dbamy my, ale do szybkiego przywrócenia jednego świata lub konfiguracji warto mieć też własną kopię tych folderów. Przed archiwizacją zapisz świat (server.save) albo zatrzymaj serwer. Możliwości tworzenia kopii opisuje artykuł Kopie zapasowe na VPS.

Rozwiązywanie problemów#

ERROR! Failed to install app '258550' (No subscription)#

W poleceniu SteamCMD brakuje +login anonymous. Bez logowania serwera nie pobierzesz (ale konto Steam nie jest potrzebne).

SteamCMD zgłasza linux32/steamcmd: No such file or directory#

Brakuje 32-⁠bitowej biblioteki. Zainstaluj ją jako root: apt install lib32gcc-s1.

SteamCMD zgłasza Please use force_install_dir before logon!#

Parametr +force_install_dir musi być w poleceniu przed +login. Popraw kolejność jak w poradniku.

Usługa od razu kończy się z status=203/EXEC#

systemd nie może uruchomić skryptu: nie jest wykonywalny (chmod 700 /opt/rust/start.sh), brakuje pierwszej linii #!/usr/bin/env bash albo plik ma windowsowe końce linii (napisałeś go na Windowsie i wgrałeś). Inne kody błędów wyjaśnia Aplikacja jako usługa systemd. Szczegółowe wyjście: journalctl -u rust -n 50.

error while loading shared libraries: …#

Serwerowi brakuje biblioteki systemowej; jej nazwa jest w komunikacie. Sprawdź w skrypcie linię export LD_LIBRARY_PATH=… i w razie potrzeby zainstaluj bibliotekę przez apt.

Serwer działa, ale nie da się z nim połączyć#

  • Serwer jeszcze nie skończył startu (w logu nie ma Server startup complete).
  • Port 28015/UDP nie jest dozwolony w UFW ani w zaporze w strefie klienta. Pamiętaj, że gra używa UDP, a nie TCP.
  • Łączysz się ze złym adresem IP lub portem.

Serwera nie ma w przeglądarce serwerów#

Port query (28017/UDP) nie jest otwarty albo jest taki sam jak port gry. Serwer pojawi się w przeglądarce dopiero kilka minut po starcie. Szukaj we właściwej zakładce (Community lub Modded).

Serwer po czasie pada, a w logu nic nie ma#

Najpewniej zabrakło pamięci i system zabił proces. Sprawdź:

bash
journalctl -k | grep -i "out of memory"
  • journalctl -k – wypisuje komunikaty jądra systemu (zapisują się tu też procesy zabite z braku pamięci).
  • | grep -i "out of memory" – zostawia tylko linie zawierające ten tekst; -i ignoruje wielkość liter.

Wynik wspominający RustDedicated oznacza, że brakuje RAM. Użyj mniejszej mapy, ogranicz pluginy, dodaj swap albo dokup RAM (upgrade VPS).

Rust+ companion server connectivity test failed! Disabling Rust+ features.#

Serwer sprawdza, czy port Rust+ jest osiągalny z internetu. Zezwól na 28082/tcp w obu zaporach albo wyłącz Rust+ (+app.port 1-). Facepunch zaznacza, że port musi być co najmniej 10000, a serwer potrzebuje dostępu do companion-rust.facepunch.com.

Po aktualizacji nie działają pluginy#

Aktualizacja z validate usunęła Oxide. Wgraj go ponownie (sekcja Oxide lub Carbon).

Podsumowanie

  • Serwer działa jako użytkownik rust w /opt/rust/server i pobiera się go przez SteamCMD (aplikacja 258550).
  • Parametry są w skrypcie /opt/rust/start.sh, a serwer uruchamia usługa rust (systemctl start|stop|status rust).
  • Otwórz 28015/UDP, 28017/UDP, 28082/TCP, a RCON 28016/TCP tylko dla swojego IP – w UFW i w zaporze w strefie klienta.
  • Polecenia wysyłaj przez RCON; konsola na Linuksie nie jest interaktywna.
  • Aktualizacja: zapis, zatrzymanie, SteamCMD z validate, ponownie Oxide (Carbon aktualizuje się sam), uruchomienie.

Czy ten poradnik był pomocny?

Dotyczy

  • Ubuntu 24.04
  • Debian 13

Usługi

Zgłoś błąd w poradniku

Wyszukiwanie w poradnikach