From d9ab4d6d7a3adc82953420ed0e995ffc3ea21142 Mon Sep 17 00:00:00 2001 From: Marc Baloup Date: Fri, 7 Apr 2023 15:19:09 +0200 Subject: [PATCH] First commit --- Dockerfile | 23 +++++++++++++++++ Readme.md | 21 +++++++++++++++ build.sh | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ run.sh | 11 ++++++++ 4 files changed, 130 insertions(+) create mode 100644 Dockerfile create mode 100644 Readme.md create mode 100644 build.sh create mode 100644 run.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8c50439 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM eclipse-temurin:17-jdk + +ARG RUNNABLE_SERVER_JAR + +# create directories +WORKDIR /data +RUN mkdir bin bundle workdir + +# add executable files +ADD $RUNNABLE_SERVER_JAR bin/paper.jar +ADD run.sh bin/run.sh + +# download paper libraries and apply patches +RUN java -DbundlerRepoDir=/data/bundle -Dpaperclip.patchonly=true -jar /data/bin/paper.jar + +# configure max heap size +ENV MAXMEM=1024M + +EXPOSE 25565 +VOLUME /data/workdir + +WORKDIR /data/workdir +CMD ["sh", "/data/bin/run.sh"] diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..a0796bd --- /dev/null +++ b/Readme.md @@ -0,0 +1,21 @@ +Docker Compose Example + +```yml +version: "3" +services: + paper: + image: "cr.pandacube.fr/paper:(version)" + container_name: (server name) + stdin_open: true # docker run -i + tty: true # docker run -t + user: "1000:1000" # uid and gid of owner of working dir + environment: + - MAXMEM=2048M # Java max heap size + restart: always + volumes: + - .:/data/workdir + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "0.0.0.0:(port):25565" +``` \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..8781e21 --- /dev/null +++ b/build.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +URL_PROJECT='https://api.papermc.io/v2/projects/paper' + +echo "Getting Paper last build id for MC "$MC_VERSION"..." + +URL_VERSION=$URL_PROJECT'/versions/'$MC_VERSION + +# get paper build version +if ! curl -s $URL_VERSION -o version_infos.json; then + echo -e "Error: Can’t join API" + exit 1 +fi + + +if ! jq -r '.builds[-1]' -e < version_infos.json > build_number.txt; then + echo -e "API returned an error (probably MC_VERSION is not valid)" + exit 1 +fi + +PAPER_BUILD=`cat build_number.txt` +URL_BUILD=$URL_VERSION'/builds/'$PAPER_BUILD + + +DOWNLOAD_REOBF=$URL_BUILD'/downloads/paper-'$MC_VERSION'-'$PAPER_BUILD'.jar' + +# the runnable jar is actually paperclip +RUNNABLE_SERVER_JAR='Paper-'$MC_VERSION'-'$PAPER_BUILD'.jar' +#UBER_SERVER_JAR='Paper-uberjar-'$MC_VERSION'-'$PAPER_BUILD'.jar' + +echo "Downloadling Paperclip for Paper-"$MC_VERSION"-"$PAPER_BUILD"..." +echo "From "$DOWNLOAD_REOBF +echo "To "$RUNNABLE_SERVER_JAR +curl -o $RUNNABLE_SERVER_JAR $DOWNLOAD_REOBF + + +#java -version + +# run it to generate final jar, but not launching the actual server (-v option) + +#echo "Running Paperclip..." +#mkdir bundle +#java -DbundlerRepoDir=bundle -Dpaperclip.patchonly=true -jar $RUNNABLE_SERVER_JAR + + +# important that versions/ comes first. It will be extracted first, +# and following extraction will not override any file +#find bundle/versions/ bundle/libraries/ -type f -name '*.jar' > jars.txt + + +DOCKER_TAG="cr.pandacube.fr/paper:"$MC_VERSION"-"$PAPER_BUILD +echo "Building docker image with pre-downloaded and pre-patched files, with tag "$DOCKER_TAG +docker build --build-arg RUNNABLE_SERVER_JAR=$RUNNABLE_SERVER_JAR -t $DOCKER_TAG . + +#DOCKER_IMAGE_FILE="Paper-docker-"$MC_VERSION"-"$PAPER_BUILD".tar.gz" +#echo "Saving docker image to "$DOCKER_IMAGE_FILE +#docker save $DOCKER_TAG | gzip > $DOCKER_IMAGE_FILE + +echo "Pushing image to Pandacube’s container registry" +docker push $DOCKER_TAG + +#mkdir uberjar +#for jar in `cat jars.txt`; do +# unzip -d uberjar -nq $jar +#done + +#( +# cd uberjar +# # exclude some stuff, especially about jar signature and stuff +# rm -f META-INF/*.SF META-INF/*.DSA META-INF/*.RSA +# # create the uber jar +# zip -r '../'$UBER_SERVER_JAR * +#) + +#mvn install:install-file -Dfile=$UBER_SERVER_JAR -DgroupId=io.papermc.paper -DartifactId=paper -Dversion=$MC_VERSION-$PAPER_BUILD-SNAPSHOT -Dpackaging=jar diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..5fef4e8 --- /dev/null +++ b/run.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +exec java -Xmx$MAXMEM -XX:+UseG1GC -XX:+ParallelRefProcEnabled \ + -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions \ + -XX:G1ReservePercent=15 -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=30 \ + -XX:G1HeapRegionSize=8M -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 \ + -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 \ + -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 \ + -XX:MaxHeapFreeRatio=30 -XX:MinHeapFreeRatio=5 \ + -DbundlerRepoDir=/data/bundle \ + -jar /data/bin/paper.jar nogui