RE:NODE

Valheim Pterodactyl-ზე: egg, პორტები და გაშვების ცვლადები

ავტორი RE:NODE-ის გუნდი
12 წუთის საკითხავი


Valheim-ის გაშვება Pterodactyl პანელზე ოთხ რამეს მოითხოვს: nest-ში შემოტანილ Valheim egg-ს, node-ს, რომელზეც სერვერს ორი თანმიმდევრული პორტი აქვს გამოყოფილი (თამაშის პორტი და მის ზემოთ მდგომი, ორივე UDP-ზე მისაწვდომი), შევსებულ startup ცვლადებს - სერვერის სახელი, სამყაროს სახელი, პაროლი, რომელსაც არც ერთთან საერთო სიტყვა არ აქვს, და public ჩართული ან გამორთული - და ^C stop ბრძანებას, რათა პანელის Stop ღილაკმა SIGINT გააგზავნოს და container-ის გასვლამდე სამყარო შეინახოს. სამყაროები შემდეგ სერვერის ფაილ მენეჯერში container-ის home დირექტორიის ქვეშ ზის, მოდებისთვის კი ცალკე BepInEx egg გამოიყენება და არა შეცვლილი vanilla. თითქმის ყველა პრობლემა სამიდან ერთია: გამოყოფილია მხოლოდ ერთი პორტი, პაროლი, რომელსაც თამაში უარყოფს, ან სამყაროს სახელი, რომელიც ფაილს არ ემთხვევა.

პოსტი ორი ტიპის მკითხველისთვისაა: მათთვის, ვინც საკუთარ Pterodactyl პანელს უშვებს და Valheim-ს ამატებს, და მათთვის, ვინც Pterodactyl-ზე აგებული hosting-იდან Valheim სერვერს ქირაობს და უნდა გაიგოს, რას აკეთებს რეალურად Startup და Network ჩანართები.

როგორ უშვებს Pterodactyl Valheim სერვერს#

Pterodactyl-ს ორი ნახევარი აქვს. პანელი ვებ აპლიკაციაა, სადაც სერვერები, მომხმარებლები და პარამეტრები ცხოვრობს. Wings არის დემონი თითოეულ მანქანაზე (node-ზე), რომელიც Docker container-ებს ქმნის, უშვებს და აჩერებს, მათ კონსოლს გადასცემს და მათ ფაილებს აწვდის. თითო თამაშის სერვერი ერთი container-ია, რომლის მეხსიერების, CPU-სა და დისკის ლიმიტს პანელი ადგენს, და node-ზე მისი ფაილების volume-ით.

რას აკეთებს container, ამას egg განსაზღვრავს - JSON ფაილი, რომელიც ერთ თამაშს აღწერს. egg-ები nest-ებშია დაჯგუფებული. egg შეიცავს:

ნაწილირისთვის არის Valheim-ისთვის
Docker imageგარემო, რომელშიც სერვერი მუშაობს, ჩვეულებრივ SteamCMD-ის მქონე Debian ან Ubuntu image
Install scriptერთხელ ცალკე installer container-ში გადის: SteamCMD ჩამოტვირთავს აპს 896660
Startup commandvalheim_server.x86_64 ხაზი, მნიშვნელობების ნაცვლად ცვლადებით
Variablesსახელი, სამყარო, პაროლი, public და ყველაფერი, რასაც egg ხსნის
Stop command^C, რომელსაც Wings SIGINT-ად აქცევს
Done stringლოგის ხაზი, რომლითაც პანელი იგებს, რომ სერვერმა გაშვება დაასრულა

კარგი egg ნიშნავს, რომ პანელზე არავის უწევს იცოდეს SteamCMD-ის არსებობა. ცუდი - რომ სერვერი ყოველ გაშვებაზე თავს თავიდან აყენებს ან ყოველ გაჩერებაზე კვდება. Pterodactyl egg-ები თამაშის სერვერებისთვის ფორმატს ზოგადად განიხილავს; ეს პოსტი მხოლოდ იმას ეხება, რაც Valheim-ისთვის მნიშვნელოვანია. თუ თავად Pterodactyl შენთვის ახალია, Pterodactyl პანელის განმარტება ფონს იძლევა.

Valheim egg-ის მოძიება და იმპორტი#

Pterodactyl Valheim egg-ს არ აწვდის. GitHub-ზე community egg-ების რეპოზიტორიას - ადრე parkervcp/eggs, ახლა pelican-eggs ორგანიზაციის ქვეშ - Valheim-ის საქაღალდე აქვს, ცალკე egg-ებით vanilla-სთვის, BepInEx-ისთვის და Valheim Plus-ისთვის. გამოიყენე vanilla, თუ მოდები არ გჭირდება; ვარიანტები ქვემოთ განიხილება.

Pterodactyl 1.x პანელზე იმპორტისთვის:

  1. რეპოზიტორიიდან ჩამოტვირთე egg-ის .json ფაილი. წაიკითხე - ეს შენი სერვერის install script-ია.
  2. ადმინისტრატორის არეში გახსენი Nests, აირჩიე ან შექმენი nest („Valheim“ ან „Survival games“ nest მოწესრიგებულია) და გამოიყენე Import Egg.
  3. გახსენი იმპორტირებული egg და Docker image-ების სია, startup command და install script შეადარე იმას, რასაც ელოდები.
  4. შექმენი სერვერი ამ egg-ით. პანელი install script-ს გაუშვებს, შემდეგ სერვერი გასაშვებად მზადაა.

Installer container egg-ის სკრიპტს სერვერის volume-ით /mnt/server-ზე მიმაგრებულით უშვებს, გაშვებულ container-ში კი იგივე volume home დირექტორიაა, /home/container. პირველად დაყენებას რამდენიმე წუთი სჭირდება - Valheim-ის სერვერი დაახლოებით 2 GB-ია.

თუ Pelican-ს იყენებ, Pterodactyl-ის fork-ს, egg-ები მსგავსად შემოდის, მაგრამ პანელის სტრუქტურა განსხვავდება; იმპორტი სად არის, Pelican-ის დოკუმენტაციაში ნახე.

Startup ცვლადები და გამშვები ხაზი#

egg-ის startup command შაბლონია. ცვლადები {{NAME}} ფორმით იწერება და გაშვებისას თითოეული სერვერის მნიშვნელობებით იცვლება. გამარტივებული Valheim startup command ასე გამოიყურება - ცვლადების ზუსტი სახელები egg-ის ვერსიებს შორის განსხვავდება, ამიტომ შენი egg-ის გვერდზე ან სერვერის Startup ჩანართზე წაიკითხე:

bash
./valheim_server.x86_64 -nographics -batchmode -name "{{SERVER_NAME}}" \    -port {{SERVER_PORT}} -world "{{WORLD}}" -password "{{PASSWORD}}" \    -public {{PUBLIC_SERVER}}

რეალური egg-ები ამ ხაზამდე Valheim-ისთვის საჭირო გარემოს ამატებენ - LD_LIBRARY_PATH სერვერის linux64 საქაღალდეზე და SteamAppId=892970 - ან startup command-ში, ან Docker image-ის entrypoint-ში. რატომ არის ორივე საჭირო, SteamCMD-ის დაყენების გზამკვლევი განმარტავს.

{{SERVER_PORT}} egg-ის ცვლადი არ არის. მას Wings სერვერის primary allocation-ზე აყენებს, რის გამოც პორტი არასდროს ჩანს როგორც რედაქტირებადი ველი. სხვა ჩაშენებულ მნიშვნელობებს შორის არის SERVER_IP და SERVER_MEMORY.

ცვლადები, რომლებსაც Valheim egg ჩვეულებრივ ხსნის, როლის მიხედვით:

ცვლადირას შეესაბამებაშენიშვნები
Server name-nameჩანს community სიაში; პაროლს არ უნდა შეიცავდეს
World name-worldფაილის სახელი worlds_local-ში, გაფართოების გარეშე, რეგისტრზე მგრძნობიარე
Password-passwordმინიმუმ 5 სიმბოლო; სახელთან ან სამყაროსთან საერთო სიტყვა არ უნდა ჰქონდეს
Public-public1 სერვერს სიაში აჩვენებს, 0 მალავს
Auto update(entrypoint)ყოველ გაშვებაზე SteamCMD განახლებას უშვებს, თუ egg-ს აქვს
Extra argumentsემატება ბოლოსზოგ egg-ს აქვს თავისუფალი ტექსტის ველი ისეთი დროშებისთვის, როგორიცაა -crossplay

თითოეულ ცვლადს აქვს ვალიდაციის წესები, Laravel-ის სინტაქსით (მაგალითად required|string|min:5), და ორი დროშა: შეუძლიათ თუ არა მომხმარებლებს მისი ნახვა და შეუძლიათ თუ არა რედაქტირება. პანელის ადმინისტრატორი შენ წყვეტ, რომელი პარამეტრები ეკუთვნის მომხმარებელს. პაროლის მომხმარებლისთვის რედაქტირებად ველად გახდა min:5 წესით ticket-ების რაოდენობას ამცირებს; თავად startup command-ის დაბლოკილად დატოვება კი ბიბლიოთეკის გზის გაფუჭებას აჩერებს.

Valheim-ს კონფიგურაციის ფაილი არ აქვს, ამიტომ ის, რასაც egg არ ხსნის, egg-ის რედაქტირების გარეშე ვერ შეიცვლება. თუ შენს egg-ს crossplay-ის, სამყაროს მოდიფიკატორების ან შენახვის ინტერვალის ველი არ აქვს, ადმინისტრატორს შეუძლია მათთვის ცვლადები დაამატოს, ან startup command-ის ბოლოს ერთი თავისუფალი ტექსტის „additional arguments“ ცვლადი. დროშები და მათი ნაგულისხმევი მნიშვნელობები Valheim-ის გაშვების არგუმენტების ცნობარშია.

Allocation-ები: ორივე UDP პორტის სწორად გამოყოფა#

Pterodactyl-ში პორტი allocation-ია: IP-სა და პორტის წყვილი, რომელიც node-ზე იქმნება და ერთ სერვერს ენიჭება. Wings თითოეულ allocation-ს ერთდროულად TCP-ზეც და UDP-ზეც აქვეყნებს, ამიტომ პანელში პროტოკოლის პარამეტრი, რომელშიც შეცდომას დაუშვებ, არ არსებობს. არსებობს რაოდენობა, რომელშიც შეიძლება შეცდე.

Valheim თამაშის პორტსაც იკავებს და მის ზემოთ მდგომსაც. პირველს -port-ით ეუბნები; მეორე ავტომატურად მოჰყვება და ცალკე ვერ დაყენდება. ამიტომ Valheim სერვერს სჭირდება:

  1. Primary allocation თამაშის პორტზე, მაგალითად 2456. ეს ხდება SERVER_PORT.
  2. დამატებითი allocation უშუალოდ მომდევნო პორტზე, 2457, იმავე სერვერზე მიმაგრებული.

თუ მეორე allocation აკლია, სერვერი მაინც ირთვება და container-ის შიგნით 2457-ს მაინც იკავებს - მაგრამ გარედან მასთან ვერავინ მიაღწევს, რადგან Docker-მა ის არ გამოაქვეყნა. ჩვეულებრივი სიმპტომია სერვერი, რომელსაც მოთამაშეები IP-ით უერთდებიან, მაგრამ community სიაში არასოდეს ჩნდება, რადგან სია query პორტთან ლაპარაკობს. ამ სიმპტომის სხვა მიზეზები Valheim სერვერი სიაში არ ჩანს-შია.

ადმინისტრატორისთვის თანმიმდევრობა ასეთია: node-ის Allocation ჩანართზე დაამატე IP და დიაპაზონი, მაგალითად 2456-2465; სერვერის შექმნისას primary-დ აირჩიე 2456 და დამატებით allocation-ად დაამატე 2457. იმავე node-ზე მეორე Valheim სერვერისთვის დაიწყე 2458-დან, 2459 მის გვერდით. თითოეული სერვერის წყვილი თანმიმდევრული დატოვე - 2460-ზე allocation არაფერს აძლევს სერვერს, რომლის თამაშის პორტი 2458-ია.

node-ის საკუთარმა firewall-მაც უნდა გაუშვას ეს პორტები UDP-ზე, და მის წინ მდგარმა ნებისმიერმა cloud provider-ის firewall-მაც. ერთი ხაფანგი: Docker გამოქვეყნებული პორტებისთვის საკუთარ iptables წესებს წერს, და container-ებისკენ ტრაფიკი ufw-ის ჩვეულებრივ input წესებს არ გადის, ამიტომ ufw-ის წესების სია, რომელიც დახურულად გამოიყურება, შეიძლება არ იყოს დახურული, ხოლო ღია გამოიყურება - არა ის, რამაც რეალურად შეუშვა ტრაფიკი. გარედან გამოსცადე და წესების სიას ნუ ენდობი. პორტების არითმეტიკასა და ტესტირებას Valheim-ის პორტები 2456-2458 განმარტება მოიცავს.

Stop, done string და save-ები#

egg-ის კონფიგურაციაში ორი ხაზი წყვეტს, შეეწყობიან თუ არა პანელი და Valheim ერთმანეთს.

Stop command არის ის, რასაც პანელი აგზავნის, როცა ვინმე Stop-ს ან Restart-ს დააჭერს. უმეტეს თამაშში ეს კონსოლის ბრძანებაა, როგორიცაა stop ან quit. Valheim-ს stdin კონსოლი არ აქვს, ამიტომ მისი egg-ები ^C-ს იყენებენ, რომელსაც Wings ასე ხსნის: „გაუგზავნე პროცესს SIGINT“. ამ სიგნალს Valheim სუფთა გამორთვად აღიქვამს: ინახავს სამყაროს და გადის. თუ egg-ის stop command სხვაა, პანელი ელოდება, არაფერი ხდება და საბოლოოდ ვინმე Kill-ს აჭერს - რაც SIGKILL-ს აგზავნის და ბოლო შენახვის შემდეგ ყველაფერს კარგავს.

Done string არის სერვერის გამოტანის ხაზი, რომელსაც პანელი უთვალთვალებს, რათა სერვერი „starting“-დან „running“-ზე გადაიყვანოს. Valheim-ისთვის ის ჩვეულებრივ გაშვების ბოლოს ხაზია, მაგალითად ის, რომელიც აცხადებს, რომ თამაშის სერვერი Steam-ს დაუკავშირდა. თუ ის არასდროს ემთხვევა, სერვერი მუშაობს, მაგრამ სამუდამოდ „starting“-ში რჩება. რომელ ხაზებს და რა თანმიმდევრობით ბეჭდავს Valheim, Valheim სერვერის ლოგის ფაილის განმარტებაშია.

Valheim-ის ყველა სამყარო მეხსიერებაშია და ყოველ -saveinterval წამში იწერება (ნაგულისხმევად 1800). პანელის ღილაკები სწორად გამოყენებისას სუფთა შენახვას გაძლევს:

პანელის მოქმედებასიგნალიინახება თუ არა სამყარო
Stopegg-ის stop command (^C იძლევა SIGINT-ს)დიახ
RestartStop, შემდეგ startდიახ
KillSIGKILLარა
Container მეხსიერების ლიმიტს აღწევსბირთვი კლავსარა

Pterodactyl-ის upstream ნაგულისხმევი მეხსიერების ლიმიტზე მყოფ container-ს swap-ის საშუალებას აძლევს, გაჩერების ნაცვლად. ეს პროცესს ცოცხლად ინახავს სერვერის ნელი მუშაობის ფასად; ორივე შემთხვევაში მეხსიერება ისე გაზომე, რომ ლიმიტს არასდროს მიაღწიოს. რეალისტური ციფრები რამდენი RAM სჭირდება Valheim სერვერს-შია.

ფაილები: სად ცხოვრობს სამყარო ფაილ მენეჯერში#

ფაილ მენეჯერიც და SFTP-ც container-ის volume-ს აჩვენებს, რომელიც სერვერის თვალსაზრისით /home/container-ია. თამაში ამ საქაღალდეშია. Valheim-ის save დირექტორია, თუ egg -savedir-ს არ გადასცემს, Unity-ს ნაგულისხმევია home დირექტორიის ქვეშ:

code
/home/container/.config/unity3d/IronGate/Valheim/    worlds_local/Midgard.db    worlds_local/Midgard.fwl    adminlist.txt    bannedlist.txt    permittedlist.txt

ზოგი egg -savedir-ს სერვერის ძირში ხილულ საქაღალდეზე აყენებს, რომ ადვილი საპოვნელი იყოს; შეამოწმე შენი გამშვები ხაზი. წერტილით დაწყებულ საქაღალდეებს ფაილების სიაში ადვილად ვერ ამჩნევ, ამიტომ ადამიანები ზოგჯერ დაასკვნიან, რომ სამყარო გაქრა, სანამ ის .config-ში ზის.

ერთმოთამაშიანი სამყაროს ასატვირთად: გააჩერე სერვერი, ატვირთე როგორც .db, ისე .fwl worlds_local-ში, სამყაროს სახელის ცვლადს მიუთითე ფაილის სახელი გაფართოების გარეშე, შემდეგ გაუშვი და კონსოლში უყურე, როგორ იტვირთება სამყარო სახელით. SFTP-ით Wings ნაგულისხმევად პორტ 2022-ზე უსმენს და მომხმარებლის სახელი შენი პანელის მომხმარებლის სახელია, წერტილით სერვერის მოკლე ID-სთან შეერთებული; პანელი ორივეს სერვერის Settings გვერდზე აჩვენებს. სრული გზამკვლევი ლოკალური Valheim სამყაროს სერვერზე ატვირთვაშია.

პანელის backup-ები volume-ის არქივებია, ამიტომ save დირექტორიას შეიცავს. ადმინისტრატორებს შეუძლიათ გზების გამორიცხვა სერვერის ძირში .pteroignore ფაილით - თამაშის 2 GB ფაილების გამორიცხვა Valheim backup-ებს ზომის ნაწილამდე ამცირებს, რადგან SteamCMD მათ ყოველთვის თავიდან ჩამოტვირთავს.

BepInEx ვარიანტი და მოდები#

მოდებს სხვა თამაშის სერვერი არ სჭირდება; სჭირდება მისი გაშვების სხვა გზა. BepInEx Unity-ს doorstop loader-ით ებმება, რომელიც გარემოს ცვლადებით კონფიგურირდება, და BepInExPack-ის start_server_bepinex.sh მათ valheim_server.x86_64-ის გაშვებამდე აყენებს. vanilla egg binary-ს პირდაპირ უშვებს და BepInEx-ს არასდროს ტვირთავს, რამდენი მოდის ფაილიც არ უნდა ატვირთო.

community BepInEx egg ამას უმკლავდება: მისი install script სერვერთან ერთად Valheim-ის BepInExPack-ს ჩამოტვირთავს, startup კი doorstop ცვლადებს აყენებს. არსებული სერვერის მასზე გადაყვანას ადმინისტრატორი ადმინ არეში სერვერის Startup პარამეტრებში აკეთებს, egg-ის შეცვლით; შეამოწმე, იწვევს თუ არა egg-ის შეცვლა შენი პანელის ვერსიაზე reinstall-ს, და ჯერ backup გააკეთე.

BepInEx-ის ჩატვირთვის შემდეგ - მისი საკუთარი ხაზები კონსოლის დასაწყისში ჩნდება - მოდები .dll ფაილებია, რომლებიც BepInEx/plugins-ში ფაილ მენეჯერით ან SFTP-ით ეყრება, კონფიგურაციები კი პირველი გაშვების შემდეგ BepInEx/config-ში ჩნდება. Valheim Plus egg იგივენაირად მუშაობს, Valheim Plus-ით ჩაშენებულით; შეამოწმე, რომ მის მიერ ჩამოტვირთული build შენი თამაშის ვერსიას ემთხვევა, რადგან Valheim Plus რამდენიმე fork-ს გაივლის. წესები, რომელი მოდები სერვერზე მიდის, რომელი კლიენტზე და რომელი ორივეზე, Valheim-ის მოდები BepInEx-ით სერვერზე-შია. მოდიფიცირებულ სერვერზე ნებისმიერი auto-update ცვლადი გამორთე: Valheim-ის patch მოდების უმეტესობას ტეხავს, სანამ ისინი თავიდან არ აიგება.

Schedules: restart-ები და backup-ები Pterodactyl-ზე#

Pterodactyl-ის schedule-ები cron გამოსახულებას იღებს და ამოცანების სიას თანმიმდევრობით ასრულებს, თითოეულს არასავალდებულო დაყოვნებით: კონსოლის ბრძანების გაგზავნა, power action-ის შესრულება ან backup-ის შექმნა.

Valheim-ისთვის კონსოლის ბრძანების ამოცანა თითქმის უსარგებლოა - სერვერი stdin-იდან არაფერს კითხულობს და თამაშში გაფრთხილების broadcast-ის გზა არ არსებობს - ამიტომ schedule power action-ებისა და backup-ებისგან შედგება:

ამოცანამოქმედებადაყოვნება
1Power action: restart0
2Create backup120 წამი

გაუშვი ყოველკვირეულად წყნარ საათზე - 0 5 * * 1 არის ორშაბათი 05:00-ზე პანელის დროის სარტყელში. restart სერვერს სუფთად აჩერებს, ამიტომ ორი წუთის შემდეგ backup ახლად შენახულ სამყაროს იღებს. მეორე schedule, მხოლოდ backup ამოცანით, ყოველდღიური, დანარჩენ ექვს დღეს ფარავს. Restart-ის განრიგები, რომლებიც გვეხმარება განმარტავს, რატომ არის ყოველკვირეული Valheim-ისთვის საკმარისი, ხოლო cron გამოსახულებების განმარტება სინტაქსს მოიცავს.

RE:NODE-ზე#

RE:NODE Pterodactyl-სა და Wings-ზე საკუთარ პანელს უშვებს, ამიტომ ამ პოსტში ყველაფერი უშუალოდ ეხება. Valheim სერვერი ორივე UDP პორტით გამოყოფილი, crossplay-ით უკვე ჩართული და შენთვის გენერირებული პაროლით მოდის; Startup ჩანართი თამაშის ცვლადებს შეიცავს, Network ჩანართი კი ის ადგილია, სადაც პორტებს ამატებ ან შლი. მოდები ფაილ მენეჯერით ან SFTP-ით ეტვირთება - whitelist არ არსებობს. Backup სლოტები ყველა პაკეტშია და Schedules ჩანართი restart-ებსა და backup-ებს ზემოთ აღწერილი გზით უშვებს.

FAQ#

რატომ არ ჩანს ჩემი Valheim სერვერი Pterodactyl-ზე სერვერების სიაში?

ჩვეულებრივ იმიტომ, რომ გამოყოფილია მხოლოდ თამაშის პორტი. Valheim-ს Steam-ის query-ებისთვის მის ზემოთ მდგომი პორტიც სჭირდება, იმავე სერვერზე დამატებით allocation-ად მიმაგრებული. IP-ით შეერთებით დაადასტურე, რომ თავად სერვერი მუშაობს, შემდეგ დაამატე მეორე allocation და გადატვირთე.

უსაფრთხოა თუ არა პანელზე Stop სამყაროსთვის?

დიახ, თუ egg-ის stop command ^C-ია. მაშინ Wings SIGINT-ს აგზავნის და Valheim გასვლამდე ინახავს. Kill შენახვას გამოტოვებს. თუ Stop გაჭედილი ჩანს, Kill-ს წინ egg-ის stop command შეამოწმე.

შემიძლია crossplay-ის ჩართვა სტანდარტული egg-ით?

თუ egg crossplay-ის ან extra-arguments ცვლადს ხსნის, დიახ - დაამატე -crossplay. თუ არა, ადმინისტრატორმა egg-ში უნდა დაამატოს. მოთამაშეები მაშინ უერთდებიან ექვსციფრიანი კოდით, რომელიც ყოველ გაშვებაზე კონსოლში იბეჭდება.

სად ჩავდო Valheim-ის მოდები Pterodactyl სერვერზე?

BepInEx/plugins-ში, მაგრამ მხოლოდ BepInEx egg-ზე მყოფ სერვერზე. vanilla egg BepInEx-ს არასდროს ტვირთავს, ამიტომ ფაილები იგნორირდება. ჯერ egg შეცვალე, კონსოლში BepInEx-ის ხაზები დაადასტურე, შემდეგ ატვირთე მოდები.

რატომ ინსტალირდება ან ახლდება სერვერი ყოველ გაშვებაზე?

egg-ს ჩართული აქვს auto-update ცვლადი და მისი entrypoint გაშვებამდე SteamCMD-ს უშვებს. ეს vanilla სერვერებისთვის მოსახერხებელია და მოდიფიცირებულისთვის მავნე; თუ შენი egg ამას ხსნის, Startup ჩანართზე გამორთე.