Windows-ზე Valheim-ის გამოყოფილი სერვერის მიღების ორი გზა არსებობს: დააყენე „Valheim Dedicated Server“ შენი Steam ბიბლიოთეკის Tools განყოფილებიდან, ან ჩამოტვირთე აპლიკაცია 896660 SteamCMD-ით შენთვის სასურველ საქაღალდეში. ორივე შემთხვევაში შემდეგ დააკოპირე start_headless_server.bat, ასლში მიუთითე სერვერის სახელი, სამყარო და პაროლი, Windows Defender Firewall-ში დაუშვი valheim_server.exe UDP 2456-2458-ზე და გაუშვი. ერთ საღამოზე უფრო ხანგრძლივი თამაშისთვის გაუშვი ის Windows სერვისად NSSM-ით, ისე მორგებული, რომ გაჩერებისას Ctrl+C გაგზავნოს და სამყარო შეინახოს. ხაფანგები Windows-ისთვისაა სპეციფიკური: კონსოლის ფანჯრის X-ით დახურვა სერვერს შენახვის გარეშე კლავს, firewall-ის მოთხოვნაზე არასწორი პასუხი ადვილია, ხოლო SYSTEM ანგარიშით მომუშავე სერვისი სამყაროებს ისეთ ადგილას ინახავს, სადაც ჩახედვას არავინ ფიქრობს.
თავად გაშვების არგუმენტები სათითაოდ Valheim-ის გაშვების არგუმენტების ცნობარშია განხილული; ეს პოსტი Windows-ზე დაყენებასა და მის გარშემო არსებულ სერვისზეა.
Steam Tools თუ SteamCMD: რომელი გამოვიყენოთ#
ორივე ერთსა და იმავე სერვერის ფაილებს იძლევა. განსხვავება ისაა, ვინ ანახლებს მათ და სად ინახება ისინი.
| Steam Tools-ის ასლი | SteamCMD | |
|---|---|---|
| სჭირდება Steam კლიენტი | კი, ავტორიზებული | არა |
| დაყენების ადგილი | steamapps\common\Valheim dedicated server | შენ მიერ არჩეული ნებისმიერი საქაღალდე |
| განახლებები | Steam, ავტომატურად, როცა კლიენტი მუშაობს | როცა განახლების ბრძანებას გაუშვებ |
| კარგია | სერვერისთვის შენს სათამაშო კომპიუტერზე ერთი საღამოთი | მანქანისთვის, რომელიც სერვერს მუდმივად ამუშავებს |
Steam Tools-ის ასლი სწრაფი გზაა. Steam ბიბლიოთეკაში ფილტრი ისე გადართე, რომ Tools-იც მოიცვას, იპოვე „Valheim Dedicated Server“ და დააყენე. ნაგულისხმევ ინსტალაციაზე ის C:\Program Files (x86)\Steam\steamapps\common\Valheim dedicated server-ში ხვდება. პრობლემა ისაა, რომ Steam მას როცა მოესურვება, მაშინ ანახლებს, რაც vanilla სერვერისთვის მოსახერხებელია, მოდებიანისთვის კი პრობლემა, და რომ ის სერვერს Steam-ით გაშვებულ დესკტოპის სესიაზე აბამს.
SteamCMD იმ მანქანის გზაა, რომელიც სხვას არაფერს აკეთებს. ჩამოტვირთე steamcmd.zip Valve-ის დეველოპერების საიტიდან, გახსენი ისეთ საქაღალდეში, როგორიცაა C:\steamcmd, და გაუშვი:
C:\steamcmd\steamcmd.exe +force_install_dir C:\valheim\server +login anonymous +app_update 896660 validate +quitპირველი გაშვება ჯერ თავად SteamCMD-ს ანახლებს, შემდეგ კი სერვერს ტვირთავს. Valheim-ის ფლობა არ გჭირდება; სერვერის აპლიკაცია ანონიმურად იტვირთება. +force_install_dir +login-მდე უნდა იყოს, გზა კი ისეთი, რომელშიც შენს მომხმარებელს ჩაწერა შეუძლია - მოერიდე Program Files-ს, სადაც ყოველ ჩაწერას ადმინის უფლებები სჭირდება და მათ გარეშე ჩუმად ვირტუალიზებულ საქაღალდეში მიდის. SteamCMD-ის ახსნა ბრძანების აგებულებასა და შეცდომის კოდებს განიხილავს.
იგივე ბრძანება სერვერს მოგვიანებით ანახლებს. ჯერ სერვერი გააჩერე; SteamCMD ვერ ცვლის ფაილებს, რომლებიც მომუშავე პროცესს აქვს გახსნილი, და ნახევრად განახლებულ ინსტალაციას მიიღებ.
რა არის სერვერის საქაღალდეში#
ნებისმიერი ინსტალაციის შემდეგ საქაღალდე შეიცავს:
valheim_server.exe- თავად სერვერი.valheim_server_Data- Unity-ის მონაცემების საქაღალდე. აქ არაფერი შეცვალო.start_headless_server.bat- გაშვების სკრიპტის ნიმუში.steam_appid.txt,steamclient64.dllდა Steam API-ის სხვა ფაილები, რომლებიც სერვერს რეგისტრაციისთვის სჭირდება.- დოკუმენტაცია, მაგალითად Iron Gate-ის მოკლე PDF სახელმძღვანელო, build-ის მიხედვით.
სამყაროები ამ საქაღალდეში არ არის. ნაგულისხმევად სერვერი იმ მომხმარებლის პროფილში ინახავს, ვინც მას უშვებს, %USERPROFILE%\AppData\LocalLow\IronGate\Valheim-ში, სადაც სამყაროები worlds_local-შია, ხოლო adminlist.txt, bannedlist.txt და permittedlist.txt ამ საქაღალდის გვერდით დევს. ეს ფაქტი ქვემოთ მოცემულ სერვისის განყოფილებას განსაზღვრავს. Valheim-ის ფაილების მდებარეობა Windows-სა და Linux-ზე ყველა გზას ჩამოთვლის.
start_headless_server.bat-ის უსაფრთხო რედაქტირება#
თანმხლები სკრიპტი ასე გამოიყურება, კომენტარებისა და იმის გათვალისწინებით, არის თუ არა ნიმუშის ხაზში უკვე -crossplay, რაც build-ზეა დამოკიდებული:
@echo offset SteamAppId=892970echo "Starting server PRESS CTRL-C to exit"REM Tip: Make a local copy of this script to avoid it being overwritten by steam.REM NOTE: Minimum password length is 5 characters & Password cant be in the server name.REM NOTE: You need to make sure the ports 2456-2458 is being forwarded to your servervalheim_server -nographics -batchmode -name "My server" -port 2456 -world "Dedicated" -password "secret"მიჰყევი რჩევას. ყოველი განახლება - Steam-ის ავტომატური თუ validate - ამ ფაილს აღადგენს და მასთან ერთად შენს სერვერის სახელსა და პაროლსაც. დააკოპირე ის start_valheim.bat-ად იმავე საქაღალდეში და ასლი დაარედაქტირე:
@echo offcd /d "%~dp0"set SteamAppId=892970valheim_server.exe -nographics -batchmode -name "Longship Crew" -port 2456 ^ -world "Midgard" -password "herring-barrel-42" -public 1 ^ -saveinterval 900 -backups 4რას აკეთებს თითოეული ცვლილება:
cd /d "%~dp0"იმ საქაღალდეში გადადის, სადაც სკრიპტი დევს, ასე რომ ის მუშაობს shortcut-იდან, დაგეგმილი ამოცანიდან ან სერვისიდან. მის გარეშე Explorer-იდან ორმაგი დაწკაპუნება მუშაობს, მაგრამ სხვა ადგილიდან გაშვებისას შეიძლებაvalheim_server.exeან მისი მონაცემები ვერ იპოვოს.set SteamAppId=892970რჩება. ეს თამაშის კლიენტის აპლიკაციის id-ია, და სერვერი მას Steam-ისთვის თავის ამოსაცნობად იყენებს. ნუ შეცვლი მას სერვერის id-ზე.^ხაზის ბოლოს batch ფაილში ხაზს აგრძელებს, რაც გრძელ ბრძანებას იკითხვადს ხდის. caret-ის შემდეგ არაფერი უნდა იყოს, თუნდაც ჰარი.-saveinterval 900ყოველ 15 წუთში ინახავს 30-ის ნაცვლად და ორჯერ ამცირებს იმას, რისი დაკარგვაც ავარიას შეუძლია.
-crossplay მხოლოდ მაშინ დაამატე, თუ Xbox-ის ან Game Pass-ის მოთამაშეებს შემოსვლა სჭირდებათ; კომპრომისები Valheim-ის crossplay-სა და Xbox-ის მოთამაშეებშია.
პირველი გაშვება და სუფთა გაჩერება#
ორჯერ დააწკაპუნე შენს ასლზე. იხსნება კონსოლის ფანჯარა, რომელშიც ლოგი გადის. პირველ გაშვებაზე ახალი სამყარო იქმნება და ინახება, რასაც შემდგომ გაშვებებზე შესამჩნევად მეტი დრო სჭირდება. მოძებნე Load world: შენი სამყაროს სახელით და Game server connected, რაც ნიშნავს, რომ Steam-მა რეგისტრაცია მიიღო. -crossplay-ით ამას ექვსციფრიანი შესვლის კოდის ხაზი მოსდევს.
სერვერის გასაჩერებლად დააწკაპუნე ფანჯარაში, დააჭირე Ctrl+C და დაელოდე. სერვერი სამყაროს ინახავს და ითიშება; ზოგ build-ზე ფანჯარა შემდეგ გეკითხება Terminate batch job (Y/N)?, რაც Windows-ის კითხვაა სკრიპტზე და არა სერვერზე - შენახვა უკვე მოხდა და ნებისმიერი პასუხი კარგია.
ნუ დახურავ ფანჯარას X-ით. ეს პროცესს გათიშვის თანმიმდევრობის გარეშე ასრულებს, და ბოლო შენახვის შემდეგ ყველაფერი იკარგება - ნაგულისხმევი ინტერვალით ოცდაათ წუთამდე. Windows-იდან გასვლას, განახლებების გამო იძულებით გადატვირთვას ან Task Manager-ში ამოცანის დასრულებას იგივე ეფექტი აქვს. ეს ყველაზე ძლიერი არგუმენტია სერვისის სასარგებლოდ, რომელსაც შეიძლება უთხრა, რომ Ctrl+C გაგზავნოს.
თუ მოსალოდნელი სამყარო არ იტვირთება და სამაგიეროდ ახალი იქმნება, -world-ის სახელი worlds_local-ში არსებული ფაილის სახელს არ ემთხვევა. შენი ძველი სამყარო ხელუხლებელია; გაასწორე სახელი და გადატვირთე. გაშვების შეცდომები ლოგის შეტყობინებების მიხედვით Valheim-ის სერვერი გაშვებისას ვარდება-შია თავმოყრილი.
Windows Defender Firewall და პორტების გადამისამართება#
როცა valheim_server.exe პირველად ხსნის ქსელის პორტს, Windows Defender Firewall მოთხოვნას აჩვენებს და გეკითხება, რომელ ქსელებზე დაუშვას. აქ ორნაირად შეიძლება რამე ცუდად წავიდეს:
- მოთხოვნა კონსოლის ფანჯრის უკან ჩნდება, მას არავინ პასუხობს და შემომავალი ტრაფიკი იბლოკება.
- მონიშნულია მხოლოდ „Private networks“, მაშინ როცა Windows შენს კავშირს Public-ად თვლის - ეს ხშირია ახლად დაყენებულ მანქანაზე ან მონაცემთა ცენტრში მდგომ სერვერზე - და წესი არასოდეს მოქმედებს.
მოთხოვნას ნუ ენდობი, ამის ნაცვლად ადმინის უფლებებით გაშვებული PowerShell-იდან შექმენი ცხადი წესები:
New-NetFirewallRule -DisplayName "Valheim UDP" -Direction Inbound ` -Protocol UDP -LocalPort 2456-2458 -Action Allow -Profile AnyUDP 2456 სათამაშო ტრაფიკს ატარებს, 2457 კი Steam-ის query-ებს პასუხობს; დიაპაზონის მესამე პორტი ის არის, რასაც ნიმუშ სკრიპტის კომენტარი ახსენებს, და მისი გახსნა არაფერი ღირს. პროტოკოლს მნიშვნელობა აქვს: TCP წესი Valheim-ისთვის არაფერს აკეთებს. თუ ადრე მოთხოვნას „Cancel“-ით უპასუხე, Windows-მა valheim_server.exe-სთვის ბლოკირების წესი შექმნა, ბლოკირების წესები კი დაშვების წესებზე ძლიერია. იპოვე ის Windows Defender Firewall with Advanced Security-ში, Inbound Rules-ში, და წაშალე.
სახლში იგივე UDP დიაპაზონი როუტერზე კომპიუტერის LAN მისამართზე გადაამისამართე და ამ კომპიუტერს ფიქსირებული მისამართი მიეცი (DHCP reservation), რომ გადამისამართება არ გაფუჭდეს, როცა ის ახალ მისამართს მიიღებს. ღრუბლოვან Windows სერვერზე პროვაიდერის ქსელის firewall-საც იგივე წესი სჭირდება. Valheim-ის პორტების ახსნა განიხილავს -port-ის შეცვლას, ერთ მანქანაზე ორი სერვერის გაშვებას და იმის შემოწმებას, მართლა ღიაა თუ არა პორტი.
შეამოწმე შენი ქსელის გარეთ მყოფი მანქანიდან IP-ით შესვლით: Join Game, Add Server, your.public.ip:2456. თუ ეს მუშაობს და საზოგადოების სია სერვერს მაინც არ აჩვენებს, დაელოდე - სიას შეიძლება რამდენიმე წუთი დასჭირდეს - და იხილე Valheim-ის სერვერი სიაში არ ჩანს.
სერვერის გაშვება სერვისად NSSM-ით#
კონსოლის ფანჯარაში მომუშავე სერვერი ჩერდება, როცა ვინმე სისტემიდან გადის, ფანჯარას ხურავს ან Windows Update მანქანას გადატვირთავს. NSSM, Non-Sucking Service Manager, ნებისმიერ პროგრამას Windows სერვისად ფუთავს: ის ჩატვირთვისას ეშვება ისე, რომ არავინაა შესული, ავარიის შემდეგ რესტარტდება და - Valheim-ისთვის მნიშვნელოვანი ნაწილი - პროგრამის გაჩერება შეუძლია Ctrl+C-ით, მისი მოკვლის ნაცვლად.
ჩამოტვირთე NSSM, მოათავსე nssm.exe სადმე PATH-ზე და ადმინის უფლებებით გაშვებული Command Prompt-იდან:
nssm install Valheim C:\valheim\server\valheim_server.exenssm set Valheim AppDirectory C:\valheim\servernssm set Valheim AppParameters -nographics -batchmode -name "Longship Crew" -port 2456 -world "Midgard" -password "herring-barrel-42" -public 1 -saveinterval 900 -savedir C:\valheim\savenssm set Valheim AppEnvironmentExtra SteamAppId=892970nssm set Valheim AppStopMethodConsole 60000nssm set Valheim AppStdout C:\valheim\logs\valheim.lognssm set Valheim AppStderr C:\valheim\logs\valheim.lognssm set Valheim AppRotateFiles 1nssm set Valheim Start SERVICE_AUTO_STARTnssm start Valheimსერვისი valheim_server.exe-ს პირდაპირ უშვებს და არა batch ფაილს, ასე რომ NSSM-ის გაჩერების სიგნალი პირდაპირ სერვერს მიდის. ხაზ-ხაზ, ის ხაზები, რომლებიც თავისთავად გასაგები არ არის:
AppEnvironmentExtra SteamAppId=892970batch ფაილისsetხაზს ანაცვლებს. მის გარეშე სერვერი Steam-ში რეგისტრაციას ვერ ახერხებს.AppStopMethodConsole 60000NSSM-ს ეუბნება, რომ გაჩერებისას Ctrl+C გაგზავნოს და პროცესის დასრულებას 60 წამამდე დაელოდოს, სანამ უფრო მკაცრ მეთოდებზე გადავა. დიდ სამყაროს ჩასაწერად ეს დრო სჭირდება. დარწმუნდი, რომ „Console“ გაჩერების მეთოდიAppStopMethodSkip-ში გამორთული არ არის; ნაგულისხმევად ის ჩართულია.AppStdoutდაAppStderrლოგს იჭერს, რადგან სერვისს ფანჯარა არ აქვს. ჯერlogsსაქაღალდე შექმენი.AppRotateFiles 1ფაილს სერვისის გაშვებისას აბრუნებს, რომ უსასრულოდ არ გაიზარდოს.-savedir C:\valheim\saveის ხაზია, რომელიც დაკარგულ საღამოს გიზოგავს. წაიკითხე შემდეგი აბზაცი.
ნაგულისხმევად სერვისი LocalSystem-ით მუშაობს. LocalSystem-ის პროფილი C:\Windows\System32\config\systemprofile-ია, ასე რომ -savedir-ის გარეშე სერვერი C:\Windows\System32\config\systemprofile\AppData\LocalLow\IronGate\Valheim-ში ინახავს - და იქ ახალ სამყაროს ქმნის, რადგან შენი არსებული სამყარო შენს საკუთარ პროფილშია. ან გადაეცი -savedir ჩვეულებრივ საქაღალდეზე, როგორც ზემოთ, და შენი worlds_local საქაღალდე და სიის ფაილები მასში გადაიტანე, ან გაუშვი სერვისი ჩვეულებრივი მომხმარებლის ანგარიშით nssm set Valheim ObjectName .\valheim "password"-ით. ცალკე, დაბალი უფლებების მქონე ლოკალური მომხმარებელი პლუს -savedir ყველაზე მოწესრიგებული კომბინაციაა.
მართე ის როგორც ნებისმიერი სერვისი: nssm restart Valheim, sc query Valheim ან Services-ის კონსოლი. nssm edit Valheim ყველა პარამეტრით GUI-ს ხსნის, თუ დაწკაპუნება გირჩევნია. განახლებისთვის გააჩერე სერვისი, გაუშვი SteamCMD-ის ბრძანება და ისევ ჩართე.
განახლებები, რესტარტები და backup-ები Windows-ზე#
Task Scheduler-ს შეუძლია ყოველ ღამე ან ყოველ კვირა პატარა სკრიპტის გაშვება, რომელიც სერვისს აჩერებს, SteamCMD-ით განახლებას უშვებს და სერვისს ისევ რთავს:
nssm stop ValheimC:\steamcmd\steamcmd.exe +force_install_dir C:\valheim\server +login anonymous +app_update 896660 +quitnssm start Valheimმოდებიანი სერვერისთვის ეს არ დაგეგმო. Valheim-ის პატჩი BepInEx მოდებს ამტვრევს, სანამ მათი ავტორები არ დაეწევიან, ავტომატური განახლება კი ამ გაფუჭებას დილის 4 საათზე მოგიტანს. Valheim-ის სერვერის განახლება განიხილავს, როდის განაახლო და რას ნიშნავს Incompatible version შეცდომა.
სერვერის საკუთარი -backups ასლები იმავე worlds_local საქაღალდეში დევს, სადაც სამყარო, იმავე დისკზე. ნამდვილი backup-ებისთვის შენახვის საქაღალდე სხვაგან დააკოპირე - სხვა დისკზე, NAS-ზე, ობიექტურ საცავში - განრიგით, იდეალურად დაგეგმილი რესტარტის მაშინვე შემდეგ, როცა სამყარო ახლახან სუფთად შეინახა. Valheim-ის სერვერის backup-ები და სამყაროს დაზიანება სტრატეგიასა და აღდგენის პროცედურას შეიცავს.
ბოლო ხაფანგი თავად Windows-ია. Windows Update მაშინ გადატვირთავს, როცა მოესურვება, თუ აქტიურ საათებს ან ტექნიკური მომსახურების ფანჯარას არ დააყენებ. NSSM-ითა და Ctrl+C-ის გაჩერების მეთოდით გადატვირთვა სუფთა გაჩერებაა, მაგრამ სერვერი მაინც გათიშულია, სანამ არ დაბრუნდება. თამაშის სერვერის ყოველდღიურ სათამაშო კომპიუტერზე გაშვება ასევე ნიშნავს, რომ სერვერი შენს თამაშს იმავე CPU-სთვის ეჯიბრება; Linux თუ Windows გეიმ სერვერებისთვის და სახლში ჰოსტინგი თუ ქირაობა განიხილავს, როდის ღირს მისი სხვაგან გადატანა.
RE:NODE-ზე სერვისის, firewall-ისა და განახლების კითხვები არ ჩნდება: სერვერი საკუთარ კონტეინერში მუშაობს, ორივე UDP პორტი გეგმას მოჰყვება, Restart სუფთა გაჩერებას აგზავნის, რომ სამყარო შეინახოს, გაშვების არგუმენტები კი Startup ჩანართის ველებია და არა batch ფაილი, რომლის ასლიც უნდა იქონიო.
FAQ#
შემიძლია ვითამაშო იმავე კომპიუტერზე, რომელზეც სერვერი მუშაობს?
კი. გაუშვი სერვერი, შემდეგ თამაში, და შეუერთდი 127.0.0.1:2456-ით ან შენი LAN მისამართით. სერვერი და თამაში CPU-სთვის ეჯიბრებიან, ასე რომ საშუალო კომპიუტერი რამდენიმე მეგობარს ათზე უკეთ უმკლავდება. დანარჩენები შენი საჯარო მისამართით შემოდიან.
რატომ გაქრა ჩემი სამყარო სერვისის მორგების შემდეგ?
თითქმის უეჭველად სერვისი სხვა ანგარიშით მუშაობს, ვიდრე ის, რომლითაც ტესტირებდი, ასე რომ ის იმ ანგარიშის პროფილში ინახავს და იქ ახალი სამყარო შექმნა. შენი ძველი სამყარო ისევ შენს საკუთარ AppData\LocalLow\IronGate\Valheim\worlds_local-შია. მიუთითე -savedir ფიქსირებულ საქაღალდეზე და იქ გადაიტანე.
Steam კლიენტი უნდა მუშაობდეს?
Steam Tools-ის ასლისთვის Steam განახლებებისთვის უნდა მუშაობდეს, მაგრამ სერვერი მის გარეშეც ეშვება, თუ SteamAppId დაყენებულია. SteamCMD-ით დაყენებულ სერვერს კლიენტი არასოდეს სჭირდება.
უსაფრთხოა სერვერის ფანჯრის დახურვა?
არა. ფანჯრის დახურვა პროცესს შენახვის გარეშე კლავს. დააჭირე მასში Ctrl+C და დაელოდე შენახვას, ან გააჩერე NSSM სერვისი, რომელიც Ctrl+C-ს შენ მაგივრად აგზავნის.
შემიძლია ერთ Windows მანქანაზე ორი Valheim სერვერი გავუშვა?
კი, ცალკე სამყაროს სახელებით, ცალკე -port მნიშვნელობებით, ერთმანეთისგან სულ მცირე სამით დაშორებული (2456 და 2466 ხშირი არჩევანია), და ცალკე firewall-ის დიაპაზონებით. დანარჩენს ორი NSSM სერვისი სხვადასხვა სახელით აგვარებს.


