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żka | Co tam jest |
|---|---|
/opt/rust/steamcmd | SteamCMD |
/opt/rust/server | Serwer Rust (katalog główny serwera; trafia tu też Oxide lub Carbon) |
/opt/ | Świat, gracze i konfiguracja (identity rust) |
/opt/rust/start.sh | Skrypt 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.
Zaktualizuj listę pakietów i zainstaluj potrzebne programy:
bash apt update apt install -y lib32gcc-s1 curl ca-certificates unziplib32gcc-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ć).
Utwórz użytkownika
rustz 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żytkownikrust.--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 poleceniemsu - rust.
Instalacja SteamCMD#
Przełącz się na użytkownika
rust:bash su - rustZnak zachęty zmieni się na
rust@…. Wszystkie kolejne polecenia, aż do sekcji o usłudze systemd, uruchamiaj jako ten użytkownik.Utwórz folder dla SteamCMD i przejdź do niego:
bash mkdir -p ~/steamcmd cd ~/steamcmdPobierz 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;-sto tryb cichy (bez paska postępu),-qpomija osobisty plik konfiguracyjny curla~/.curlrc, jeśli istnieje,-Lpodąża za przekierowaniami.| tar zxvf -– rozpakowuje pobrane archiwum od razu do bieżącego folderu (zgzip,xrozpakuj,vwypisuj pliki,f -czytaj ze standardowego wejścia).
W folderze jest teraz skrypt
steamcmd.sh.
Pobranie serwera Rust#
Nadal jako użytkownik rust uruchom:
~/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:
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#
Jako użytkownik
rustutwórz plik:bash nano ~/start.shWklej zawartość i dostosuj wartości (wyjaśnienie pod blokiem):
/opt/ rust/ bashstart.sh #!/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.logZapisz (Ctrl+O, Enter) i zamknij edytor (Ctrl+X).
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 folderoxide). 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 iRustDedicated_).Data/ Plugins/ x86_ 64 source …/environment.sh– wczytuje Carbon. Zostaw zakomentowane, dopóki nie zainstalujesz Carbonu.exec ./RustDedicated– uruchamia serwer;execsprawia, ż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.
Nadal jako użytkownik
rustutwórz plikserver.cfgna nazwę serwera, opis, tagi i inne ustawienia:bash mkdir -p /opt/rust/server/server/rust/cfg nano /opt/rust/server/server/rust/cfg/server.cfgmkdir -p …– tworzy folder identityrusti jego podfoldercfg(folder serwer utworzyłby przy pierwszym starcie, aleserver.cfgjuż 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 folderucfgkont adminów ani banów. Naprawa (jako root):chown -R rust:rust /opt/rust/server/server.Wróć na roota:
bash exit
Usługa systemd#
Jako root utwórz plik usługi poleceniem nano /etc/:
[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| Dyrektywa | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
After= i Wants= | Serwer uruchomi się dopiero, gdy działa sieć. | network-online.target | – |
User=, Group= | Jako który użytkownik działa serwer. | rust | Nigdy root. |
WorkingDirectory= | Folder roboczy procesu. | /opt/rust/server | Jeśli serwer jest w innej ścieżce. |
ExecStart= | Skrypt startowy (ścieżka bezwzględna). | /opt/rust/start.sh | – |
Restart=always | Gdy 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). | always | on-failure, jeśli nie chcesz ponownego uruchomienia po ręcznym wyłączeniu przez RCON. |
RestartSec=15 | Przerwa przed ponownym uruchomieniem. | 15 | – |
WantedBy= | Po 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ę:
systemctl daemon-reload
systemctl enable --now rustsystemctl daemon-reload– systemd wczytuje ponownie pliki usług (po każdej zmianierust.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#
| Port | Protokół | Do czego | Otwarty dla |
|---|---|---|---|
28015 | UDP | Gra (połączenia graczy). | Wszystkich |
28017 | UDP | Query – wyświetlanie serwera w przeglądarce serwerów. | Wszystkich |
28082 | TCP | Rust+ (aplikacja mobilna). Musi być co najmniej 10000. | Wszystkich (albo nikogo, jeśli wyłączysz Rust+) |
28016 | TCP | RCON (zdalna konsola). | Tylko Twojego adresu IP |
Jeśli używasz UFW:
ufw allow 28015/udp
ufw allow 28017/udp
ufw allow 28082/tcp
ufw allow from 198.51.100.25 to any port 28016 proto tcpufw 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 IP198.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#
Sprawdź stan usługi:
bash systemctl status rustSzukaj linii
Active: active (running).Obserwuj wyjście serwera:
bash tail -f /opt/rust/rust.logPierwszy start trwa kilka minut (generuje się mapa). Serwer jest gotowy, gdy pojawi się
Server startup complete. Obserwowanie zakończysz klawiszami Ctrl+C.W grze otwórz konsolę F1 i połącz się:
text connect 203.0.113.10:28015Zamiast
203.0.113.10wpisz adres IPv4 swojego VPS z zakładki Sieć.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).
Połącz się przez RCON (RustAdmin lub konsola webowa) z
203.0.113.10:28016z 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.
Ogłoś graczom restart i zapisz świat przez RCON:
server.save.Zatrzymaj usługę (jako root):
bash systemctl stop rustZaktualizuj 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żytkownikrusti wraca.
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.
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
Zatrzymaj serwer:
systemctl stop rust.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żytkownikarust.-fsprawia, że polecenie zakończy się błędem, jeśli plik nie istnieje,-Lpodąż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.
Uruchom serwer:
systemctl start rust.Sprawdź
oxide.versionprzez 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
Zatrzymaj serwer:
systemctl stop rust.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,-fplik) do katalogu głównego serwera (-C).
- Pobiera stabilny (produkcyjny) build Carbonu dla Linuksa i rozpakowuje go (
W pliku
/opt/rust/start.shodkomentuj linięsource /opt/(usuńrust/ server/ carbon/ tools/ environment. sh #na początku).Uruchom serwer:
systemctl start rust.Sprawdź
c.versionprzez RCON.
Po aktualizacji Rusta wystarczy uruchomić serwer; Carbon aktualizuje się sam.
Kopie zapasowe#
Świat i gracze są w /opt/, 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ź:
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;-iignoruje 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..
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
rustw/opt/rust/serveri pobiera się go przez SteamCMD (aplikacja258550). - Parametry są w skrypcie
/opt/rust/start.sh, a serwer uruchamia usługarust(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.