Zmiana javy w pterodactylu

Ozelot | 2019-12-18 21:22:03 UTC | #1

Witam.
Zwracam się z prośbą o pomoc w konfiguracji panelu Pterodactyl, a konkretniej zmianę javy z OpenJdk na Zulu lub ewentualnie Hotspot. Chcę to zrobić w celu lepszej optymalizacji serwera, a szczególnie mniejszego zużycia pamięci RAM.
Wracając do konkretów, wiem że w ustawieniach panelu, konkretniej w ustawieniach serwera znajduje się takie coś:

Z tego co się dowiedziałem, trzeba także zmienić coś w pliku dockera.
Czy ktoś kiedyś miał z tym do czynienia lub potrafi to zrobić i jest chętny się tą wiedzą podzielić? Liczę na dokładne wytłumaczenie, najlepiej krok po kroku.

Pozdrawiam i z góry dziękuję.


Timo | 2019-12-18 21:35:12 UTC | #2

W celu zmiany wersji Javy dla serwera na panelu Pterodactyl, najlepiej jest utworzyć własny obraz.
Istotne jest zachowanie domyślnych ustawień, takich jak domyślny folder startu, aby uniknąć zbędnego procesu tworzenia własnego Egga z niestandardowymi ustawieniami.

Aby stworzyć własny obraz, utwórz nowy katalog, w którym umieścisz wymagane pliki.
Pierwszy to Dockerfile. Przesyłam zawartość mojego, współpracującego z domyślnymi ustawieniami serwera w panelu.
W moim przypadku jest to jre 12 od hotspotu.

FROM        adoptopenjdk:12-jre-hotspot

RUN apt-get update -y \
 && apt-get install -y curl ca-certificates openssl git tar sqlite \
 && useradd -d /home/container -m container

USER container
ENV  USER=container HOME=/home/container

USER        container
ENV         USER=container HOME=/home/container

WORKDIR     /home/container

COPY        ./entrypoint.sh /entrypoint.sh

CMD         ["/bin/bash", "/entrypoint.sh"]

Następnie musisz utworzyć plik entrypoint.sh. U mnie wygląda w ten sposób:

#!/bin/bash
cd /home/container

# Output Current Java Version
java -version

export HEAP_SIZE=${SERVER_MEMORY}
export JAR_NAME=${SERVER_JARFILE}
export NURSERY_MINIMUM=$(($HEAP_SIZE / 2))
export NURSERY_MAXIMUM=$(($HEAP_SIZE * 4 / 5))

# Replace Startup Variables
MODIFIED_STARTUP=`eval echo $(echo ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g')`
echo ":/home/container$ ${MODIFIED_STARTUP}"

# Run the Server
eval ${MODIFIED_STARTUP}

Jest on lekko zmodyfikowany. Co prawda nie przeze mnie, stąd nie wiem w czym lepsze jest używanie widocznych w nim wartości zamiast domyślnych parametrów (typu {{SERVER_MEMORY}}), ale działa i nie narzekam ;)

Po utworzeniu wymaganych plików należy zbudować obraz.
Jest to proste. Przechodzisz do folderu z powyższymi plikami i wykonujesz komendę:
docker build -t mojajava:1 ., gdzie mojajava to wybrana przez siebię nazwa obrazu, a 1 to jego wersja.

Aby użyć obrazu dla serwera w panelu, po prostu wpisz jego nazwę w polu Docker Container Configuration, w z akładce Startup. W przedstawionym przykładzie, byłoby to mojajava:1.
Jeśli chcesz, możesz użyć dodanych parametrów z pliku entrypoint. Nie jest to natomiast wymagane.

To wszystko, po zapisaniu ustawień zrestartuj serwer. Panel zbuduje go na nowym obrazie.


JakubEG | 2019-12-21 21:17:34 UTC | #3

Właśnie chciałem zmienić tą wersję javy na podstawie tego poradnika ale nwm czy jestem tak głupi czy co ale nie rozumiem tego:
Przechodzisz do folderu z powyższymi plikami i wykonujesz komendę:docker build -t mojajava:1 ., gdzie mojajava to wybrana przez siebię nazwa obrazu, a 1 to jego wersja.
Jaka nazwa obrazu i jaka wersja?
Bo gdy wpisuję: docker build -t adoptopenjdk:12-jre-hotspot
Wyskakuje:
“docker build” requires exactly 1 argument.
See ‘docker build –help’.
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

Jeszcze pytanie, ten folder z tymi 2 plikami mogę utworzyć gdziekolwiek czy musi być w jakimś dokładnym miejscu?


Timo | 2019-12-21 21:24:21 UTC | #4

[quote=”JakubEG, post:3, topic:12995”]
Bo gdy wpisuję: docker build -t adoptopenjdk:12-jre-hotspot
[/quote]
Zauważ że jest tam jeszcze kropka ;)

[quote=”JakubEG, post:3, topic:12995”]
Jaka nazwa obrazu i jaka wersja?
[/quote]
Musisz mieć własną, bo budujesz swój obraz. Na przykład jakubeg-java:1

[quote=”JakubEG, post:3, topic:12995”]
Jeszcze pytanie, ten folder z tymi 2 plikami mogę utworzyć gdziekolwiek czy musi być w jakimś dokładnym miejscu?
[/quote]
Gdziekolwiek, tylko wykonuj docker build w tym folderze.


JakubEG | 2019-12-25 20:39:09 UTC | #5

Okej, ruszyło gdy wpisałem z kropką ‘’docker build -t adoptopenjdk:11-jre-hotspot .’‘
Lecz gdy dodałem do Image ‘’adoptopenjdk:11-jre-hotspot’’ to gdy uruchamiam serwer zawiesza się na:
[Pterodactyl Daemon] Rebuilding server container…
[Pterodactyl Daemon] New container built, rotating hamsters…
[Pterodactyl Daemon] Container is being initialized…
[Pterodactyl Daemon] Completed rebuild process for server. Server is now booting.
[Pterodactyl Daemon] Server marked as STARTING
[Pterodactyl Daemon] Checking size of server data directory…
[Pterodactyl Daemon] Disk Usage: 523M / 5000M
[Pterodactyl Daemon] Ensuring file permissions.
[Pterodactyl Daemon] Running server preflight.
[Pterodactyl Daemon] Starting server container.

Zrobiłem z nazwą jakubeg-java:1 i teraz podczas uruchamiania wyrzuca:
/entrypoint.sh: line 2: cd: $’/home/container\r’: No such file or directory

/entrypoint.sh: line 3: $’\r’: command not found

Unrecognized option: -version

Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.

/entrypoint.sh: line 6: $’\r’: command not found

/entrypoint.sh: line 9: 2500 / 2: syntax error: invalid arithmetic operator (error token is ” / 2”)

/entrypoint.sh: line 10: 2500 * 4 / 5: syntax error: invalid arithmetic operator (error token is ” * 4 / 5”)

:/home/container$ java -Xmx1G -Dterminal.jline=false -Dterminal.ansi=true -jar server.jar

/entrypoint.sh: line 15: $’\r’: command not found

Error: Unable to access jarfile server.jar


Timo | 2019-12-21 21:34:32 UTC | #6

Po pierwsze zbuduj obraz z własną nazwą, ta może mylić się z już istniejącą.

Edytowałeś to na Windowsie w notepad++?


JakubEG | 2019-12-21 21:34:37 UTC | #7

Tak w notepad++ na windowsie


Timo | 2019-12-21 21:35:25 UTC | #8

Spróbuj włączyć tą opcję i zapisać plik. Następnie zbuduj obraz na nowo.
image|634x72


JakubEG | 2019-12-21 21:36:20 UTC | #9

tylko plik entrypoint czy docker file też?


Timo | 2019-12-21 21:36:32 UTC | #10

Oba.


JakubEG | 2019-12-21 21:40:03 UTC | #11

Sukces, dziękuję i sorki że nie ogarniam pewnie prostych rzeczy…
Usunąć tamte posty aby nie było spamu?

A tamte nieudane obrazy nie będą np. uruchamiać się i żreć zasoby?, trzeba je jakoś usunąć?


Timo | 2019-12-21 21:43:34 UTC | #12

Nic nie usuwaj, w przyszłości ktoś może mieć podobny problem.

[quote=”JakubEG, post:11, topic:12995”]
A tamte nieudane obrazy nie będą np. uruchamiać się i żreć zasoby?
[/quote]
Będą zajmować po prostu miejsce na dysku.
Możesz sprawdzić ich listę komendą docker image ls, a niepotrzebne usunąć używając docker image rm <nazwa>.


JakubEG | 2019-12-21 21:46:10 UTC | #13

Dziękuję!


system | 2020-01-22 21:46:12 UTC | #14

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.