mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-17 15:13:55 +00:00
Compare commits
88 Commits
feat/cf-li
...
misc/rcon-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a465d759b8 | ||
|
|
75082daa1d | ||
|
|
b1d68a65aa | ||
|
|
11414c83c1 | ||
|
|
720006b445 | ||
|
|
9d2cd1475e | ||
|
|
acfd6fadf8 | ||
|
|
ba172b2aa9 | ||
|
|
e4859fb23a | ||
|
|
eb682118ff | ||
|
|
2fbc804f3e | ||
|
|
5bd6287f52 | ||
|
|
b6a8b95159 | ||
|
|
0d834dd992 | ||
|
|
0a5ac8aba6 | ||
|
|
37d2aebb1e | ||
|
|
d5d1592c38 | ||
|
|
dedacfb94e | ||
|
|
c6e970c8d2 | ||
|
|
fa56741869 | ||
|
|
2abae7462c | ||
|
|
a569d63cf3 | ||
|
|
e305782a8f | ||
|
|
24c352949c | ||
|
|
6ee414337a | ||
|
|
c2071e5038 | ||
|
|
02640e5414 | ||
|
|
ac806b756c | ||
|
|
605e2ea993 | ||
|
|
c9dd6dc72c | ||
|
|
d8bca85d55 | ||
|
|
3acc867f58 | ||
|
|
8463893168 | ||
|
|
5b79daa4a3 | ||
|
|
1fd1e15f3c | ||
|
|
37e08466ad | ||
|
|
1868cd05da | ||
|
|
8a7cfbfb3e | ||
|
|
e31a730d21 | ||
|
|
a36a75a790 | ||
|
|
07b10027af | ||
|
|
c72e23b4d7 | ||
|
|
5036ef5f2f | ||
|
|
37e956e517 | ||
|
|
36015d2b39 | ||
|
|
a3ac903dfe | ||
|
|
6e94f4234b | ||
|
|
9d8ab63ee5 | ||
|
|
cde239f033 | ||
|
|
8bc184cd18 | ||
|
|
3cdc86ef0b | ||
|
|
45f14512bb | ||
|
|
d402403876 | ||
|
|
9ebae54e6e | ||
|
|
19a8bcfb53 | ||
|
|
c700880bbe | ||
|
|
8c04dfd882 | ||
|
|
d8075916e3 | ||
|
|
1cf2783daf | ||
|
|
a5643cdeac | ||
|
|
12816373ea | ||
|
|
2eb66042ec | ||
|
|
446db809c7 | ||
|
|
d09d9d753a | ||
|
|
d622dbc2a9 | ||
|
|
0ad97c257a | ||
|
|
f84171dca2 | ||
|
|
0ba63777a3 | ||
|
|
1289fea1c6 | ||
|
|
e70b9600d1 | ||
|
|
6ede7e930c | ||
|
|
5416cedc1f | ||
|
|
c9a8fef25f | ||
|
|
8f1d3f1e45 | ||
|
|
b37383b37d | ||
|
|
c11d2a0ab2 | ||
|
|
85648d5916 | ||
|
|
3616847e8e | ||
|
|
e6cd7116b6 | ||
|
|
67b0074a9e | ||
|
|
a8900661f2 | ||
|
|
ae32ce0738 | ||
|
|
1370f58c26 | ||
|
|
89a6e1ad88 | ||
|
|
dc97022b98 | ||
|
|
190ecd3278 | ||
|
|
15016996e2 | ||
|
|
fd83920383 |
53
.github/workflows/build-multiarch.yml
vendored
53
.github/workflows/build-multiarch.yml
vendored
@@ -12,6 +12,7 @@ on:
|
||||
- "examples/**"
|
||||
- "notes/**"
|
||||
- "kustomize/**"
|
||||
- "images.json"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -29,6 +30,8 @@ jobs:
|
||||
- java17
|
||||
- java17-graalvm
|
||||
- java17-alpine
|
||||
- java16
|
||||
- java11
|
||||
- java8
|
||||
- java8-graalvm-ce
|
||||
- java8-openj9
|
||||
@@ -74,23 +77,41 @@ jobs:
|
||||
baseImage: eclipse-temurin:17-jre-alpine
|
||||
platforms: linux/amd64
|
||||
mcVersion: 1.20.4
|
||||
# JAVA 16
|
||||
- variant: java16
|
||||
baseImage: adoptopenjdk:16-jre-hotspot
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
mcVersion: 1.16.5
|
||||
# JAVA 11
|
||||
- variant: java11
|
||||
baseImage: adoptopenjdk:11-jre-hotspot
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
mcVersion: 1.16.4
|
||||
# JAVA 8: NOTE: Unable to go past 8u312 because of Forge dependencies
|
||||
- variant: java8
|
||||
baseImage: eclipse-temurin:8u312-b07-jre-focal
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
# mcHelperVersion: 1.46.0
|
||||
- variant: java8-graalvm-ce
|
||||
baseImage: ghcr.io/graalvm/graalvm-ce:java8
|
||||
platforms: linux/amd64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
# mcHelperVersion: 1.46.0
|
||||
- variant: java8-jdk
|
||||
baseImage: eclipse-temurin:8u312-b07-jdk-focal
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
# mcHelperVersion: 1.46.0
|
||||
- variant: java8-openj9
|
||||
baseImage: ibm-semeru-runtimes:open-8u312-b07-jre
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
# mcHelperVersion: 1.46.0
|
||||
env:
|
||||
IMAGE_TO_TEST: "${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}"
|
||||
HAS_IMAGE_REPO_ACCESS: ${{ secrets.DOCKER_USER != '' && secrets.DOCKER_PASSWORD != '' }}
|
||||
@@ -105,7 +126,7 @@ jobs:
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5.7.0
|
||||
uses: docker/metadata-action@v5.8.0
|
||||
with:
|
||||
# NOTE for forks: if your Docker Hub organization doesn't match your Github repo's,
|
||||
# then the use of ${{ github.repository_owner }} will need to be replaced.
|
||||
@@ -113,16 +134,18 @@ jobs:
|
||||
${{ github.repository_owner }}/minecraft-server
|
||||
ghcr.io/${{ github.repository_owner }}/minecraft-server
|
||||
tags: |
|
||||
# For the "main" variant, it gets the tag as-is, without suffix
|
||||
type=ref,event=tag,enable=${{ matrix.variant == env.MAIN_VARIANT }}
|
||||
# and each variant (including main one) gets the tag with the variant suffix, such as 2023.1.1-java17
|
||||
type=ref,event=tag,suffix=-${{ matrix.variant }}
|
||||
# Apply the variant as a moving tag for most recent commit per variant
|
||||
type=raw,value=${{ matrix.variant }},enable=${{ github.ref_name == github.event.repository.default_branch }}
|
||||
# For the "main" variant, it gets the tag as-is
|
||||
type=pep440,pattern={{version}},enable=${{ matrix.variant == env.MAIN_VARIANT }}
|
||||
# ...and all variants (including main one) get the tag with the variant suffix, such as 2023.1.1-java17
|
||||
type=pep440,pattern={{version}},suffix=-${{ matrix.variant }}
|
||||
# latest tag gets a moving 'stable' image tag applied to the main variant
|
||||
type=pep440,pattern=stable,enable=${{ matrix.variant == env.MAIN_VARIANT }}
|
||||
# ...and qualified stable for all variants
|
||||
type=pep440,pattern=stable,suffix=-${{ matrix.variant }}
|
||||
# for building test/* branch images
|
||||
type=ref,event=branch,suffix=-${{ matrix.variant }},enable=${{ github.ref_name != github.event.repository.default_branch }}
|
||||
# latest repo tag gets a moving 'stable' image tag applied to the main variant
|
||||
type=raw,value=stable,enable=${{ github.ref_type == 'tag' && matrix.variant == env.MAIN_VARIANT }}
|
||||
# apply the variant as a moving tag for most recent commit per variant
|
||||
type=raw,value=${{ matrix.variant }},enable=${{ github.ref_name == github.event.repository.default_branch }}
|
||||
# for backward compatibility with users referencing java8-multiarch, this will set an extra label on java8
|
||||
type=raw,value=java8-multiarch,enable=${{ matrix.variant == 'java8' && github.ref_name == github.event.repository.default_branch }}
|
||||
# NOTE this identifies which variant will be published as "latest", which isn't
|
||||
@@ -133,13 +156,13 @@ jobs:
|
||||
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
|
||||
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.10.0
|
||||
uses: docker/setup-buildx-action@v3.11.1
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3.6.0
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v6.16.0
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
with:
|
||||
platforms: linux/amd64
|
||||
tags: ${{ env.IMAGE_TO_TEST }}
|
||||
@@ -150,6 +173,7 @@ jobs:
|
||||
push: false
|
||||
build-args: |
|
||||
BASE_IMAGE=${{ matrix.baseImage }}
|
||||
${{ matrix.mcHelperVersion && format('MC_HELPER_VERSION={0}', matrix.mcHelperVersion) }}
|
||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||
# no cache-to to avoid cross-cache update from next build step
|
||||
|
||||
@@ -162,14 +186,14 @@ jobs:
|
||||
tests/test.sh
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v3.4.0
|
||||
uses: docker/login-action@v3.5.0
|
||||
if: env.HAS_IMAGE_REPO_ACCESS
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USER }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3.4.0
|
||||
uses: docker/login-action@v3.5.0
|
||||
if: env.HAS_IMAGE_REPO_ACCESS
|
||||
with:
|
||||
registry: ghcr.io
|
||||
@@ -177,7 +201,7 @@ jobs:
|
||||
password: ${{ github.token }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6.16.0
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
if: github.actor == github.repository_owner
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
@@ -204,5 +228,6 @@ jobs:
|
||||
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
|
||||
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
|
||||
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
||||
${{ matrix.mcHelperVersion && format('MC_HELPER_VERSION={0}', matrix.mcHelperVersion) }}
|
||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||
cache-to: type=gha,mode=max,scope=${{ matrix.variant }}
|
||||
|
||||
2
.github/workflows/discord.yml
vendored
2
.github/workflows/discord.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
steps:
|
||||
- name: on-publish
|
||||
if: github.event_name == 'release' && github.event.action == 'published'
|
||||
uses: SethCohen/github-releases-to-discord@v1.16.2
|
||||
uses: SethCohen/github-releases-to-discord@v1.19.0
|
||||
with:
|
||||
webhook_url: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
- name: on-success
|
||||
|
||||
11
.github/workflows/verify-pr.yml
vendored
11
.github/workflows/verify-pr.yml
vendored
@@ -11,6 +11,7 @@ on:
|
||||
- "kustomize/**"
|
||||
- "docker-compose*.yml"
|
||||
- "mkdocs.yml"
|
||||
- "images.json"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -42,6 +43,8 @@ jobs:
|
||||
baseImage: eclipse-temurin:8u312-b07-jre-focal
|
||||
platforms: linux/amd64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
mcHelperVersion: 1.42.1
|
||||
env:
|
||||
IMAGE_TO_TEST: ${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}
|
||||
runs-on: ubuntu-22.04
|
||||
@@ -53,20 +56,21 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.10.0
|
||||
uses: docker/setup-buildx-action@v3.11.1
|
||||
|
||||
- name: Confirm multi-arch build
|
||||
uses: docker/build-push-action@v6.16.0
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
# ensure latest base image is used
|
||||
pull: true
|
||||
build-args: |
|
||||
BASE_IMAGE=${{ matrix.baseImage }}
|
||||
${{ matrix.mcHelperVersion && format('MC_HELPER_VERSION={0}', matrix.mcHelperVersion) }}
|
||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v6.16.0
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
with:
|
||||
# Only build single platform since loading multi-arch image into daemon fails with
|
||||
# "docker exporter does not currently support exporting manifest lists"
|
||||
@@ -79,6 +83,7 @@ jobs:
|
||||
push: false
|
||||
build-args: |
|
||||
BASE_IMAGE=${{ matrix.baseImage }}
|
||||
${{ matrix.mcHelperVersion && format('MC_HELPER_VERSION={0}', matrix.mcHelperVersion) }}
|
||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||
|
||||
- name: Run tests
|
||||
|
||||
17
Dockerfile
17
Dockerfile
@@ -19,38 +19,36 @@ RUN --mount=target=/build,source=build \
|
||||
RUN --mount=target=/build,source=build \
|
||||
/build/run.sh setup-user
|
||||
|
||||
COPY --chmod=644 files/sudoers* /etc/sudoers.d
|
||||
|
||||
EXPOSE 25565
|
||||
|
||||
ARG APPS_REV=1
|
||||
ARG GITHUB_BASEURL=https://github.com
|
||||
|
||||
ARG EASY_ADD_VERSION=0.8.10
|
||||
ARG EASY_ADD_VERSION=0.8.11
|
||||
ADD ${GITHUB_BASEURL}/itzg/easy-add/releases/download/${EASY_ADD_VERSION}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
|
||||
RUN chmod +x /usr/bin/easy-add
|
||||
|
||||
ARG RESTIFY_VERSION=1.7.9
|
||||
ARG RESTIFY_VERSION=1.7.10
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
ARG RCON_CLI_VERSION=1.7.0
|
||||
ARG RCON_CLI_VERSION=1.7.2
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=${RCON_CLI_VERSION} --var app=rcon-cli --file {{.app}} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
ARG MC_MONITOR_VERSION=0.15.5
|
||||
ARG MC_MONITOR_VERSION=0.15.6
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
ARG MC_SERVER_RUNNER_VERSION=1.12.6
|
||||
ARG MC_SERVER_RUNNER_VERSION=1.13.1
|
||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
ARG MC_HELPER_VERSION=1.41.9
|
||||
ARG MC_HELPER_VERSION=1.48.10
|
||||
ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
|
||||
# used for cache busting local copy of mc-image-helper
|
||||
ARG MC_HELPER_REV=1
|
||||
@@ -67,8 +65,7 @@ STOPSIGNAL SIGTERM
|
||||
ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000 LC_ALL=en_US.UTF-8
|
||||
|
||||
COPY --chmod=755 scripts/start* /
|
||||
COPY --chmod=755 bin/ /usr/local/bin/
|
||||
COPY --chmod=755 bin/mc-health /health.sh
|
||||
COPY --chmod=755 files/shims/ /usr/local/bin/
|
||||
COPY --chmod=755 files/* /image/
|
||||
COPY --chmod=755 files/auto /auto
|
||||
|
||||
|
||||
@@ -4,16 +4,18 @@ export TARGET
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
os_major_version=$(awk -F'[= ."]+' '/^VERSION_ID=/{ print $2 }' /etc/os-release)
|
||||
|
||||
# Install and configure dnf
|
||||
microdnf install dnf -y
|
||||
dnf install 'dnf-command(config-manager)' -y
|
||||
dnf config-manager --set-enabled ol8_codeready_builder
|
||||
dnf config-manager --set-enabled ol${os_major_version}_codeready_builder
|
||||
|
||||
# Add EPEL repository
|
||||
tee /etc/yum.repos.d/ol8-epel.repo <<EOF
|
||||
[ol8_developer_EPEL]
|
||||
tee /etc/yum.repos.d/ol${os_major_version}-epel.repo <<EOF
|
||||
[ol${os_major_version}_developer_EPEL]
|
||||
name=Oracle Linux \$releasever EPEL (\$basearch)
|
||||
baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/developer/EPEL/\$basearch/
|
||||
baseurl=https://yum.oracle.com/repo/OracleLinux/OL${os_major_version}/developer/EPEL/\$basearch/
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
|
||||
gpgcheck=1
|
||||
enabled=1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM python:3.9
|
||||
FROM python:3.11
|
||||
|
||||
RUN pip install --upgrade pip
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ _The `-i` is not needed in this case._
|
||||
If rcon is disabled you can send commands by passing them as arguments to the packaged `mc-send-to-console` script after setting the env var `CREATE_CONSOLE_IN_PIPE` to "true". For example, a player can be op'ed in the container `mc` with:
|
||||
|
||||
```shell
|
||||
docker exec mc mc-send-to-console op player
|
||||
docker exec --user 1000 mc mc-send-to-console op player
|
||||
| |
|
||||
+- container name +- Minecraft commands start here
|
||||
```
|
||||
@@ -50,9 +50,17 @@ In order to attach and interact with the Minecraft server make sure to enable TT
|
||||
tty: true
|
||||
```
|
||||
|
||||
With that you can attach and interact at any time using
|
||||
With that you can attach and interact at any time using the following, replacing the `{...}` placeholders.
|
||||
|
||||
docker attach mc
|
||||
...when container is created with `docker run`
|
||||
```
|
||||
docker attach {container name or ID}
|
||||
```
|
||||
|
||||
...or when declared using a compose file
|
||||
```
|
||||
docker compose attach {service name}
|
||||
```
|
||||
|
||||
and then Control-p Control-q to **detach**.
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ By default, the image declares an initial and maximum Java memory-heap limit of
|
||||
- `INIT_MEMORY`: independently sets the initial heap size
|
||||
- `MAX_MEMORY`: independently sets the max heap size
|
||||
|
||||
The values of all three are passed directly to the JVM and support format/units as `<size>[g|G|m|M|k|K]`.
|
||||
The values of all three are passed directly to the JVM and support format/units as `<size>[g|G|m|M|k|K]`.
|
||||
|
||||
!!! example "Using docker run"
|
||||
|
||||
|
||||
```
|
||||
-e MEMORY=2G
|
||||
```
|
||||
@@ -23,7 +23,7 @@ The values of all three are passed directly to the JVM and support format/units
|
||||
```
|
||||
|
||||
!!! example "Using compose file"
|
||||
|
||||
|
||||
```
|
||||
environment:
|
||||
MEMORY: 2G
|
||||
@@ -48,7 +48,7 @@ To let the JVM calculate the heap size from the container declared memory limit,
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
memory: 4G
|
||||
```
|
||||
|
||||
!!! important
|
||||
@@ -68,7 +68,7 @@ docker run ... -e JVM_OPTS="-someJVMOption someJVMOptionValue" ...
|
||||
```yaml
|
||||
environment:
|
||||
- EULA=true
|
||||
- JVM_OPTS=-someJVMOption someJVMOptionValue
|
||||
- JVM_OPTS=-someJVMOption someJVMOptionValue
|
||||
```
|
||||
|
||||
Using object syntax is recommended and more intuitive:
|
||||
@@ -112,7 +112,7 @@ If needing to map to a different port, then also set the environment variable `J
|
||||
!!! example
|
||||
|
||||
With a compose file:
|
||||
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
ENABLE_JMX: true
|
||||
@@ -131,3 +131,13 @@ The set of flags documented there can be added using
|
||||
-e USE_AIKAR_FLAGS=true
|
||||
|
||||
When `MEMORY` is greater than or equal to 12G, then the Aikar flags will be adjusted according to the article.
|
||||
|
||||
## Enable MeowIce's Flags
|
||||
|
||||
[MeowIce has created an updated set of JVM flags](https://github.com/MeowIce/meowice-flags?tab=readme-ov-file#why-would-i-have-to-switch-) based on Aikar's flags but with support for optimizations for Java 17 and above
|
||||
|
||||
The set of flags documented there can be added using
|
||||
|
||||
-e USE_MEOWICE_FLAGS=true
|
||||
|
||||
There is an optional `USE_MEOWICE_GRAALVM_FLAGS` variable to enable GraalVM specific optimizations, defaults to `TRUE` if USE_MEOWICE_GRAALVM_FLAGS is `TRUE`
|
||||
|
||||
@@ -24,14 +24,9 @@ docker run -d -v /path/on/host:/data \
|
||||
|
||||
## Running as alternate user/group ID
|
||||
|
||||
By default, the container will switch to user ID 1000 and group ID 1000;
|
||||
however, you can override those values by setting `UID` and/or `GID` as environmental entries, during the `docker run` command.
|
||||
By default, the container will switch to and run the Minecraft server as user ID 1000 and group ID 1000; however, that can be changed by setting the environment variables `UID` and `GID`.
|
||||
|
||||
-e UID=1234
|
||||
-e GID=1234
|
||||
|
||||
The container will also skip user switching if the `--user`/`-u` argument
|
||||
is passed to `docker run`.
|
||||
The startup will also skip user switching if the `--user`/`-u` argument is passed to `docker run` or `user` is set on the compose service.
|
||||
|
||||
## Extra Arguments
|
||||
|
||||
@@ -112,11 +107,7 @@ such as:
|
||||
|
||||
## HTTP Proxy
|
||||
|
||||
You may configure the use of an HTTP/HTTPS proxy by passing the proxy's URL via the `PROXY`
|
||||
environment variable. In [the example compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-proxied.yml) it references
|
||||
a companion squid proxy by setting the equivalent of
|
||||
|
||||
-e PROXY=proxy:3128
|
||||
You may configure the use of an HTTP/HTTPS proxy by passing the proxy's "host:port" via the environment variable `PROXY`. In [the example compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-proxied.yml) it references a Squid proxy. The host and port can be separately passed via the environment variables `PROXY_HOST` and `PROXY_PORT`. A `|` delimited list of hosts to exclude from proxying can be passed via `PROXY_NON_PROXY_HOSTS`.
|
||||
|
||||
## Using "noconsole" option
|
||||
|
||||
|
||||
@@ -84,9 +84,19 @@ To produce a multi-line MOTD, embed a newline character as `\n` in the string, s
|
||||
# MOTD: "line one\nline two"
|
||||
```
|
||||
|
||||
!!! tip
|
||||
The following example combines a multi-line MOTD with [placeholders](#placeholders) from the latest version of the installed modpack:
|
||||
|
||||
You can also embed configured and resolved environment variables using [placeholders](#placeholders).
|
||||
!!! example
|
||||
|
||||
```yaml
|
||||
MOD_PLATFORM: AUTO_CURSEFORGE
|
||||
CF_SLUG: craftoria
|
||||
MOTD: |
|
||||
A %TYPE% server on %VERSION%
|
||||
running %MODPACK_NAME% %MODPACK_VERSION%
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Difficulty
|
||||
|
||||
@@ -246,125 +256,26 @@ By default, the server listens for RCON on port 25575 within the container. It c
|
||||
|
||||
### Query
|
||||
|
||||
Enabling this will enable the gamespy query protocol.
|
||||
By default the query port will be `25565` (UDP) but can easily be changed with the `QUERY_PORT` variable.
|
||||
|
||||
docker run -d -e ENABLE_QUERY=true
|
||||
|
||||
### Max players
|
||||
|
||||
By default max players is 20, you can increase this with the `MAX_PLAYERS` variable.
|
||||
|
||||
docker run -d -e MAX_PLAYERS=50
|
||||
|
||||
### Max world size
|
||||
|
||||
This sets the maximum possible size in blocks, expressed as a radius, that the world border can obtain.
|
||||
|
||||
docker run -d -e MAX_WORLD_SIZE=10000
|
||||
|
||||
### Allow Nether
|
||||
|
||||
Allows players to travel to the Nether.
|
||||
|
||||
docker run -d -e ALLOW_NETHER=true
|
||||
|
||||
### Announce Player Achievements
|
||||
|
||||
Allows server to announce when a player gets an achievement.
|
||||
|
||||
docker run -d -e ANNOUNCE_PLAYER_ACHIEVEMENTS=true
|
||||
|
||||
### Enable Command Block
|
||||
|
||||
Enables command blocks
|
||||
|
||||
docker run -d -e ENABLE_COMMAND_BLOCK=true
|
||||
|
||||
### Force Gamemode
|
||||
|
||||
Force players to join in the default game mode.
|
||||
|
||||
- false - Players will join in the gamemode they left in.
|
||||
- true - Players will always join in the default gamemode.
|
||||
|
||||
`docker run -d -e FORCE_GAMEMODE=false`
|
||||
|
||||
### Generate Structures
|
||||
|
||||
Defines whether structures (such as villages) will be generated.
|
||||
|
||||
- false - Structures will not be generated in new chunks.
|
||||
- true - Structures will be generated in new chunks.
|
||||
|
||||
`docker run -d -e GENERATE_STRUCTURES=true`
|
||||
|
||||
### Hardcore
|
||||
|
||||
If set to true, players will be set to spectator mode if they die.
|
||||
|
||||
docker run -d -e HARDCORE=false
|
||||
|
||||
### Snooper
|
||||
|
||||
If set to false, the server will not send data to snoop.minecraft.net server.
|
||||
|
||||
docker run -d -e SNOOPER_ENABLED=false
|
||||
|
||||
### Max Build Height
|
||||
|
||||
The maximum height in which building is allowed.
|
||||
Terrain may still naturally generate above a low height limit.
|
||||
|
||||
docker run -d -e MAX_BUILD_HEIGHT=256
|
||||
|
||||
### Max Tick Time
|
||||
|
||||
The maximum number of milliseconds a single tick may take before the server watchdog stops the server with the message, A single server tick took 60.00 seconds (should be max 0.05); Considering it to be crashed, server will forcibly shutdown. Once this criteria is met, it calls System.exit(1).
|
||||
Setting this to -1 will disable watchdog entirely
|
||||
|
||||
docker run -d -e MAX_TICK_TIME=60000
|
||||
|
||||
### Spawn Animals
|
||||
|
||||
Determines if animals will be able to spawn.
|
||||
|
||||
docker run -d -e SPAWN_ANIMALS=true
|
||||
|
||||
### Spawn Monsters
|
||||
|
||||
Determines if monsters will be spawned.
|
||||
|
||||
docker run -d -e SPAWN_MONSTERS=true
|
||||
|
||||
### Spawn NPCs
|
||||
|
||||
Determines if villagers will be spawned.
|
||||
|
||||
docker run -d -e SPAWN_NPCS=true
|
||||
|
||||
### Set spawn protection
|
||||
|
||||
Sets the area that non-ops can not edit (0 to disable)
|
||||
|
||||
docker run -d -e SPAWN_PROTECTION=0
|
||||
|
||||
### View Distance
|
||||
|
||||
Sets the amount of world data the server sends the client, measured in chunks in each direction of the player (radius, not diameter).
|
||||
It determines the server-side viewing distance.
|
||||
|
||||
docker run -d -e VIEW_DISTANCE=10
|
||||
Set the environment variable `ENABLE_QUERY` to "true" to enable the gamespy query protocol. Maps to the server property [enable-query](https://minecraft.wiki/w/Server.properties#enable-query). By default, the query port will be `25565` (UDP) but can be changed with the `QUERY_PORT` environment variable.
|
||||
|
||||
### Level Seed
|
||||
|
||||
If you want to create the Minecraft level with a specific seed, use `SEED`, such as
|
||||
|
||||
-e SEED=1785852800490497919
|
||||
If you want to create the Minecraft level with a specific seed, set the environment variable `SEED`, which maps to the [level-seed](https://minecraft.wiki/w/Server.properties#level-seed) property.
|
||||
|
||||
If using a negative value for the seed, make sure to quote the value such as:
|
||||
|
||||
!!! example "Using docker run"
|
||||
|
||||
```
|
||||
-e SEED="-1785852800490497919"
|
||||
```
|
||||
|
||||
!!! example "Using compose"
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
SEED: "-1785852800490497919"
|
||||
```
|
||||
|
||||
### Game Mode
|
||||
|
||||
@@ -382,13 +293,6 @@ For example:
|
||||
|
||||
docker run -d -e MODE=creative ...
|
||||
|
||||
### PVP Mode
|
||||
|
||||
By default, servers are created with player-vs-player (PVP) mode enabled. You can disable this with the `PVP`
|
||||
environment variable set to `false`, such as
|
||||
|
||||
docker run -d -e PVP=false ...
|
||||
|
||||
### Level Type and Generator Settings
|
||||
|
||||
By default, a standard world is generated with hills, valleys, water, etc. A different level type can
|
||||
@@ -396,7 +300,7 @@ be configured by setting `LEVEL_TYPE` to [an expected type listed here](https://
|
||||
|
||||
For some of the level types, `GENERATOR_SETTINGS` can be used to further customize the world generation.
|
||||
|
||||
To configure the `GENERATOR_SEETINGS` you need to add the appropriate `GeneratorOptions` JSON configuration. In the case of a superflat world, you may omit the `flat_world_options`.
|
||||
To configure the `GENERATOR_SETTINGS` you need to add the appropriate `GeneratorOptions` JSON configuration. In the case of a superflat world, you may omit the `flat_world_options`.
|
||||
|
||||
The layers are applied from -64 and up and are added in the order of the list
|
||||
|
||||
@@ -408,29 +312,28 @@ Example for a superflat world:
|
||||
- Desert biome
|
||||
|
||||
```yaml
|
||||
LEVEL_TYPE: FLAT
|
||||
GENERATOR_SETTINGS: >-4
|
||||
{
|
||||
"layers": [
|
||||
{
|
||||
"block": "minecraft:bedrock",
|
||||
"height": 1
|
||||
},
|
||||
{
|
||||
"block": "minecraft:stone",
|
||||
"height": 2
|
||||
},
|
||||
{
|
||||
"block": "minecraft:sandstone",
|
||||
"height": 15
|
||||
}
|
||||
],
|
||||
"biome": "minecraft:desert"
|
||||
}
|
||||
|
||||
|
||||
environment:
|
||||
LEVEL_TYPE: FLAT
|
||||
GENERATOR_SETTINGS: >-
|
||||
{
|
||||
"layers": [
|
||||
{
|
||||
"block": "minecraft:bedrock",
|
||||
"height": 1
|
||||
},
|
||||
{
|
||||
"block": "minecraft:stone",
|
||||
"height": 2
|
||||
},
|
||||
{
|
||||
"block": "minecraft:sandstone",
|
||||
"height": 15
|
||||
}
|
||||
],
|
||||
"biome": "minecraft:desert"
|
||||
}
|
||||
```
|
||||
For more details, check the [official wiki](https://minecraft.wiki/w/Java_Edition_level_format#generatorOptions_tag_format).
|
||||
For more details, refer to the Minecraft Wiki sections for [Superflat Multiplayer](https://minecraft.wiki/w/Superflat#Multiplayer) and [generator options tag format](https://minecraft.wiki/w/Java_Edition_level_format#generatorOptions_tag_format).
|
||||
|
||||
### Custom Server Resource Pack
|
||||
|
||||
@@ -452,31 +355,24 @@ where the default is "world":
|
||||
|
||||
> **INFO** Refer to the [data directory](../data-directory.md) section for a visual description of where the `$LEVEL` directory is situated.
|
||||
|
||||
### Online mode
|
||||
|
||||
By default, server checks connecting players against Minecraft's account database. If you want to create an offline server or your server is not connected to the internet, you can disable the server to try connecting to minecraft.net to authenticate players with environment variable `ONLINE_MODE`, like this
|
||||
|
||||
docker run -d -e ONLINE_MODE=FALSE ...
|
||||
|
||||
### Allow flight
|
||||
|
||||
Allows users to use flight on your server while in Survival mode, if they have a mod that provides flight installed.
|
||||
|
||||
-e ALLOW_FLIGHT=TRUE|FALSE
|
||||
|
||||
### Server name
|
||||
|
||||
The server name (e.g. for bungeecord) can be set like:
|
||||
|
||||
docker run -d -e SERVER_NAME=MyServer ...
|
||||
|
||||
### Server port
|
||||
|
||||
> **WARNING:** only change this value if you know what you're doing. It is only needed when using host networking and it is rare that host networking should be used. Use `-p` port mappings instead.
|
||||
> **WARNING:** only change this value if you know what you're doing. It only needs to be changed when using host-networking and it is rare that host networking should be used. Use `-p` port mappings instead.
|
||||
|
||||
If you must, the server port can be set like:
|
||||
|
||||
!!! example "Using docker run"
|
||||
|
||||
```
|
||||
docker run -d -e SERVER_PORT=25566 ...
|
||||
```
|
||||
|
||||
!!! example "Using compose"
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
SERVER_PORT: 25566
|
||||
```
|
||||
|
||||
**however**, be sure to change your port mapping accordingly and be prepared for some features to break.
|
||||
|
||||
@@ -500,26 +396,43 @@ When using `docker run` from a bash shell, the entries must be quoted with the `
|
||||
|
||||
### Other server property mappings
|
||||
|
||||
| Environment Variable | Server Property |
|
||||
|-----------------------------------|-----------------------------------|
|
||||
| BROADCAST_CONSOLE_TO_OPS | broadcast-console-to-ops |
|
||||
| BROADCAST_RCON_TO_OPS | broadcast-rcon-to-ops |
|
||||
| ENABLE_STATUS | enable-status |
|
||||
| ENFORCE_SECURE_PROFILE | enforce-secure-profile |
|
||||
| ENTITY_BROADCAST_RANGE_PERCENTAGE | entity-broadcast-range-percentage |
|
||||
| FUNCTION_PERMISSION_LEVEL | function-permission-level |
|
||||
| NETWORK_COMPRESSION_THRESHOLD | network-compression-threshold |
|
||||
| OP_PERMISSION_LEVEL | op-permission-level |
|
||||
| PLAYER_IDLE_TIMEOUT | player-idle-timeout |
|
||||
| PREVENT_PROXY_CONNECTIONS | prevent-proxy-connections |
|
||||
| SIMULATION_DISTANCE | simulation-distance |
|
||||
| SYNC_CHUNK_WRITES | sync-chunk-writes |
|
||||
| USE_NATIVE_TRANSPORT | use-native-transport |
|
||||
| HIDE_ONLINE_PLAYERS | hide-online-players |
|
||||
| RESOURCE_PACK_ID | resource-pack-id |
|
||||
| RESOURCE_PACK_PROMPT | resource-pack-prompt |
|
||||
| MAX_CHAINED_NEIGHBOR_UPDATES | max-chained-neighbor-updates |
|
||||
| LOG_IPS | log-ips |
|
||||
| REGION_FILE_COMPRESSION | region-file-compression |
|
||||
| BUG_REPORT_LINK | bug-report-link |
|
||||
| PAUSE_WHEN_EMPTY_SECONDS | pause-when-empty-seconds |
|
||||
| Environment Variable | Server Property |
|
||||
|-----------------------------------|-------------------------------------------------------------------------------------------------------------------|
|
||||
| ACCEPTS_TRANSFERS | [accepts-transfers](https://minecraft.wiki/w/Server.properties#accepts-transfers) |
|
||||
| ALLOW_FLIGHT | [allow-flight](https://minecraft.wiki/w/Server.properties#allow-flight) |
|
||||
| ALLOW_NETHER | [allow-nether](https://minecraft.wiki/w/Server.properties#allow-nether) |
|
||||
| BROADCAST_CONSOLE_TO_OPS | [broadcast-console-to-ops](https://minecraft.wiki/w/Server.properties#broadcast-console-to-ops) |
|
||||
| BROADCAST_RCON_TO_OPS | [broadcast-rcon-to-ops](https://minecraft.wiki/w/Server.properties#broadcast-rcon-to-ops) |
|
||||
| BUG_REPORT_LINK | [bug-report-link](https://minecraft.wiki/w/Server.properties#bug-report-link) |
|
||||
| ENABLE_COMMAND_BLOCK | [enable-command-block](https://minecraft.wiki/w/Server.properties#enable-command-block) |
|
||||
| ENABLE_STATUS | [enable-status](https://minecraft.wiki/w/Server.properties#enable-status) |
|
||||
| ENFORCE_SECURE_PROFILE | [enforce-secure-profile](https://minecraft.wiki/w/Server.properties#enforce-secure-profile) |
|
||||
| ENTITY_BROADCAST_RANGE_PERCENTAGE | [entity-broadcast-range-percentage](https://minecraft.wiki/w/Server.properties#entity-broadcast-range-percentage) |
|
||||
| FORCE_GAMEMODE | [force-gamemode](https://minecraft.wiki/w/Server.properties#force-gamemode) |
|
||||
| FUNCTION_PERMISSION_LEVEL | [function-permission-level](https://minecraft.wiki/w/Server.properties#function-permission-level) |
|
||||
| GENERATE_STRUCTURES | [generate-structures](https://minecraft.wiki/w/Server.properties#generate-structures) |
|
||||
| HARDCORE | [hardcore](https://minecraft.wiki/w/Server.properties#hardcore) |
|
||||
| HIDE_ONLINE_PLAYERS | [hide-online-players](https://minecraft.wiki/w/Server.properties#hide-online-players) |
|
||||
| LOG_IPS | [log-ips](https://minecraft.wiki/w/Server.properties#log-ips) |
|
||||
| MAX_CHAINED_NEIGHBOR_UPDATES | [max-chained-neighbor-updates](https://minecraft.wiki/w/Server.properties#max-chained-neighbor-updates) |
|
||||
| MAX_PLAYERS | [max-players](https://minecraft.wiki/w/Server.properties#max-players) |
|
||||
| MAX_TICK_TIME | [max-tick-time](https://minecraft.wiki/w/Server.properties#max-tick-time) |
|
||||
| MAX_WORLD_SIZE | [max-world-size](https://minecraft.wiki/w/Server.properties#max-world-size) |
|
||||
| NETWORK_COMPRESSION_THRESHOLD | [network-compression-threshold](https://minecraft.wiki/w/Server.properties#network-compression-threshold) |
|
||||
| ONLINE_MODE | [online-mode](https://minecraft.wiki/w/Server.properties#online-mode) |
|
||||
| OP_PERMISSION_LEVEL | [op-permission-level](https://minecraft.wiki/w/Server.properties#op-permission-level) |
|
||||
| PAUSE_WHEN_EMPTY_SECONDS | [pause-when-empty-seconds](https://minecraft.wiki/w/Server.properties#pause-when-empty-seconds) |
|
||||
| PLAYER_IDLE_TIMEOUT | [player-idle-timeout](https://minecraft.wiki/w/Server.properties#player-idle-timeout) |
|
||||
| PREVENT_PROXY_CONNECTIONS | [prevent-proxy-connections](https://minecraft.wiki/w/Server.properties#prevent-proxy-connections) |
|
||||
| PVP | [pvp](https://minecraft.wiki/w/Server.properties#pvp) |
|
||||
| RATE_LIMIT | [rate-limit](https://minecraft.wiki/w/Server.properties#rate-limit) |
|
||||
| REGION_FILE_COMPRESSION | [region-file-compression](https://minecraft.wiki/w/Server.properties#region-file-compression) |
|
||||
| RESOURCE_PACK_ID | [resource-pack-id](https://minecraft.wiki/w/Server.properties#resource-pack-id) |
|
||||
| RESOURCE_PACK_PROMPT | [resource-pack-prompt](https://minecraft.wiki/w/Server.properties#resource-pack-prompt) |
|
||||
| SERVER_NAME | [server-name](https://minecraft.wiki/w/Server.properties#server-name) |
|
||||
| SIMULATION_DISTANCE | [simulation-distance](https://minecraft.wiki/w/Server.properties#simulation-distance) |
|
||||
| SPAWN_MONSTERS | [spawn-monsters](https://minecraft.wiki/w/Server.properties#spawn-monsters) |
|
||||
| SPAWN_PROTECTION | [spawn-protection](https://minecraft.wiki/w/Server.properties#spawn-protection) |
|
||||
| SYNC_CHUNK_WRITES | [sync-chunk-writes](https://minecraft.wiki/w/Server.properties#sync-chunk-writes) |
|
||||
| USE_NATIVE_TRANSPORT | [use-native-transport](https://minecraft.wiki/w/Server.properties#use-native-transport) |
|
||||
| VIEW_DISTANCE | [view-distance](https://minecraft.wiki/w/Server.properties#view-distance) |
|
||||
BIN
docs/img/motd-with-placeholders.png
Normal file
BIN
docs/img/motd-with-placeholders.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
@@ -29,7 +29,7 @@ where, in this case, the standard server port 25565, will be exposed on your hos
|
||||
|
||||
**DO NOT** port forward RCON on 25575 without first setting `RCON_PASSWORD` to a secure value. It is highly recommended to only use RCON within the container, such as with `rcon-cli`.
|
||||
|
||||
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](versions/java.md) and the [`TYPE`](types-and-platforms/index.md) can be configured to create many variations of desired Minecraft server.
|
||||
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](versions/minecraft.md) and the [`TYPE`](types-and-platforms/index.md) can be configured to create many variations of desired Minecraft server.
|
||||
|
||||
## Using [Docker Compose](https://docs.docker.com/compose/)
|
||||
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
# Auto-Pause
|
||||
|
||||
!!! important
|
||||
|
||||
As of [1.21.2](https://minecraft.wiki/w/Java_Edition_1.21.2) it is not recommend to use this feature since Minecraft server natively auto-pauses when the server is empty. That is configured via the enivironment variable `PAUSE_WHEN_EMPTY_SECONDS`, which maps to the `pause-when-empty-seconds` server property.
|
||||
|
||||
An auto-pause functionality is provided that monitors whether clients are connected to the server. If a client is not connected for a specified time, the Java process is put into a pause state. When a client attempts to connect while the process is paused, then process will be restored to a running state. The experience for the client does not change. This feature can be enabled by setting the environment variable `ENABLE_AUTOPAUSE` to "true".
|
||||
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
|
||||
!!! tip "For advanced use only"
|
||||
|
||||
This page describes a capability that is not applicable to most users. It is only intended for rare cases when a very specific Java base image is needed or additional packages need to be installed that are not generally applicable or would bloat the image size.
|
||||
|
||||
Be sure to confirm that the desired [version and variant of Java isn't already provided](../versions/java.md).
|
||||
|
||||
## Building image locally with alternate Java base
|
||||
|
||||
The following shows how to change the base Java image used by the build:
|
||||
An alternate Java base image can be specified by setting the [docker build argument](https://docs.docker.com/reference/cli/docker/buildx/build/#build-arg) `BASE_IMAGE` to the desired base image. The following shows an example of using the base image `ghcr.io/graalvm/graalvm-ce:ol8-java11`:
|
||||
|
||||
```shell
|
||||
docker build --build-arg BASE_IMAGE=ghcr.io/graalvm/graalvm-ce:ol8-java11 -t IMG_PREFIX/minecraft-server:java11-graalvm .
|
||||
@@ -7,14 +7,14 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||
b418af073764 mc "/start" 43 seconds ago Up 41 seconds (healthy) 0.0.0.0:25565->25565/tcp, 25575/tcp mc
|
||||
```
|
||||
|
||||
You can also query the container's health in a script friendly way:
|
||||
You can also query the container's health in a script-friendly way:
|
||||
|
||||
``` shell
|
||||
> docker container inspect -f "{{.State.Health.Status}}" mc
|
||||
healthy
|
||||
```
|
||||
|
||||
There's actually a wrapper script called `mc-health` that takes care of calling `mc-monitor status` with the correct arguments. If needing to customize the health checks parameters, such as in a compose file, then use something like the following in the service declaration:
|
||||
There's actually a wrapper script called `mc-health` that takes care of calling `mc-monitor status` with the correct arguments. If needing to customize the health checks parameters, such as in a Compose file, then use something like the following in the service declaration:
|
||||
|
||||
``` yaml
|
||||
healthcheck:
|
||||
@@ -24,9 +24,16 @@ healthcheck:
|
||||
retries: 20
|
||||
```
|
||||
|
||||
Some orchestration systems, such as Portainer, don't allow for disabling the default `HEALTHCHECK` declared by this image. In those cases you can approximate the disabling of healthchecks by setting the environment variable `DISABLE_HEALTHCHECK` to `true`.
|
||||
Some orchestration systems, such as Portainer, don't allow for disabling the default `HEALTHCHECK` declared by this image. In those cases you can approximate the disabling of health checks by setting the environment variable `DISABLE_HEALTHCHECK` to `true`.
|
||||
|
||||
### Healthchecks for older versions
|
||||
The [health check in a Compose service declaration](https://docs.docker.com/reference/compose-file/services/#healthcheck) can also be disabled using:
|
||||
|
||||
This container disables Healthchecks for Versions before b1.8 as those versions do not support any kind of server pinging.
|
||||
For more information see [Server List Ping](https://wiki.vg/Server_List_Ping#Beta_1.8_to_1.3)
|
||||
```yaml
|
||||
healthcheck:
|
||||
disable: true
|
||||
test: ["NONE"]
|
||||
```
|
||||
|
||||
### Health checks for older versions
|
||||
|
||||
This container disables health checks for Minecraft versions before b1.8 as those versions do not support any kind of server pinging. For more information see [Server List Ping](https://minecraft.wiki/w/Java_Edition_protocol/Server_List_Ping#Beta_1.8_to_1.3).
|
||||
|
||||
@@ -6,7 +6,7 @@ A specific file can be omitted from each reference to allow for auto-selecting t
|
||||
|
||||
!!! warning "CurseForge API key usage"
|
||||
|
||||
A CurseForge API key must be allocated and set with `CF_API_KEY` [as described here](../types-and-platforms/mod-platforms/auto-curseforge.md#api-key).
|
||||
A CurseForge API key must be allocated and set with `CF_API_KEY` (or `CF_API_KEY_FILE`) [as described here](../types-and-platforms/mod-platforms/auto-curseforge.md#api-key).
|
||||
|
||||
## Project-file references
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
Also, a specific version (or release type) can be declared adding a colon and then the version id, version number/name, or release type after the project slug. The version ID or number can be found in the 'Metadata' section. Valid release types are `release`, `beta`, `alpha`.
|
||||
|
||||
To select a datapack from a Modrinth project, prefix the entry with "datapack:". When running a vanilla server, this is optional since only datapacks will be available for vanilla servers to select.
|
||||
|
||||
You can also reference a file containing project entries by prefixing the **container path** path with `@`.
|
||||
|
||||
| Description | Example projects entry |
|
||||
|---------------------------------|-------------------------------------------------------|
|
||||
@@ -21,6 +23,43 @@
|
||||
| Latest version using project ID | `P7dR8mSH` |
|
||||
| Latest version of datapack | `datapack:terralith` |
|
||||
| Specific version of datapack | `datapack:terralith:2.5.5` |
|
||||
| Projects Listing File | `@/path/to/modrinth-mods.txt` |
|
||||
|
||||
!!! info "More about listing files"
|
||||
|
||||
Each line in the listing file is processed as one of the references above; however, blank lines and comments that start with `#` are ignored.
|
||||
|
||||
Make sure to place the listing file in a mounted directory/volume or declare an appropriate mount for it.
|
||||
|
||||
For example, `MODRINTH_PROJECTS` can be set to "@/extras/modrinth-mods.txt", assuming "/extras" has been added to `volumes` section, where the container file `/extras/modrinth-mods.txt` contains
|
||||
|
||||
```text
|
||||
# This comment is ignored
|
||||
fabric-api
|
||||
|
||||
# This and previous blank line are ignore
|
||||
cloth-config
|
||||
datapack:terralith
|
||||
```
|
||||
|
||||
## Version from Projects
|
||||
|
||||
When the environment variable `VERSION_FROM_MODRINTH_PROJECTS` is set to "true" the Minecraft [`VERSION`](../versions/minecraft.md) will be automatically determined by looking at the most recent version of Minecraft that is supported by all the projects provided in `MODRINTH_PROJECTS`.
|
||||
|
||||
!!! example
|
||||
|
||||
Given the environment variables
|
||||
|
||||
```yaml
|
||||
MODRINTH_PROJECTS: |
|
||||
viaversion
|
||||
viabackwards
|
||||
griefprevention
|
||||
discordsrv
|
||||
VERSION_FROM_MODRINTH_PROJECTS: true
|
||||
```
|
||||
|
||||
Let's say all are supported on Minecraft up to 1.21.8 except griefprevention, which is only supported up to 1.21.7. In that case, `VERSION` will be automatically set to 1.21.7.
|
||||
|
||||
## Extra options
|
||||
|
||||
@@ -30,3 +69,6 @@
|
||||
`MODRINTH_ALLOWED_VERSION_TYPE`
|
||||
: The version type is used to determine the newest version to use from each project. The allowed values are `release` (default), `beta`, `alpha`. Setting to `beta` will pick up both release and beta versions. Setting to `alpha` will pick up release, beta, and alpha versions.
|
||||
|
||||
`MODRINTH_LOADER`
|
||||
: When using a custom server, set this to specify which loader type will be requested during lookups
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
mkdocs-material == 9.6.12
|
||||
mkdocs-autorefs == 1.4.1
|
||||
mkdocstrings[python] == 0.29.1
|
||||
mkdocs-material == 9.6.16
|
||||
mkdocs-autorefs == 1.4.2
|
||||
mkdocstrings[python] == 0.30.0
|
||||
mkdocs-literate-nav == 0.6.2
|
||||
mdx-gh-links == 0.4
|
||||
mkdocs-click == 0.9.0
|
||||
|
||||
@@ -12,6 +12,7 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
|
||||
|
||||
Example if your key is `$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa`:
|
||||
```yaml
|
||||
# compose.yaml
|
||||
environment:
|
||||
CF_API_KEY: '$$11$$22$$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
```
|
||||
@@ -21,16 +22,48 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
|
||||
docker run ... -e CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
```
|
||||
|
||||
To avoid exposing the API key, it is highly recommended to use a `.env` file, which is [loaded automatically by docker compose](https://docs.docker.com/compose/environment-variables/set-environment-variables/#substitute-with-an-env-file). `$`'s in the value still need to escaped with a second `$` and the variable needs to be referenced from the compose file, such as:
|
||||
To avoid exposing the API key, it is highly recommended to use a `.env` file, which is [loaded automatically by docker compose](https://docs.docker.com/compose/environment-variables/set-environment-variables/#substitute-with-an-env-file). You **do not** need to escape `$`'s with a second `$` in the `.env` file **as long as the key is wrapped in single quotes**.
|
||||
|
||||
```
|
||||
# .env
|
||||
CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
```
|
||||
|
||||
The variable should to be referenced from the compose file, such as:
|
||||
|
||||
```yaml
|
||||
# compose.yaml
|
||||
environment:
|
||||
CF_API_KEY: ${CF_API_KEY}
|
||||
```
|
||||
|
||||
The .env file should be placed in the same directory as your compose file like so:
|
||||
|
||||
```
|
||||
/minecraft-server
|
||||
├── .env
|
||||
├── compose.yaml
|
||||
├── /data
|
||||
```
|
||||
|
||||
To use the equivalent with `docker run` you need to specify the `.env` file explicitly:
|
||||
```
|
||||
docker run --env-file=.env itzg/minecraft-server
|
||||
```
|
||||
|
||||
Alternately you can use [docker secrets](https://docs.docker.com/compose/how-tos/use-secrets/) with a `CF_API_KEY_FILE` environment variable:
|
||||
```
|
||||
service:
|
||||
environment:
|
||||
CF_API_KEY_FILE: /run/secrets/cf_api_key
|
||||
secrets:
|
||||
- cf_api_key
|
||||
|
||||
secrets:
|
||||
cf_api_key:
|
||||
file: cf_api_key.secret
|
||||
```
|
||||
|
||||
|
||||
!!! note
|
||||
Be sure to use the appropriate [image tag for the Java version compatible with the modpack](../../versions/java.md).
|
||||
|
||||
@@ -12,7 +12,7 @@ Run a Bukkit/Spigot server type by setting the environment variable `TYPE` to "B
|
||||
```
|
||||
docker run ... -e TYPE=SPIGOT ...
|
||||
```
|
||||
|
||||
|
||||
Compose
|
||||
```yaml
|
||||
environment:
|
||||
@@ -50,3 +50,16 @@ Canyon is on a temporary hiatus, so by default the final build from GitHub will
|
||||
|
||||
-e CANYON_BUILD=6
|
||||
-e CANYON_BUILD=26
|
||||
|
||||
### Poseidon
|
||||
|
||||
[Poseidon](https://github.com/retromcorg/Project-Poseidon) is a fork of CraftBukkit for Minecraft Beta 1.7.3. It includes multiple enhancements whilst also retaining compatibility with old Bukkit plugins.
|
||||
|
||||
-e VERSION=b1.7.3 -e TYPE=CANYON
|
||||
|
||||
!!! important
|
||||
Only `VERSION=b1.7.3` is supported. Since that version pre-dates the health check mechanism used by this image, that will need to be disabled by setting `DISABLE_HEALTHCHECK=true`.
|
||||
|
||||
### Uberbukkit
|
||||
|
||||
[Uberbukkit](https://github.com/Moresteck/uberbukkit) is a fork of CraftBukkit for Minecraft Beta with Multi version support, supports b1.0 - b1.7.3
|
||||
|
||||
@@ -41,21 +41,27 @@ A specific loader or launcher version other than the latest can be requested usi
|
||||
FABRIC_LOADER_VERSION: 0.13.1
|
||||
```
|
||||
|
||||
!!! note "Fabric API"
|
||||
!!! note
|
||||
|
||||
As [mentioned on the Fabric download page](https://fabricmc.net/use/installer/), most mods will require the Fabric API mod to be installed. That can be easily done by utilizing [the Modrinth downloads feature](../../mods-and-plugins/modrinth.md), such as adding this to the `environment` of a compose file service:
|
||||
|
||||
```yaml
|
||||
TYPE: FABRIC
|
||||
MODRINTH_PROJECTS: |
|
||||
fabric-api
|
||||
```
|
||||
See the [Working with mods and plugins](../../mods-and-plugins/index.md) section to set up Fabric mods and configuration.
|
||||
|
||||
!!! note "Alternate launcher"
|
||||
## Fabric API
|
||||
|
||||
If you wish to use an alternative launcher you can:
|
||||
As [mentioned on the Fabric download page](https://fabricmc.net/use/installer/), most mods will require the Fabric API mod to be installed. That can be easily done by utilizing [the Modrinth downloads feature](../../mods-and-plugins/modrinth.md), such as adding this to the `environment` of a compose file service:
|
||||
|
||||
- Provide the path to a custom launcher jar available to the container with `FABRIC_LAUNCHER`, relative to `/data` (such as `-e FABRIC_LAUNCHER=fabric-server-custom.jar`)
|
||||
- Provide the URL to a custom launcher jar with `FABRIC_LAUNCHER_URL` (such as `-e FABRIC_LAUNCHER_URL=http://HOST/fabric-server-custom.jar`)
|
||||
```yaml
|
||||
TYPE: FABRIC
|
||||
MODRINTH_PROJECTS: |
|
||||
fabric-api
|
||||
```
|
||||
|
||||
See the [Working with mods and plugins](../../mods-and-plugins/index.md) section to set up Fabric mods and configuration.
|
||||
## Alternate launcher
|
||||
|
||||
If you wish to use an alternative launcher you can:
|
||||
|
||||
- Provide the path to a custom launcher jar available to the container with `FABRIC_LAUNCHER`, relative to `/data` (such as `-e FABRIC_LAUNCHER=fabric-server-custom.jar`)
|
||||
- Provide the URL to a custom launcher jar with `FABRIC_LAUNCHER_URL` (such as `-e FABRIC_LAUNCHER_URL=http://HOST/fabric-server-custom.jar`)
|
||||
|
||||
## Force re-install
|
||||
|
||||
If the Fabric launcher jar becomes corrupted you can temporarily set FABRIC_FORCE_REINSTALL to "true" to have it re-installed on next startup.
|
||||
@@ -45,6 +45,11 @@ In both of the cases above, there is no need for the `VERSION` or `FORGE_VERSION
|
||||
|
||||
If an error occurred while installing Forge, it might be possible to resolve by temporarily setting `FORGE_FORCE_REINSTALL` to "true". Be sure to remove that variable after successfully starting the server.
|
||||
|
||||
URLs configurable via environment variables:
|
||||
|
||||
- `FORGE_PROMOTIONS_URL`: default is https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json
|
||||
- `FORGE_MAVEN_REPO_URL`: default is https://maven.minecraftforge.net
|
||||
|
||||
## Alternatives
|
||||
|
||||
### NeoForge
|
||||
|
||||
@@ -49,6 +49,34 @@ By default the latest build will be used; however, a specific build number can b
|
||||
|
||||
-e VERSION=1.16.5 -e MOHIST_BUILD=374
|
||||
|
||||
### Youer
|
||||
|
||||
A [Youer](https://github.com/MohistMC/Youer) server can be used with
|
||||
|
||||
-e TYPE=YOUER
|
||||
|
||||
!!! note
|
||||
|
||||
There are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2"
|
||||
|
||||
By default the latest build will be used; however, a specific build number can be selected by setting `MOHIST_BUILD`, such as
|
||||
|
||||
-e VERSION=1.16.5 -e MOHIST_BUILD=374
|
||||
|
||||
### Banner
|
||||
|
||||
A [Banner](https://github.com/MohistMC/Banner) server can be used with
|
||||
|
||||
-e TYPE=BANNER
|
||||
|
||||
!!! note
|
||||
|
||||
There are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2"
|
||||
|
||||
By default the latest build will be used; however, a specific build number can be selected by setting `MOHIST_BUILD`, such as
|
||||
|
||||
-e VERSION=1.16.5 -e MOHIST_BUILD=374
|
||||
|
||||
### Catserver
|
||||
|
||||
A [Catserver](http://catserver.moe/) type server can be used with
|
||||
@@ -56,3 +84,10 @@ A [Catserver](http://catserver.moe/) type server can be used with
|
||||
-e TYPE=CATSERVER
|
||||
|
||||
> **NOTE** Catserver only provides a single release stream, so `VERSION` is ignored
|
||||
|
||||
### Arclight
|
||||
|
||||
A [Arclight](https://arclight.izzel.io/) type server can be used with
|
||||
|
||||
-e TYPE=ARCLIGHT
|
||||
-e ARCLIGHT_TYPE=NEOFORGE,FORGE,FABRIC
|
||||
|
||||
@@ -39,6 +39,14 @@ Configuration options with defaults:
|
||||
|
||||
Instead of using format codes in the MOTD, Limbo requires [JSON chat content](https://minecraft.wiki/w/Raw_JSON_text_format#Java_Edition). If a plain string is provided, which is the default, then it gets converted into the required JSON structure.
|
||||
|
||||
## NanoLimbo
|
||||
|
||||
A [NanoLimbo](https://github.com/BoomEaro/NanoLimbo) server can be run by setting `TYPE` to `NANOLIMBO`.
|
||||
|
||||
Note: it is a fork of the original [NanoLimbo](https://github.com/Nan1t/NanoLimbo) made by Nan1t
|
||||
|
||||
An alternate Limbo server
|
||||
|
||||
## Crucible
|
||||
|
||||
A [Crucible](https://github.com/CrucibleMC/Crucible) server can be run by setting `TYPE` to `CRUCIBLE`.
|
||||
@@ -65,4 +73,4 @@ Alternatively, the final `-jar` invocation can be replaced by setting `CUSTOM_JA
|
||||
|
||||
When using `docker run` make sure to quote the entire value since it has spaces in it, such as
|
||||
|
||||
-e CUSTOM_JAR_EXEC="-cp worldedit.jar:Carpet-Server.jar net.minecraft.server.MinecraftServer"
|
||||
-e CUSTOM_JAR_EXEC="-cp worldedit.jar:Carpet-Server.jar net.minecraft.server.MinecraftServer"
|
||||
|
||||
@@ -85,6 +85,23 @@ Extra variables:
|
||||
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the built-in [Flare](https://blog.airplane.gg/flare) profiler
|
||||
- `PURPUR_DOWNLOAD_URL=<url>` : set URL to download Purpur from custom URL.
|
||||
|
||||
### Leaf
|
||||
|
||||
A [Leaf server](https://www.leafmc.one/) is a Paper fork focused on performance improvements and low-level optimizations for smoother gameplay.
|
||||
|
||||
To use a Leaf server, set the environment variable `TYPE` to `"LEAF"`.
|
||||
|
||||
-e TYPE=LEAF
|
||||
|
||||
!!! note
|
||||
|
||||
The `VERSION` variable is used to select the Minecraft version to run.
|
||||
To specify a particular Leaf build, use `LEAF_BUILD`.
|
||||
|
||||
By default the latest build will be used; however, a specific build number can be selected by setting `LEAF_BUILD`, such as
|
||||
|
||||
-e VERSION=1.21.4 -e LEAF_BUILD=441
|
||||
|
||||
### Folia
|
||||
|
||||
A [Folia server](https://papermc.io/software/folia) can be used by setting the environment variable `TYPE` to "FOLIA".
|
||||
@@ -109,3 +126,7 @@ If you have attached a host directory to the `/data` volume, then you can instal
|
||||
|
||||
!!! note
|
||||
The Folia type inherits from the Paper type. Paper's variables will override the Folia ones.
|
||||
|
||||
## Extra config
|
||||
|
||||
- `SKIP_DOWNLOAD_DEFAULTS`: when set to "true" startup will entirely skip checking for default Paper/Bukkit/Spigot config files to download
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
!!! warning
|
||||
|
||||
The variables listed on this page are manually documented and may be out-of-date or inaccurate.
|
||||
The variables listed on this page are manually documented and may be out-of-date or inaccurate.
|
||||
|
||||
All other documentation pages are actively maintained, so please use the search box above to find the desired topic.
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>TZ</code></td>
|
||||
<td>You can configure the timezone to match yours by setting the TZ environment variable.
|
||||
<td>You can configure the timezone to match yours by setting the TZ environment variable.
|
||||
|
||||
alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
|
||||
|
||||
@@ -81,6 +81,18 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
|
||||
<td><code>false</code></td>
|
||||
<td>⬜️</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>USE_MEOWICE_FLAGS</code></td>
|
||||
<td><a href="https://github.com/MeowIce/meowice-flags?tab=readme-ov-file#why-would-i-have-to-switch-">MeowIce has created an updated set of JVM flags</a> based on Aikar's flags but with support for optimizations for Java 17 and above</td>
|
||||
<td><code>false</code></td>
|
||||
<td>⬜️</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>USE_MEOWICE_GRAALVM_FLAGS</code></td>
|
||||
<td>enables MeowIce's flags for GraalVM if USE_MEOWICE_GRAALVM_FLAGS is TRUE</td>
|
||||
<td><code>true</code></td>
|
||||
<td>⬜️</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>JVM_OPTS</code></td>
|
||||
<td>General JVM options can be passed to the Minecraft Server invocation by passing a <code>JVM_OPTS</code> environment variable. The JVM requires -XX options to precede -X options, so those can be declared in <code>JVM_XX_OPTS</code>. Both variables are space-delimited, raw JVM arguments</td>
|
||||
@@ -711,7 +723,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
|
||||
### CurseForge
|
||||
|
||||
!!! tip
|
||||
|
||||
|
||||
Refer to the [main documentation page](types-and-platforms/mod-platforms/auto-curseforge.md) for more details and up-to-date information.
|
||||
|
||||
<table>
|
||||
@@ -730,6 +742,12 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
|
||||
<td><code></code></td>
|
||||
<td>✅</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CF_API_KEY_FILE</code></td>
|
||||
<td>A path to a file inside of container that contains <strong>YOUR</strong> CurseForge (Eternal) API Key.</td>
|
||||
<td><code></code></td>
|
||||
<td>✅</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CF_PAGE_URL</code></td>
|
||||
<td>Pass a page URL to the modpack or a specific file</td>
|
||||
|
||||
@@ -10,29 +10,29 @@ or explicitly include the tag, such as
|
||||
|
||||
where `<tag>` refers to the first column of this table:
|
||||
|
||||
| Tag | Java version | Linux | JVM Type | Architecture | Note |
|
||||
|------------------|--------------|--------|--------------------|---------------------|------|
|
||||
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java24 | 24 | Ubuntu | Hotspot | amd64, arm64 | (2) |
|
||||
| java24-graalvm | 24 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (2) |
|
||||
| java21 | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 | |
|
||||
| java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 | |
|
||||
| java21-graalvm | 21 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java17-graalvm | 17 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
|
||||
| java17-alpine | 17 | Alpine | Hotspot | amd64 (1) | |
|
||||
| java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 | |
|
||||
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 | |
|
||||
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 | |
|
||||
| Tag | Java version | Linux | JVM Type | Architecture | Note |
|
||||
|----------------|--------------|--------|--------------------|---------------------|------|
|
||||
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java24 | 24 | Ubuntu | Hotspot | amd64, arm64 | (2) |
|
||||
| java24-graalvm | 24 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (2) |
|
||||
| java21 | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 | |
|
||||
| java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 | |
|
||||
| java21-graalvm | 21 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java17-graalvm | 17 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
|
||||
| java17-alpine | 17 | Alpine | Hotspot | amd64 (1) | |
|
||||
| java16 | 16 | Ubuntu | Hotspot | amd64, arm64, armv7 | (4) |
|
||||
| java11 | 11 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
|
||||
Notes
|
||||
|
||||
1. Why no arm64 for Java 17 Alpine? That is because the base images, such as [elipse-temurin](https://hub.docker.com/_/eclipse-temurin/tags?page=&page_size=&ordering=&name=17-jre-alpine) do not provide support for that. Use the Ubuntu based images instead.
|
||||
2. Short-term variant, subject to deprecation upon next version introduction
|
||||
3. Based on the [Oracle GraalMV images](https://blogs.oracle.com/java/post/new-oracle-graalvm-container-images), which as of JDK 17, are now under the [GraalVM Free License](https://blogs.oracle.com/java/post/graalvm-free-license) incorporating what used to be known as the GraalVM Enterprise.
|
||||
4. This version of Java is [recommended for PaperMC 1.16.5](https://docs.papermc.io/paper/getting-started/#requirements)
|
||||
|
||||
!!! example "Example using java8"
|
||||
|
||||
@@ -78,7 +78,7 @@ where `java tag` still refers to the first column of the table above and `releas
|
||||
|
||||
### Stable image tag
|
||||
|
||||
The `stable` image tag combines the benefits of `latest` and [release versions](#release-versions) since it shifts to refer to the most recently released version.
|
||||
The `stable` image tag combines the benefits of `latest` and [release versions](#release-versions) since it shifts to refer to the most recently released version. There is also a per-variant stable tag, formatted as `stable-{variant}`.
|
||||
|
||||
## Version compatibilities
|
||||
|
||||
@@ -131,12 +131,15 @@ The following image tags have been deprecated and are no longer receiving update
|
||||
- adopt15
|
||||
- openj9-nightly
|
||||
- multiarch-latest
|
||||
- java11
|
||||
- java16/java16-openj9
|
||||
- java16-openj9
|
||||
- java17-graalvm-ce
|
||||
- java17-openj9
|
||||
- java19
|
||||
- java20-graalvm, java20, java20-alpine
|
||||
- java23-*
|
||||
- java8-multiarch is still built and pushed, but please move to java8 instead
|
||||
- java8-alpine
|
||||
- java8-alpine, java8-jdk, java8-openj9, java8-graalvm-ce
|
||||
|
||||
## JSON Listing
|
||||
|
||||
Information about the image tags is available programmatically at <https://raw.githubusercontent.com/itzg/docker-minecraft-server/refs/heads/master/images.json>
|
||||
@@ -9,12 +9,10 @@ services:
|
||||
EULA: true
|
||||
ALLOW_FLIGHT: true
|
||||
MOD_PLATFORM: AUTO_CURSEFORGE
|
||||
# Allocate API key from https://console.curseforge.com/
|
||||
# and set in .env file making sure to double up dollar signs, such as
|
||||
# CF_API_KEY=$$2a$$10$$....
|
||||
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
|
||||
CF_API_KEY: ${CF_API_KEY}
|
||||
CF_SLUG: craftoria
|
||||
MOTD: |
|
||||
A %TYPE% server on %VERSION%
|
||||
running %MODPACK_NAME% %MODPACK_VERSION%
|
||||
MEMORY: 8G
|
||||
volumes:
|
||||
# Use managed volume by default, but can change to a relative path like
|
||||
16
examples/auto-curseforge/skyfactory4/compose.yml
Normal file
16
examples/auto-curseforge/skyfactory4/compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server:java8
|
||||
environment:
|
||||
EULA: "true"
|
||||
MODPACK_PLATFORM: AUTO_CURSEFORGE
|
||||
CF_SLUG: skyfactory-4
|
||||
CF_FILENAME_MATCHER: 4.2.4
|
||||
CF_API_KEY: ${CF_API_KEY}
|
||||
MEMORY: 3G
|
||||
ports:
|
||||
- "25565:25565"
|
||||
volumes:
|
||||
- mc-data:/data
|
||||
volumes:
|
||||
mc-data:
|
||||
@@ -5,9 +5,11 @@ services:
|
||||
EULA: true
|
||||
# https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/
|
||||
MODPACK_PLATFORM: AUTO_CURSEFORGE
|
||||
# CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/skyfactory-5/files/6044634
|
||||
# CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/skyfactory-5/files/6290684
|
||||
CF_SLUG: skyfactory-5
|
||||
CF_FILENAME_MATCHER: 5.0.2
|
||||
# Comment out the following to get the latest version or pick a version from
|
||||
# https://www.curseforge.com/minecraft/modpacks/skyfactory-5/files/all?page=1&pageSize=20
|
||||
CF_FILENAME_MATCHER: 5.0.8
|
||||
# Allocate API key from https://console.curseforge.com/
|
||||
# and set in .env file making sure to double up dollar signs, such as
|
||||
# CF_API_KEY=$$2a$$10$$....
|
||||
@@ -1,157 +0,0 @@
|
||||
####################################################################
|
||||
# FORGE GENERIC_PACK #
|
||||
# #
|
||||
# Date: 20220828 #
|
||||
# #
|
||||
# Mod: TNP Limitless 5 v2.19.0 #
|
||||
# #
|
||||
# Notes: Verify that there is no EULA file in the modpack.zip #
|
||||
# if you do not delete it the EULA flag below will be #
|
||||
# overwritten when the modpack is copied and the server #
|
||||
# will not start. #
|
||||
# #
|
||||
####################################################################
|
||||
services:
|
||||
|
||||
####################################################################
|
||||
# Service Name #
|
||||
# #
|
||||
# Define Service Name here. If using RCON this name will be #
|
||||
# referenced again as RWA_RCON_HOST below. #
|
||||
# #
|
||||
# Example: 'name:' or 'mc_atm6:' #
|
||||
####################################################################
|
||||
mc_tnp5:
|
||||
|
||||
####################################################################
|
||||
# Image & Container Name #
|
||||
# #
|
||||
# Specify Image Name and Java Version. The 'image' will always be #
|
||||
# 'itzg/minecraft-server' however the tag added to the end is #
|
||||
# where you can specify the java version or container architecture.#
|
||||
# See readme.md for a full list. #
|
||||
# #
|
||||
# 'container_name:' This can be anything you like. This is the name#
|
||||
# that will show when you run 'docker ps' commands. #
|
||||
####################################################################
|
||||
image: itzg/minecraft-server
|
||||
container_name: mc_tnp5
|
||||
|
||||
####################################################################
|
||||
# Server Ports #
|
||||
# #
|
||||
# Specify external port. #
|
||||
####################################################################
|
||||
ports:
|
||||
- 25565:25565
|
||||
|
||||
####################################################################
|
||||
# Automatic Server Restart #
|
||||
# #
|
||||
# Define a restart policy here. #
|
||||
# - 'no' = Do not restart. #
|
||||
# - 'on-failure' = Restart if container exits because an error. #
|
||||
# - 'always' = Regardless of stop reason. #
|
||||
# - 'unless-stopped' = Similar to always except if stopped. #
|
||||
####################################################################
|
||||
restart: unless-stopped
|
||||
|
||||
####################################################################
|
||||
# Volume and Folder Access #
|
||||
# #
|
||||
# This section defines what folders and volumes you want to give #
|
||||
# this container access to. It is recommended to leaves these set #
|
||||
# to the default values unless you know what you are doing. #
|
||||
# #
|
||||
# Place your mod zip file in a folder called 'modpacks' in the #
|
||||
# same directory you place this docker-compose file. #
|
||||
# #
|
||||
# Specify the data volume name or directory here as well. #
|
||||
# In this example the volume name is 'data'. When docker creates #
|
||||
# the volume it will add what ever name you give it here to the #
|
||||
# end of the container name specified above. In this example it #
|
||||
# would be named 'mc_atm6_data'. If you change this be sure to #
|
||||
# update the volume name at the bottom of this config. #
|
||||
####################################################################
|
||||
volumes:
|
||||
- ./modpacks:/modpacks:ro
|
||||
- data:/data
|
||||
|
||||
####################################################################
|
||||
# EULA #
|
||||
# #
|
||||
# Accept EULA by setting to "true" #
|
||||
####################################################################
|
||||
environment:
|
||||
EULA: "true"
|
||||
|
||||
####################################################################
|
||||
# FORGE INSTALL #
|
||||
# #
|
||||
# Sets install type to FORGE and specifys the zip folder name #
|
||||
# and location of your mod pack. #
|
||||
# #
|
||||
# TYPE: Defines the install type as FORGE #
|
||||
# #
|
||||
# VERSION: Defines the version of MC the modpack is based on. #
|
||||
# #
|
||||
# FORGE_VERSION: Defines the version of FORGE the modpack uses. #
|
||||
# This can usually be found in the modpack.zip as #
|
||||
# installer.jar #
|
||||
# #
|
||||
# GENERIC_PACK: Define where the modpack.zip is located. #
|
||||
# #
|
||||
# Place your mod zip file in a folder called 'modpacks' in the #
|
||||
# same directory you place this docker-compose file. #
|
||||
####################################################################
|
||||
TYPE: FORGE
|
||||
VERSION: 1.18.2
|
||||
FORGE_VERSION: 40.1.73
|
||||
GENERIC_PACK: /modpacks/tnp5.zip
|
||||
|
||||
####################################################################
|
||||
# Server Memory #
|
||||
# #
|
||||
# Set Maximum amount of memory allowed for your server. #
|
||||
####################################################################
|
||||
MEMORY: "8G"
|
||||
|
||||
####################################################################
|
||||
# Logging Options #
|
||||
# #
|
||||
# Set to "true" to delete old logs #
|
||||
####################################################################
|
||||
ENABLE_ROLLING_LOGS: "true"
|
||||
|
||||
####################################################################
|
||||
# Server Timezone #
|
||||
# #
|
||||
# Specify server Timezone #
|
||||
####################################################################
|
||||
TZ: "America/New_York"
|
||||
|
||||
####################################################################
|
||||
# Minecraft Game Options #
|
||||
# #
|
||||
# List any game options you want to define here. A full list can #
|
||||
# be found on the readme.md page on github. #
|
||||
####################################################################
|
||||
OVERRIDE_SERVER_PROPERTIES: "true"
|
||||
DIFFICULTY: "easy"
|
||||
MAX_TICK_TIME: "-1"
|
||||
VIEW_DISTANCE: "6"
|
||||
ALLOW_FLIGHT: "true"
|
||||
OPS: ""
|
||||
MAX_PLAYERS: 10
|
||||
PVP: "false"
|
||||
LEVEL_TYPE: "biomesoplenty"
|
||||
MOTD: "Welcome Home"
|
||||
|
||||
####################################################################
|
||||
# Volumes #
|
||||
# #
|
||||
# Define data volume name here. You should leave this set to the #
|
||||
# default. #
|
||||
####################################################################
|
||||
volumes:
|
||||
data:
|
||||
@@ -1,19 +0,0 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server:${IMAGE_TAG:-latest}
|
||||
volumes:
|
||||
- data:/data
|
||||
- ./modpacks:/modpacks:ro
|
||||
environment:
|
||||
EULA: "true"
|
||||
TYPE: FORGE
|
||||
DEBUG: "${DEBUG:-false}"
|
||||
VERSION: ${VERSION:-1.17.1}
|
||||
FORGE_VERSION: ${FORGE_VERSION:-37.0.90}
|
||||
GENERIC_PACK: /modpacks/${MODPACK:-Server-Files-0.0.21.zip}
|
||||
REMOVE_OLD_MODS: "${REMOVE_OLD_MODS:-false}"
|
||||
ports:
|
||||
- "25565:25565"
|
||||
|
||||
volumes:
|
||||
data: {}
|
||||
@@ -12,6 +12,10 @@ services:
|
||||
# Use Pack ID from https://www.feed-the-beast.com/modpacks/119-ftb-presents-direwolf20-120?tab=about
|
||||
FTB_MODPACK_ID: "119"
|
||||
# FTB_MODPACK_VERSION_ID: ""
|
||||
MOTD: |
|
||||
An FTB server running
|
||||
%MODPACK_NAME% version %MODPACK_VERSION%
|
||||
MEMORY: 4G
|
||||
volumes:
|
||||
# use a named, managed volume for data volume
|
||||
- data:/data
|
||||
|
||||
15
examples/modrinth/version-from-modrinth-projects/compose.yml
Normal file
15
examples/modrinth/version-from-modrinth-projects/compose.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server
|
||||
environment:
|
||||
EULA: true
|
||||
TYPE: paper
|
||||
MODRINTH_PROJECTS: |
|
||||
viaversion
|
||||
viabackwards
|
||||
griefprevention
|
||||
discordsrv
|
||||
VERSION_FROM_MODRINTH_PROJECTS: true
|
||||
MEMORY: 2G
|
||||
ports:
|
||||
- "25565:25565"
|
||||
16
examples/packwiz/compose.yml
Normal file
16
examples/packwiz/compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server
|
||||
tty: true
|
||||
stdin_open: true
|
||||
environment:
|
||||
EULA: true
|
||||
# Match loader from versions section of https://github.com/packwiz/packwiz-example-pack/blob/v1/pack.toml
|
||||
TYPE: QUILT
|
||||
VERSION: "1.19"
|
||||
QUILT_LOADER_VERSION: "0.17.0"
|
||||
PACKWIZ_URL: https://raw.githubusercontent.com/packwiz/packwiz-example-pack/refs/heads/v1/pack.toml
|
||||
volumes:
|
||||
- ./data:/data
|
||||
ports:
|
||||
- "25565:25565"
|
||||
@@ -45,11 +45,7 @@ if isTrue "${DEBUG_AUTOPAUSE}"; then
|
||||
knockdArgs+=(-D)
|
||||
fi
|
||||
|
||||
if isTrue "${SKIP_SUDO}"; then
|
||||
/usr/local/sbin/knockd "${knockdArgs[@]}"
|
||||
else
|
||||
sudo /usr/local/sbin/knockd "${knockdArgs[@]}"
|
||||
fi
|
||||
/usr/local/sbin/knockd "${knockdArgs[@]}"
|
||||
|
||||
if [ $? -ne 0 ] ; then
|
||||
logAutopause "Failed to start knockd daemon."
|
||||
|
||||
@@ -6,8 +6,5 @@ if isTrue "${DEBUG_AUTOSTOP}"; then
|
||||
fi
|
||||
|
||||
logAutostopAction "Stopping Java process"
|
||||
if isTrue "${AUTOSTOP_PKILL_USE_SUDO:-false}"; then
|
||||
sudo pkill -f --signal SIGTERM mc-server-runner
|
||||
else
|
||||
pkill -f --signal SIGTERM mc-server-runner
|
||||
fi
|
||||
pkill -f --signal SIGTERM mc-server-runner
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"better-tips-nbt-tag",
|
||||
"betterf3",
|
||||
"betterfps",
|
||||
"bettergrassify",
|
||||
"biomeinfo",
|
||||
"block-drops-jei-addon",
|
||||
"blur-forge",
|
||||
@@ -27,7 +28,9 @@
|
||||
"chunk-animator",
|
||||
"clickable-advancements",
|
||||
"compass-coords",
|
||||
"config-menus-forge",
|
||||
"configured",
|
||||
"controllable",
|
||||
"controlling",
|
||||
"craftpresence",
|
||||
"ctm",
|
||||
@@ -35,8 +38,10 @@
|
||||
"dark-mode-everywhere",
|
||||
"defensive-measures",
|
||||
"ding",
|
||||
"distraction-free-recipes",
|
||||
"drippy-loading-screen",
|
||||
"dynamic-surroundings",
|
||||
"dynamic-view",
|
||||
"dynamiclights-reforged",
|
||||
"easiervillagertrading",
|
||||
"effective-forge",
|
||||
@@ -44,20 +49,27 @@
|
||||
"embeddium-extension",
|
||||
"embeddium-extras",
|
||||
"enchantment-descriptions",
|
||||
"enhanced-boss-bars",
|
||||
"enhancedvisuals",
|
||||
"entity-collision-fps-fix",
|
||||
"entity-model-features",
|
||||
"entity-texture-features-fabric",
|
||||
"entityculling",
|
||||
"equipment-compare",
|
||||
"essential-mod",
|
||||
"euphoria-patches",
|
||||
"extreme-sound-muffler",
|
||||
"ezzoom",
|
||||
"fading-night-vision",
|
||||
"falling-leaves-forge",
|
||||
"fancymenu",
|
||||
"farsight",
|
||||
"faster-ladder-climbing",
|
||||
"fastquit",
|
||||
"fastquit-forge",
|
||||
"flerovium",
|
||||
"foamfix-optimization-mod",
|
||||
"forgeskyboxes",
|
||||
"fps-reducer",
|
||||
"free-cam",
|
||||
"ftb-backups-2",
|
||||
@@ -65,6 +77,7 @@
|
||||
"hwyla",
|
||||
"iceberg",
|
||||
"ignitioncoil",
|
||||
"illager-raid-music",
|
||||
"inmisaddon",
|
||||
"iris-flywheel-compat",
|
||||
"irisshaders",
|
||||
@@ -80,8 +93,10 @@
|
||||
"legendary-tooltips",
|
||||
"lighty",
|
||||
"loot-capacitor-tooltips",
|
||||
"loot-journal",
|
||||
"lootbeams",
|
||||
"magnesium-extras",
|
||||
"make-bubbles-pop",
|
||||
"menumobs",
|
||||
"minecraft-rich-presence",
|
||||
"model-gap-fix",
|
||||
@@ -95,10 +110,14 @@
|
||||
"oculus",
|
||||
"oldjavawarning",
|
||||
"overloaded-armor-bar",
|
||||
"particular",
|
||||
"packmenu",
|
||||
"packmodemenu",
|
||||
"particle-effects",
|
||||
"particle-effects-reforged",
|
||||
"particular",
|
||||
"particular-reforged",
|
||||
"reauth",
|
||||
"rebind-narrator",
|
||||
"reblured",
|
||||
"reeses-sodium-options",
|
||||
"reforgium",
|
||||
@@ -122,9 +141,9 @@
|
||||
"sodium-options-api",
|
||||
"sodium-rubidium-occlusion-culling-fix",
|
||||
"sound",
|
||||
"sound-reloader",
|
||||
"sound-filters",
|
||||
"sound-physics-remastered",
|
||||
"sound-reloader",
|
||||
"stellar-sky",
|
||||
"swingthroughgrass",
|
||||
"textrues-embeddium-options",
|
||||
@@ -138,7 +157,10 @@
|
||||
"vanillafix",
|
||||
"visuality",
|
||||
"waila-harvestability",
|
||||
"waila-stages",
|
||||
"wakes-reforged",
|
||||
"wawla",
|
||||
"welcome-screen",
|
||||
"xaeroplus",
|
||||
"yungs-menu-tweaks",
|
||||
"zume"
|
||||
@@ -147,6 +169,9 @@
|
||||
"all-of-fabric-6": {
|
||||
"forceIncludes": ["revelationary"]
|
||||
},
|
||||
"beyond-depth": {
|
||||
"forceIncludes": ["particular-reforged"]
|
||||
},
|
||||
"create-arcane-engineering": {
|
||||
"forceIncludes": ["just-enough-resources-jer"]
|
||||
},
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
"BadOptimizations",
|
||||
"BetterAdvancements",
|
||||
"betterbeds",
|
||||
"BetterF3",
|
||||
"BetterGrassify",
|
||||
"BetterThirdPerson",
|
||||
"BHMenu",
|
||||
"blur",
|
||||
@@ -22,14 +24,21 @@
|
||||
"cherishedworlds",
|
||||
"citresewn",
|
||||
"clickadv",
|
||||
"cobblemon-ui-tweaks",
|
||||
"compass-coords",
|
||||
"connectedness",
|
||||
"connector",
|
||||
"continuity",
|
||||
"controlling",
|
||||
"craftpresence",
|
||||
"cwb",
|
||||
"DisableCustomWorldsAdvice",
|
||||
"distraction_free_recipes",
|
||||
"drippyloadingscreen",
|
||||
"eating-animation",
|
||||
"emi",
|
||||
"emi_loot",
|
||||
"emi_trade",
|
||||
"emiffect",
|
||||
"emitrades",
|
||||
"entity_model_features",
|
||||
@@ -39,14 +48,17 @@
|
||||
"fallingleaves",
|
||||
"fancymenu",
|
||||
"fast-ip-ping",
|
||||
"fastquit",
|
||||
"FauxCustomEntityData",
|
||||
"feytweaks",
|
||||
"figura",
|
||||
"ForgeConfigScreens",
|
||||
"GeckoLibIrisCompat",
|
||||
"gpumemleakfix",
|
||||
"Highlighter",
|
||||
"ImmediatelyFast",
|
||||
"indium",
|
||||
"inventory-profiles-next",
|
||||
"iris",
|
||||
"iris-flywheel",
|
||||
"ItemBorders",
|
||||
@@ -66,9 +78,10 @@
|
||||
"PickUpNotifier",
|
||||
"PresenceFootsteps",
|
||||
"Prism",
|
||||
"reforgium",
|
||||
"reeses_sodium_options",
|
||||
"reforgium",
|
||||
"ResourcePackOverrides",
|
||||
"roughly-enough-items",
|
||||
"ryoamiclights",
|
||||
"screenshot_viewer",
|
||||
"Searchables",
|
||||
@@ -77,13 +90,24 @@
|
||||
"skinlayers3d",
|
||||
"sodium",
|
||||
"sorted_enchantments",
|
||||
"tooltipfix",
|
||||
"visuality",
|
||||
"VR-Combat",
|
||||
"WailaStages",
|
||||
"welcomescreen",
|
||||
"Xaeros_Minimap",
|
||||
"XaerosWorldMap",
|
||||
"YeetusExperimentus",
|
||||
"yungsmenutweaks",
|
||||
"Zoomify",
|
||||
"zume"
|
||||
],
|
||||
"globalForceIncludes": [],
|
||||
"modpacks": {}
|
||||
"modpacks": {
|
||||
"cobbleverse": {
|
||||
"excludes": [
|
||||
"cloth-config"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"accepts-transfers": {"env": "ACCEPTS_TRANSFERS"},
|
||||
"allow-flight": {"env": "ALLOW_FLIGHT"},
|
||||
"allow-nether": {"env": "ALLOW_NETHER"},
|
||||
"bug-report-link": {"env": "BUG_REPORT_LINK"},
|
||||
"announce-player-achievements": {"env": "ANNOUNCE_PLAYER_ACHIEVEMENTS"},
|
||||
"broadcast-console-to-ops": {"env": "BROADCAST_CONSOLE_TO_OPS"},
|
||||
"broadcast-rcon-to-ops": {"env": "BROADCAST_RCON_TO_OPS"},
|
||||
"bug-report-link": {"env": "BUG_REPORT_LINK"},
|
||||
"difficulty": {"env": "DIFFICULTY"},
|
||||
"enable-command-block": {"env": "ENABLE_COMMAND_BLOCK"},
|
||||
"enable-jmx-monitoring": {"env": "ENABLE_JMX"},
|
||||
@@ -42,14 +43,15 @@
|
||||
"previews-chat": {"env": "PREVIEWS_CHAT"},
|
||||
"pvp": {"env": "PVP"},
|
||||
"query.port": {"env": "QUERY_PORT"},
|
||||
"rate-limit": {"env": "RATE_LIMIT"},
|
||||
"rcon.password": {"env": "RCON_PASSWORD"},
|
||||
"rcon.port": {"env": "RCON_PORT"},
|
||||
"region-file-compression": {"env": "REGION_FILE_COMPRESSION"},
|
||||
"resource-pack": {"env": "RESOURCE_PACK"},
|
||||
"require-resource-pack": {"env": "RESOURCE_PACK_ENFORCE"},
|
||||
"resource-pack-id": {"env": "RESOURCE_PACK_ID"},
|
||||
"resource-pack-prompt": {"env": "RESOURCE_PACK_PROMPT"},
|
||||
"resource-pack-sha1": {"env": "RESOURCE_PACK_SHA1"},
|
||||
"require-resource-pack": {"env": "RESOURCE_PACK_ENFORCE"},
|
||||
"resource-pack": {"env": "RESOURCE_PACK"},
|
||||
"server-ip": {"env": "SERVER_IP"},
|
||||
"server-name": {"env": "SERVER_NAME"},
|
||||
"server-port": {"env": "SERVER_PORT"},
|
||||
|
||||
0
bin/mc-health → files/shims/mc-health
Executable file → Normal file
0
bin/mc-health → files/shims/mc-health
Executable file → Normal file
5
bin/mc-send-to-console → files/shims/mc-send-to-console
Executable file → Normal file
5
bin/mc-send-to-console → files/shims/mc-send-to-console
Executable file → Normal file
@@ -17,8 +17,9 @@ if [ ! -p "${CONSOLE_IN_NAMED_PIPE}" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$(id -u)" = 0 -a $UID != 0 ]; then
|
||||
exec $(getSudoFromDistro) minecraft bash -c "echo '$*' > '${CONSOLE_IN_NAMED_PIPE}'"
|
||||
if [[ "$(id -u)" = 0 ]] && [[ $UID != 0 ]]; then
|
||||
error "Exec needs to be run with user ID $UID"
|
||||
exit 2
|
||||
else
|
||||
echo "$@" >"${CONSOLE_IN_NAMED_PIPE}"
|
||||
fi
|
||||
0
bin/mcstatus → files/shims/mcstatus
Executable file → Normal file
0
bin/mcstatus → files/shims/mcstatus
Executable file → Normal file
@@ -1,2 +0,0 @@
|
||||
minecraft ALL=(ALL) NOPASSWD:/usr/bin/pkill
|
||||
minecraft ALL=(ALL) NOPASSWD:/usr/local/sbin/knockd
|
||||
134
images.json
Normal file
134
images.json
Normal file
@@ -0,0 +1,134 @@
|
||||
[
|
||||
{
|
||||
"tag": "latest",
|
||||
"notes": "Always tracks the most recent commit on the main branch",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "stable",
|
||||
"notes": "Always tracks the most recent release",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java24",
|
||||
"java": "24",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java24-graalvm",
|
||||
"java": "24",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java21",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java21-alpine",
|
||||
"java": "21",
|
||||
"distribution": "alpine",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java21-graalvm",
|
||||
"java": "21",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
},
|
||||
{
|
||||
"tag": "java21-jdk",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"jdk": true
|
||||
},
|
||||
{
|
||||
"tag": "java21-graalvm",
|
||||
"java": "21",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
},
|
||||
{
|
||||
"tag": "java17",
|
||||
"java": "17",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java17-alpine",
|
||||
"java": "17",
|
||||
"distribution": "alpine",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java17-graalvm",
|
||||
"java": "17",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java16",
|
||||
"java": "16",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64", "armv7"]
|
||||
},
|
||||
{
|
||||
"tag": "java11",
|
||||
"java": "11",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64", "armv7"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java8",
|
||||
"java": "8",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64", "armv7"],
|
||||
"lts": true
|
||||
},
|
||||
{"tag": "adopt13", "deprecated": true},
|
||||
{"tag": "adopt14", "deprecated": true},
|
||||
{"tag": "adopt15", "deprecated": true},
|
||||
{"tag": "openj9-nightly", "deprecated": true},
|
||||
{"tag": "multiarch-latest", "deprecated": true},
|
||||
{"tag": "java16-openj9", "deprecated": true},
|
||||
{"tag": "java17-graalvm-ce", "deprecated": true},
|
||||
{"tag": "java17-openj9", "deprecated": true},
|
||||
{"tag": "java19", "deprecated": true},
|
||||
{"tag": "java20-graalvm", "deprecated": true},
|
||||
{"tag": "java20", "deprecated": true},
|
||||
{"tag": "java20-alpine", "deprecated": true},
|
||||
{"tag": "java23", "deprecated": true},
|
||||
{"tag": "java8-multiarch", "deprecated": true},
|
||||
{"tag": "java8-alpine", "deprecated": true},
|
||||
{"tag": "java8-jdk", "deprecated": true},
|
||||
{"tag": "java8-openj9", "deprecated": true},
|
||||
{"tag": "java8-graalvm-ce", "deprecated": true}
|
||||
]
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 48 KiB |
@@ -50,7 +50,7 @@ fi
|
||||
|
||||
if isTrue "${DEBUG_MEMORY:-false}"; then
|
||||
log "Memory usage and availability (in MB)"
|
||||
uname -a
|
||||
uname -parts
|
||||
free -m
|
||||
fi
|
||||
|
||||
@@ -101,21 +101,38 @@ if isTrue "${ENABLE_AUTOPAUSE}" && isTrue "${ENABLE_AUTOSTOP}"; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
proxyArgs=()
|
||||
if [[ $PROXY ]]; then
|
||||
export http_proxy="$PROXY"
|
||||
export https_proxy="$PROXY"
|
||||
export JAVA_TOOL_OPTIONS+="-Djava.net.useSystemProxies=true"
|
||||
log "INFO: Giving proxy time to startup..."
|
||||
sleep 5
|
||||
|
||||
IFS=":"
|
||||
read -ra parts <<< "$PROXY"
|
||||
IFS=" "
|
||||
: "${PROXY_HOST=$(firstArrayElement parts)}"
|
||||
shiftArray parts
|
||||
: "${PROXY_PORT=$(firstArrayElement parts)}"
|
||||
fi
|
||||
|
||||
# https://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html
|
||||
proxyArgs=()
|
||||
function addToProxyArgs() {
|
||||
if [[ $2 ]]; then
|
||||
proxyArgs+=("-D$1=$2")
|
||||
fi
|
||||
}
|
||||
addToProxyArgs http.proxyHost "${PROXY_HOST:-}"
|
||||
addToProxyArgs http.proxyPort "${PROXY_PORT:-}"
|
||||
addToProxyArgs http.nonProxyHosts "${PROXY_NON_PROXY_HOSTS:-}"
|
||||
export MC_IMAGE_HELPER_OPTS+=" ${proxyArgs[*]}"
|
||||
|
||||
function fixJavaPath() {
|
||||
# Some Docker management UIs grab all the image declared variables and present them for configuration.
|
||||
# When upgrading images across Java versions, that creates a mismatch in PATH's expected by base image.
|
||||
# When upgrading images across Java versions, that creates parts mismatch in PATH's expected by base image.
|
||||
if ! which java > /dev/null; then
|
||||
logError " Your Docker provider has an annoying flaw where it"
|
||||
logError " tries to set PATH even though the container establishes"
|
||||
logError " a very specific value."
|
||||
logError " parts very specific value."
|
||||
sleep 2
|
||||
# now find where java might be
|
||||
for d in /opt/java/openjdk/bin /usr/bin; do
|
||||
@@ -139,6 +156,15 @@ cd /data || exit 1
|
||||
export DECLARED_TYPE=${TYPE^^}
|
||||
export DECLARED_VERSION="$VERSION"
|
||||
|
||||
if isTrue "${VERSION_FROM_MODRINTH_PROJECTS:-}" && [[ ${MODRINTH_PROJECTS:-} ]]; then
|
||||
if ! VERSION=$(mc-image-helper version-from-modrinth-projects --projects "${MODRINTH_PROJECTS}"); then
|
||||
logError "failed to resolve version from MODRINTH_PROJECTS: ${MODRINTH_PROJECTS}"
|
||||
exit 1
|
||||
fi
|
||||
log "Resolved Minecraft version $VERSION from Modrinth projects"
|
||||
export VERSION
|
||||
fi
|
||||
|
||||
if isTrue "${ENABLE_AUTOPAUSE}"; then
|
||||
"${SCRIPTS:-/}start-autopause"
|
||||
fi
|
||||
@@ -147,11 +173,11 @@ if isTrue "${ENABLE_AUTOSTOP}"; then
|
||||
"${SCRIPTS:-/}start-autostop"
|
||||
fi
|
||||
|
||||
if
|
||||
if
|
||||
[[ "$RCON_CMDS_STARTUP" ]] ||
|
||||
[[ "$RCON_CMDS_ON_CONNECT" ]] ||
|
||||
[[ "$RCON_CMDS_ON_DISCONNECT" ]] ||
|
||||
[[ "$RCON_CMDS_FIRST_CONNECT" ]] ||
|
||||
[[ "$RCON_CMDS_ON_DISCONNECT" ]] ||
|
||||
[[ "$RCON_CMDS_FIRST_CONNECT" ]] ||
|
||||
[[ "$RCON_CMDS_LAST_DISCONNECT" ]]
|
||||
then
|
||||
log "Starting RCON commands"
|
||||
@@ -250,7 +276,7 @@ case "${TYPE^^}" in
|
||||
exec "${SCRIPTS:-/}start-deployKetting" "$@"
|
||||
;;
|
||||
|
||||
MOHIST)
|
||||
MOHIST|YOUER|BANNER)
|
||||
exec "${SCRIPTS:-/}start-deployMohist" "$@"
|
||||
;;
|
||||
|
||||
@@ -274,16 +300,32 @@ case "${TYPE^^}" in
|
||||
exec "${SCRIPTS:-/}start-deployLimbo" "$@"
|
||||
;;
|
||||
|
||||
NANOLIMBO)
|
||||
exec "${SCRIPTS:-/}start-deployNanoLimbo" "$@"
|
||||
;;
|
||||
|
||||
CRUCIBLE)
|
||||
exec "${SCRIPTS:-/}start-deployCrucible" "$@"
|
||||
;;
|
||||
|
||||
LEAF)
|
||||
exec "${SCRIPTS:-/}start-deployLeaf" "$@"
|
||||
;;
|
||||
|
||||
ARCLIGHT)
|
||||
exec "${SCRIPTS:-/}start-deployArcLight" "$@"
|
||||
;;
|
||||
|
||||
POSEIDON)
|
||||
exec "${SCRIPTS:-/}start-deployPoseidon" "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
logError "Invalid TYPE: '$TYPE'"
|
||||
logError "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FOLIA, PURPUR, FABRIC, QUILT,"
|
||||
logError " SPONGEVANILLA, CUSTOM, MAGMA, MOHIST, CATSERVER, AIRPLANE, PUFFERFISH,"
|
||||
logError " CANYON, LIMBO, CRUCIBLE"
|
||||
logError " CANYON, LIMBO, NANOLIMBO, CRUCIBLE, LEAF, YOUER, BANNER"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
esac
|
||||
|
||||
41
scripts/start-deployArcLight
Executable file
41
scripts/start-deployArcLight
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-$(dirname "$0")}/start-utils"
|
||||
set -o pipefail
|
||||
set -e
|
||||
isDebugging && set -x
|
||||
|
||||
resolveVersion
|
||||
: "${ARCLIGHT_RELEASE:=latest}"
|
||||
: "${ARCLIGHT_TYPE:=neoforge}"
|
||||
|
||||
arclightReleasesUrl=https://api.github.com/repos/IzzelAliz/Arclight/releases
|
||||
if [[ ${ARCLIGHT_RELEASE^^} = LATEST ]]; then
|
||||
arclightReleaseUrl=${arclightReleasesUrl}/latest
|
||||
else
|
||||
arclightReleaseUrl=${arclightReleasesUrl}/tags/${ARCLIGHT_RELEASE}
|
||||
fi
|
||||
|
||||
if ! downloadUrl=$(get --json-path "$.assets[?(@.name =~ /arclight-${ARCLIGHT_TYPE,,}-${VERSION}-.*\.jar/)].browser_download_url" \
|
||||
--accept "application/vnd.github.v3+json" "$arclightReleaseUrl"); then
|
||||
logError "Failed to access ${ARCLIGHT_RELEASE} release of Arclight"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $downloadUrl = null ]]; then
|
||||
logError "Failed to locate Arclight jar for $VERSION from ${ARCLIGHT_RELEASE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Downloading Arclight from $downloadUrl"
|
||||
if ! SERVER=$(get --skip-existing --output-filename -o /data "$downloadUrl"); then
|
||||
logError "Arclight jar from $downloadUrl"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export SERVER
|
||||
export FAMILY=HYBRID
|
||||
export HYBRIDTYPE="${ARCLIGHT_TYPE,,}"
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
@@ -21,9 +21,20 @@ set -eu
|
||||
: "${CF_DOWNLOADS_REPO=$([ -d /downloads ] && echo '/downloads' || echo '')}"
|
||||
: "${CF_MODPACK_MANIFEST:=}"
|
||||
: "${CF_API_CACHE_DEFAULT_TTL:=}" # as ISO-8601 duration, such as P2D or PT12H
|
||||
: "${CF_API_KEY_FILE:=}" # Path to file containing CurseForge API key
|
||||
|
||||
resultsFile=/data/.install-curseforge.env
|
||||
|
||||
if [[ -n ${CF_API_KEY_FILE} ]]; then
|
||||
if [[ -r "${CF_API_KEY_FILE}" ]]; then
|
||||
CF_API_KEY="$(cat "${CF_API_KEY_FILE}")"
|
||||
export CF_API_KEY
|
||||
else
|
||||
logError "CF_API_KEY_FILE is not readable: ${CF_API_KEY_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
isDebugging && set -x
|
||||
|
||||
ensureRemoveAllModsOff "MODPACK_PLATFORM=AUTO_CURSEFORGE"
|
||||
|
||||
@@ -70,38 +70,19 @@ function downloadSpigot {
|
||||
esac
|
||||
|
||||
if [[ ${VERSION^^} = LATEST ]]; then
|
||||
if ! VERSION=$(restify ${getBukkitSpigotUrl} --attribute='property=og:title' | jq -r '.[0] | .attributes | select(.property == "og:title") | .content | split(" ") | .[-1]'); then
|
||||
if ! downloadUrl=$(restify "${getBukkitBaseUrl}/${getbukkitFlavor}" --id='downloadr' | jq -r '.[0] | .href '); then
|
||||
logError "Failed to retrieve latest version from ${getBukkitSpigotUrl} -- site might be down"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z $downloadUrl ]]; then
|
||||
downloadBaseUrl="https://"
|
||||
downloadSuffixUrl=".getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VERSION}.jar"
|
||||
if versionLessThan 1.16.5 || { [[ ${getbukkitFlavor} = "craftbukkit" ]] && [[ ${VERSION} = "1.16.5" ]] ; }; then
|
||||
downloadBaseUrl+="cdn"
|
||||
else
|
||||
downloadBaseUrl+="download"
|
||||
fi
|
||||
downloadUrl="${downloadBaseUrl}${downloadSuffixUrl}"
|
||||
downloadUrl="https://cdn.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VERSION}.jar"
|
||||
fi
|
||||
|
||||
setServerVar
|
||||
curlArgs=()
|
||||
if [ -f "$SERVER" ] && ! isTrue "$FORCE_REDOWNLOAD"; then
|
||||
# tell curl to only download when newer
|
||||
curlArgs+=(-z "$SERVER")
|
||||
fi
|
||||
if isDebugging; then
|
||||
curlArgs+=(-v)
|
||||
fi
|
||||
log "Downloading $match from $downloadUrl ..."
|
||||
log "Downloading $match from $downloadUrl if missing ..."
|
||||
|
||||
tempFile="$SERVER.$$"
|
||||
|
||||
# HTTP error or download site responded with an HTML error page
|
||||
if ! curl -fsSL -o "$tempFile" "${curlArgs[@]}" "$downloadUrl" || ( [ -f "$tempFile" ] && grep -iq "doctype html" "$tempFile" ); then
|
||||
if ! SERVER=$(get -o /data --skip-existing --output-filename "$downloadUrl"); then
|
||||
|
||||
cat <<EOF
|
||||
|
||||
@@ -111,29 +92,9 @@ ERROR: failed to download from $downloadUrl
|
||||
Click into the version entry to find the **exact** version.
|
||||
|
||||
EOF
|
||||
|
||||
if isDebugging && grep -iq "doctype html" "$tempFile"; then
|
||||
cat "$tempFile"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$SERVER" ]; then
|
||||
log "Continuing with existing $SERVER file"
|
||||
else
|
||||
# remove invalid download
|
||||
rm "$tempFile"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
else
|
||||
if [ -f "$tempFile" ]; then
|
||||
mv "$tempFile" "$SERVER"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
JVM_OPTS="${JVM_OPTS} -DIReallyKnowWhatIAmDoingISwear"
|
||||
export JVM_OPTS
|
||||
export SERVER
|
||||
}
|
||||
|
||||
function setServerVar {
|
||||
@@ -157,6 +118,8 @@ else
|
||||
downloadSpigot
|
||||
fi
|
||||
|
||||
JVM_OPTS="${JVM_OPTS} -DIReallyKnowWhatIAmDoingISwear"
|
||||
export JVM_OPTS
|
||||
# Normalize on Spigot for operations below
|
||||
export FAMILY=SPIGOT
|
||||
|
||||
|
||||
@@ -28,5 +28,6 @@ if [ ! -f ${SERVER} ]; then
|
||||
fi
|
||||
|
||||
export FAMILY=HYBRID
|
||||
export HYBRIDTYPE=forge
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
|
||||
@@ -56,5 +56,6 @@ fi
|
||||
|
||||
export SERVER
|
||||
export FAMILY=HYBRID
|
||||
export HYBRIDTYPE=forge
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
|
||||
@@ -40,5 +40,6 @@ fi
|
||||
|
||||
# Allow for overriding Family on custom for testing.
|
||||
export FAMILY="${FAMILY:-HYBRID}"
|
||||
export HYBRIDTYPE="${HYBRIDTYPE:-any}"
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
|
||||
@@ -36,6 +36,12 @@ function getModLoaderVersion() {
|
||||
function getMinecraftVersion() {
|
||||
jq -r ".modPackTargets.mcVersion" ${ftbManifest}
|
||||
}
|
||||
function getModpackName() {
|
||||
jq -r ".name" ${ftbManifest}
|
||||
}
|
||||
function getModpackVersion() {
|
||||
jq -r ".versionName" ${ftbManifest}
|
||||
}
|
||||
|
||||
if [[ $(getDistro) = alpine ]]; then
|
||||
logError "The FTBA installer is not supported on Alpine. Use the java8-multiarch image tag instead."
|
||||
@@ -102,7 +108,9 @@ modLoader="$(getModLoaderName)"
|
||||
modLoaderVersion="$(getModLoaderVersion)"
|
||||
mcVersion=$(getMinecraftVersion)
|
||||
VERSION="$mcVersion"
|
||||
export VERSION
|
||||
MODPACK_NAME=$(getModpackName)
|
||||
MODPACK_VERSION=$(getModpackVersion)
|
||||
export VERSION MODPACK_NAME MODPACK_VERSION
|
||||
|
||||
variants=(
|
||||
run.sh
|
||||
|
||||
@@ -9,15 +9,24 @@ export TYPE=FABRIC
|
||||
: "${FABRIC_LAUNCHER:=}"
|
||||
: "${FABRIC_LAUNCHER_URL:=}"
|
||||
: "${FABRIC_LOADER_VERSION:=LATEST}"
|
||||
: "${FABRIC_FORCE_REINSTALL:=false}"
|
||||
|
||||
resultsFile=/data/.install-fabric.env
|
||||
|
||||
isDebugging && set -x
|
||||
|
||||
commonArgs=(
|
||||
--results-file="${resultsFile}"
|
||||
)
|
||||
if isTrue "${FABRIC_FORCE_REINSTALL}"; then
|
||||
log "Forcing re-install of Fabric"
|
||||
commonArgs+=(--force-reinstall)
|
||||
fi
|
||||
|
||||
# Custom fabric jar
|
||||
if [[ $FABRIC_LAUNCHER ]]; then
|
||||
if ! mc-image-helper install-fabric-loader \
|
||||
--results-file=${resultsFile} \
|
||||
"${commonArgs[@]}" \
|
||||
--from-local-file="$FABRIC_LAUNCHER"; then
|
||||
logError "Failed to use provided Fabric launcher"
|
||||
exit 1
|
||||
@@ -26,7 +35,7 @@ if [[ $FABRIC_LAUNCHER ]]; then
|
||||
# Custom fabric jar url
|
||||
elif [[ $FABRIC_LAUNCHER_URL ]]; then
|
||||
if ! mc-image-helper install-fabric-loader \
|
||||
--results-file=${resultsFile} \
|
||||
"${commonArgs[@]}" \
|
||||
--from-url="$FABRIC_LAUNCHER_URL"; then
|
||||
logError "Failed to installFabric launcher from $FABRIC_LAUNCHER_URL"
|
||||
exit 1
|
||||
@@ -35,7 +44,7 @@ elif [[ $FABRIC_LAUNCHER_URL ]]; then
|
||||
# Official fabric launcher
|
||||
else
|
||||
if ! mc-image-helper install-fabric-loader \
|
||||
--results-file=${resultsFile} \
|
||||
"${commonArgs[@]}" \
|
||||
--minecraft-version="${VERSION}" \
|
||||
--installer-version="${FABRIC_LAUNCHER_VERSION}" \
|
||||
--loader-version="${FABRIC_LOADER_VERSION}"; then
|
||||
|
||||
@@ -28,5 +28,6 @@ export EXTRA_ARGS
|
||||
|
||||
export SERVER
|
||||
export FAMILY=HYBRID
|
||||
export HYBRIDTYPE=forge
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
|
||||
51
scripts/start-deployLeaf
Normal file
51
scripts/start-deployLeaf
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-$(dirname "$0")}/start-utils"
|
||||
set -o pipefail
|
||||
set -e
|
||||
isDebugging && set -x
|
||||
|
||||
resolveVersion
|
||||
: "${LEAF_BUILD:=LATEST}"
|
||||
|
||||
# Docs at https://api.leafmc.one/docs/swagger-ui/index.html
|
||||
leafApiUrl="https://api.leafmc.one/v2/projects/leaf"
|
||||
leafDownloadsPage="https://www.leafmc.one/download"
|
||||
|
||||
if ! get --exists "${leafApiUrl}/versions/${VERSION}/builds"; then
|
||||
logError "Leaf builds do not exist for ${VERSION}"
|
||||
logError " check ${leafDownloadsPage} for available versions"
|
||||
logError " and set VERSION accordingly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${LEAF_BUILD^^}" == "LATEST" ]]; then
|
||||
# Get the latest build number from the API, which will be the last object in the builds array
|
||||
if ! buildNumber=$(
|
||||
get --json-path '$.builds[-1].build' "${leafApiUrl}/versions/${VERSION}/builds"
|
||||
); then
|
||||
logError "failed to list Leaf builds for ${VERSION}"
|
||||
exit 1
|
||||
fi
|
||||
LEAF_BUILD="${buildNumber}"
|
||||
fi
|
||||
|
||||
if ! filename=$(
|
||||
get --json-path='$.downloads.primary.name' --json-value-when-missing="" "${leafApiUrl}/versions/${VERSION}/builds/${LEAF_BUILD}"
|
||||
); then
|
||||
logError "Failed to retrieve download filename"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SERVER="/data/$filename"
|
||||
|
||||
if ! get --skip-existing --log-progress-each -o "${SERVER}" "${leafApiUrl}/versions/${VERSION}/builds/${LEAF_BUILD}/downloads/${filename}"; then
|
||||
logError "Failed to download"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export FAMILY=SPIGOT
|
||||
export SERVER
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
@@ -65,4 +65,4 @@ fi
|
||||
export LEVEL
|
||||
|
||||
export FAMILY=LIMBO
|
||||
exec ${SCRIPTS:-/}start-setupWorld $@
|
||||
exec ${SCRIPTS:-/}start-setupWorld "$@"
|
||||
|
||||
@@ -25,5 +25,6 @@ fi
|
||||
|
||||
export SERVER
|
||||
export FAMILY=HYBRID
|
||||
export HYBRIDTYPE=forge
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
|
||||
@@ -34,5 +34,6 @@ fi
|
||||
|
||||
export SERVER
|
||||
export FAMILY=HYBRID
|
||||
export HYBRIDTYPE=forge
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
|
||||
@@ -14,6 +14,7 @@ resultsFile=/data/.install-modrinth.env
|
||||
: "${MODRINTH_FORCE_INCLUDE_FILES=}"
|
||||
: "${MODRINTH_OVERRIDES_EXCLUSIONS=}"
|
||||
: "${MODRINTH_DEFAULT_EXCLUDE_INCLUDES=/image/modrinth-exclude-include.json}"
|
||||
: "${MODRINTH_FORCE_MODLOADER_REINSTALL:=${FORCE_MODLOADER_REINSTALL:-false}}"
|
||||
|
||||
if [[ ! $MODRINTH_MODPACK ]]; then
|
||||
logError "MODRINTH_MODPACK must be set when using TYPE/MODPACK_PLATFORM/MOD_PLATFORM of MODRINTH"
|
||||
@@ -33,6 +34,9 @@ args=(
|
||||
if [[ $MODRINTH_IGNORE_MISSING_FILES ]]; then
|
||||
args+=(--ignore-missing-files "$MODRINTH_IGNORE_MISSING_FILES")
|
||||
fi
|
||||
if isTrue "${MODRINTH_FORCE_MODLOADER_REINSTALL}"; then
|
||||
args+=(--force-modloader-reinstall)
|
||||
fi
|
||||
|
||||
case "${VERSION^^}" in
|
||||
LATEST)
|
||||
|
||||
@@ -9,46 +9,56 @@ isDebugging && set -x
|
||||
resolveVersion
|
||||
: "${MOHIST_BUILD:=lastSuccessfulBuild}"
|
||||
|
||||
mohistBaseUrl="https://mohistmc.com/api/v2/projects/mohist/"
|
||||
mohistApiUrl="${mohistBaseUrl}${VERSION}/builds/"
|
||||
# Docs at https://mohistmc.com/mohistmc-api
|
||||
mohistType="${TYPE,,}"
|
||||
mohistApiUrl="https://api.mohistmc.com/project/${mohistType}"
|
||||
mohistDownloadsPage="https://mohistmc.com/downloadSoftware?project=${mohistType}"
|
||||
|
||||
function logMohistAvailableVerisons(){
|
||||
logError " check ${mohistBaseUrl} for available versions"
|
||||
if ! get --exists "${mohistApiUrl}/${VERSION}/builds"; then
|
||||
logError "${mohistType} builds do not exist for ${VERSION}"
|
||||
logError " check ${mohistDownloadsPage} for available versions"
|
||||
logError " and set VERSION accordingly"
|
||||
}
|
||||
|
||||
if ! get --exists "${mohistApiUrl}"; then
|
||||
logError "Mohist builds do not exist for ${VERSION}"
|
||||
logMohistAvailableVerisons
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${MOHIST_BUILD}" == "lastSuccessfulBuild" ]]; then
|
||||
# Get the latest build number from the API
|
||||
buildNumber=$(
|
||||
get --json-path '$.builds[-1].number' "${mohistApiUrl}"
|
||||
)
|
||||
if ! buildNumber=$(
|
||||
get --json-path '$[0].id' "${mohistApiUrl}/${VERSION}/builds"
|
||||
); then
|
||||
logError "failed to list ${mohistType} builds for ${VERSION}"
|
||||
exit 1
|
||||
fi
|
||||
MOHIST_BUILD="${buildNumber}"
|
||||
fi
|
||||
|
||||
downloadUrl=$(
|
||||
get --json-path "$.builds[?(@.number==${MOHIST_BUILD})].url" "${mohistApiUrl}"
|
||||
)
|
||||
downloadUrl="${mohistApiUrl}/${VERSION}/builds/${MOHIST_BUILD}/download"
|
||||
|
||||
if [[ -z "${downloadUrl}" ]]; then
|
||||
logError "Could not find build ${MOHIST_BUILD} for version ${VERSION}"
|
||||
logMohistAvailableVerisons
|
||||
logError " check ${mohistDownloadsPage} for available versions"
|
||||
logError " and set VERSION accordingly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SERVER="/data/mohist-${VERSION}-${MOHIST_BUILD}-server.jar"
|
||||
SERVER="/data/${mohistType}-${VERSION}-${MOHIST_BUILD}-server.jar"
|
||||
|
||||
if [ ! -f "${SERVER}" ]; then
|
||||
log "Downloading Mohist build ${MOHIST_BUILD} for ${VERSION}"
|
||||
log "Downloading ${mohistType^} build ${MOHIST_BUILD} for ${VERSION}"
|
||||
get -o "${SERVER}" "${downloadUrl}"
|
||||
fi
|
||||
|
||||
export FAMILY=HYBRID
|
||||
if [[ "${mohistType}" == "mohist" ]]; then
|
||||
export HYBRIDTYPE=forge
|
||||
elif [[ "${mohistType}" == "youer" ]]; then
|
||||
export HYBRIDTYPE=neoforge
|
||||
elif [[ "${mohistType}" == "banner" ]]; then
|
||||
export HYBRIDTYPE=fabric
|
||||
else
|
||||
log "Unknown server type"
|
||||
fi
|
||||
|
||||
export SERVER
|
||||
export FAMILY=HYBRID
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
|
||||
19
scripts/start-deployNanoLimbo
Executable file
19
scripts/start-deployNanoLimbo
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-/}start-utils"
|
||||
isDebugging && set -x
|
||||
|
||||
if ! SERVER=$(mc-image-helper github download-latest-asset \
|
||||
--output-directory=/data \
|
||||
--name-pattern="NanoLimbo-.+?(?<!-sources)\.jar" \
|
||||
BoomEaro/NanoLimbo
|
||||
); then
|
||||
logError "Failed to download NanoLimbo"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export SERVER
|
||||
export FAMILY=LIMBO
|
||||
|
||||
exec ${SCRIPTS:-/}start-setupMounts "$@"
|
||||
@@ -10,7 +10,7 @@ handleDebugMode
|
||||
: "${PAPER_CHANNEL:=default}"
|
||||
: "${PAPER_DOWNLOAD_URL:=}"
|
||||
: "${PAPER_CUSTOM_JAR:=}"
|
||||
: "${PAPER_CONFIG_DEFAULTS_REPO:=${PAPER_CONFIG_REPO:=https://raw.githubusercontent.com/dayyeeet/minecraft-default-configs/main}}"
|
||||
: "${PAPER_CONFIG_DEFAULTS_REPO:=${PAPER_CONFIG_REPO:=https://raw.githubusercontent.com/Shonz1/minecraft-default-configs/main}}"
|
||||
|
||||
resultsFile=/data/.paper.env
|
||||
if [[ $PAPER_CUSTOM_JAR ]]; then
|
||||
|
||||
37
scripts/start-deployPoseidon
Normal file
37
scripts/start-deployPoseidon
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-$(dirname "$0")}/start-utils"
|
||||
set -o pipefail
|
||||
set -e
|
||||
isDebugging && set -x
|
||||
|
||||
resolveVersion
|
||||
|
||||
if [ "${VERSION}" != "b1.7.3" ]; then
|
||||
logError "Poseidon server type only supports VERSION=b1.7.3"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# : "${POSEIDON_RELEASE:=latest}" placeholder until I figure out how to add version selection with mc-image-helper
|
||||
: "${POSEIDON_TYPE:=poseidon}"
|
||||
|
||||
if [[ ${POSEIDON_TYPE^^} = UBERBUKKIT ]]; then
|
||||
poseidonRepo="Moresteck/uberbukkit"
|
||||
else
|
||||
poseidonRepo="retromcorg/Project-Poseidon"
|
||||
fi
|
||||
|
||||
if ! SERVER=$(mc-image-helper github download-latest-asset \
|
||||
--output-directory=/data \
|
||||
--name-pattern="^(?!original-).+\.jar" \
|
||||
${poseidonRepo}
|
||||
); then
|
||||
logError "Failed to download ${POSEIDON_TYPE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export SERVER
|
||||
export FAMILY=SPIGOT
|
||||
|
||||
exec "${SCRIPTS:-/}start-spiget" "$@"
|
||||
@@ -21,7 +21,9 @@ PUFFERFISH_BUILD_JSON=$(curl -X GET -s "https://ci.pufferfish.host/job/Pufferfis
|
||||
PUFFERFISH_BUILD_URL=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.url // empty' )
|
||||
# Example: "fileName": "pufferfish-paperclip-1.18.2-R0.1-SNAPSHOT-reobf.jar",
|
||||
PUFFERFISH_BUILD_FILENAME=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.artifacts[].fileName // empty' )
|
||||
PUFFERFISH_BUILD_DOWNLOAD_URL="${PUFFERFISH_BUILD_URL}artifact/build/libs/${PUFFERFISH_BUILD_FILENAME}"
|
||||
# Example: "relativePath": "pufferfish-server/build/libs/pufferfish-paperclip-1.21.7-R0.1-SNAPSHOT-mojmap.jar",
|
||||
PUFFERFISH_BUILD_PATH=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.artifacts[].relativePath // empty' )
|
||||
PUFFERFISH_BUILD_DOWNLOAD_URL="${PUFFERFISH_BUILD_URL}artifact/${PUFFERFISH_BUILD_PATH}"
|
||||
|
||||
# Setting server to the Jar filename for export.
|
||||
export SERVER=$PUFFERFISH_BUILD_FILENAME
|
||||
|
||||
@@ -151,16 +151,38 @@ if isTrue "${ENABLE_JMX}"; then
|
||||
log "JMX is enabled. Make sure you have port forwarding for ${JMX_PORT}"
|
||||
fi
|
||||
|
||||
if isTrue "${USE_MEOWICE_FLAGS}"; then
|
||||
java_major_version=$(mc-image-helper java-release)
|
||||
if [[ $java_major_version -gt 16 ]]; then
|
||||
USE_MEOWICE_GRAALVM_FLAGS="${USE_MEOWICE_GRAALVM_FLAGS:-TRUE}"
|
||||
log "Java version $java_major_version using MeowIce's flags for Java 17+"
|
||||
else
|
||||
log "Your Java version is $java_major_version, MeowIce's flags are for Java 17+ falling back to Aikar's"
|
||||
USE_MEOWICE_FLAGS=FALSE
|
||||
fi
|
||||
USE_AIKAR_FLAGS=TRUE
|
||||
fi
|
||||
|
||||
if isTrue "${USE_AIKAR_FLAGS}"; then
|
||||
# From https://mcflags.emc.gs/
|
||||
|
||||
if [[ $MAX_MEMORY ]] && (( $(normalizeMemSize "${MAX_MEMORY}") >= $(normalizeMemSize 12g) )); then
|
||||
if isTrue "${USE_MEOWICE_FLAGS}"; then
|
||||
log "Using MeowIce's flags"
|
||||
G1NewSizePercent=28
|
||||
G1MaxNewSizePercent=50
|
||||
G1HeapRegionSize=16M
|
||||
G1ReservePercent=15
|
||||
InitiatingHeapOccupancyPercent=20
|
||||
G1MixedGCCountTarget=3
|
||||
G1RSetUpdatingPauseTimePercent=0
|
||||
elif [[ $MAX_MEMORY ]] && (( $(normalizeMemSize "${MAX_MEMORY}") >= $(normalizeMemSize 12g) )); then
|
||||
log "Using Aikar's >12GB flags"
|
||||
G1NewSizePercent=40
|
||||
G1MaxNewSizePercent=50
|
||||
G1HeapRegionSize=16M
|
||||
G1ReservePercent=15
|
||||
InitiatingHeapOccupancyPercent=20
|
||||
G1MixedGCCountTarget=4
|
||||
G1RSetUpdatingPauseTimePercent=5
|
||||
else
|
||||
log "Using Aikar's flags"
|
||||
G1NewSizePercent=30
|
||||
@@ -168,6 +190,8 @@ if isTrue "${USE_AIKAR_FLAGS}"; then
|
||||
G1HeapRegionSize=8M
|
||||
G1ReservePercent=20
|
||||
InitiatingHeapOccupancyPercent=15
|
||||
G1MixedGCCountTarget=4
|
||||
G1RSetUpdatingPauseTimePercent=5
|
||||
fi
|
||||
|
||||
JVM_XX_OPTS="${JVM_XX_OPTS}
|
||||
@@ -182,10 +206,10 @@ if isTrue "${USE_AIKAR_FLAGS}"; then
|
||||
-XX:G1HeapRegionSize=${G1HeapRegionSize}
|
||||
-XX:G1ReservePercent=${G1ReservePercent}
|
||||
-XX:G1HeapWastePercent=5
|
||||
-XX:G1MixedGCCountTarget=4
|
||||
-XX:G1MixedGCCountTarget=${G1MixedGCCountTarget}
|
||||
-XX:InitiatingHeapOccupancyPercent=${InitiatingHeapOccupancyPercent}
|
||||
-XX:G1MixedGCLiveThresholdPercent=90
|
||||
-XX:G1RSetUpdatingPauseTimePercent=5
|
||||
-XX:G1RSetUpdatingPauseTimePercent=${G1RSetUpdatingPauseTimePercent}
|
||||
-XX:SurvivorRatio=32
|
||||
-XX:+PerfDisableSharedMem
|
||||
-XX:MaxTenuringThreshold=1
|
||||
@@ -194,6 +218,116 @@ if isTrue "${USE_AIKAR_FLAGS}"; then
|
||||
"
|
||||
fi
|
||||
|
||||
if isTrue "${USE_MEOWICE_FLAGS}"; then
|
||||
JVM_XX_OPTS="${JVM_XX_OPTS}
|
||||
-XX:+UnlockDiagnosticVMOptions
|
||||
-XX:G1SATBBufferEnqueueingThresholdPercent=30
|
||||
-XX:G1ConcMarkStepDurationMillis=5
|
||||
-XX:+UseNUMA
|
||||
-XX:-DontCompileHugeMethods
|
||||
-XX:MaxNodeLimit=240000
|
||||
-XX:NodeLimitFudgeFactor=8000
|
||||
-XX:ReservedCodeCacheSize=400M
|
||||
-XX:NonNMethodCodeHeapSize=12M
|
||||
-XX:ProfiledCodeHeapSize=194M
|
||||
-XX:NonProfiledCodeHeapSize=194M
|
||||
-XX:NmethodSweepActivity=1
|
||||
-XX:+UseFastUnorderedTimeStamps
|
||||
-XX:+UseCriticalJavaThreadPriority
|
||||
-XX:AllocatePrefetchStyle=3
|
||||
-XX:+AlwaysActAsServerClassMachine
|
||||
-XX:+UseTransparentHugePages
|
||||
-XX:LargePageSizeInBytes=2M
|
||||
-XX:+UseLargePages
|
||||
-XX:+EagerJVMCI
|
||||
-XX:+UseStringDeduplication
|
||||
-XX:+UseAES
|
||||
-XX:+UseAESIntrinsics
|
||||
-XX:+UseFMA
|
||||
-XX:+UseLoopPredicate
|
||||
-XX:+RangeCheckElimination
|
||||
-XX:+OptimizeStringConcat
|
||||
-XX:+UseCompressedOops
|
||||
-XX:+UseThreadPriorities
|
||||
-XX:+OmitStackTraceInFastThrow
|
||||
-XX:+RewriteBytecodes
|
||||
-XX:+RewriteFrequentPairs
|
||||
-XX:+UseFPUForSpilling
|
||||
-XX:+UseVectorCmov
|
||||
-XX:+UseXMMForArrayCopy
|
||||
-XX:+EliminateLocks
|
||||
-XX:+DoEscapeAnalysis
|
||||
-XX:+AlignVector
|
||||
-XX:+OptimizeFill
|
||||
-XX:+EnableVectorSupport
|
||||
-XX:+UseCharacterCompareIntrinsics
|
||||
-XX:+UseCopySignIntrinsic
|
||||
-XX:+UseVectorStubs
|
||||
"
|
||||
if [[ $(arch) == "x86_64" ]]; then
|
||||
JVM_XX_OPTS="${JVM_XX_OPTS}
|
||||
-XX:+UseFastStosb
|
||||
-XX:+UseNewLongLShift
|
||||
-XX:+UseXmmI2D
|
||||
-XX:+UseXmmI2F
|
||||
-XX:+UseXmmLoadAndClearUpper
|
||||
-XX:+UseXmmRegToRegMoveAll
|
||||
-XX:UseAVX=2
|
||||
-XX:UseSSE=4
|
||||
"
|
||||
else
|
||||
log "cpu not x86_64, disabling architecture specific flags"
|
||||
fi
|
||||
fi
|
||||
|
||||
if isTrue "${USE_MEOWICE_GRAALVM_FLAGS}"; then
|
||||
if [[ $java_major_version -gt 23 ]]; then
|
||||
log "Java 24 or higher detected, using modified GraalVM flags"
|
||||
JVM_XX_OPTS="${JVM_XX_OPTS}
|
||||
-XX:+UseFastJNIAccessors
|
||||
-XX:+UseInlineCaches
|
||||
-XX:+SegmentedCodeCache
|
||||
-Djdk.nio.maxCachedBufferSize=262144
|
||||
-Djdk.graal.UsePriorityInlining=true
|
||||
-Djdk.graal.Vectorization=true
|
||||
-Djdk.graal.OptDuplication=true
|
||||
-Djdk.graal.DetectInvertedLoopsAsCounted=true
|
||||
-Djdk.graal.LoopInversion=true
|
||||
-Djdk.graal.VectorizeHashes=true
|
||||
-Djdk.graal.EnterprisePartialUnroll=true
|
||||
-Djdk.graal.VectorizeSIMD=true
|
||||
-Djdk.graal.StripMineNonCountedLoops=true
|
||||
-Djdk.graal.SpeculativeGuardMovement=true
|
||||
-Djdk.graal.TuneInlinerExploration=1
|
||||
-Djdk.graal.LoopRotation=true
|
||||
-Djdk.graal.CompilerConfiguration=enterprise
|
||||
--enable-native-access=ALL-UNNAMED
|
||||
"
|
||||
else
|
||||
log "Using MeowIce's flags for Graalvm"
|
||||
JVM_XX_OPTS="${JVM_XX_OPTS}
|
||||
-XX:+UseFastJNIAccessors
|
||||
-XX:+UseInlineCaches
|
||||
-XX:+SegmentedCodeCache
|
||||
-Djdk.nio.maxCachedBufferSize=262144
|
||||
-Dgraal.UsePriorityInlining=true
|
||||
-Dgraal.Vectorization=true
|
||||
-Dgraal.OptDuplication=true
|
||||
-Dgraal.DetectInvertedLoopsAsCounted=true
|
||||
-Dgraal.LoopInversion=true
|
||||
-Dgraal.VectorizeHashes=true
|
||||
-Dgraal.EnterprisePartialUnroll=true
|
||||
-Dgraal.VectorizeSIMD=true
|
||||
-Dgraal.StripMineNonCountedLoops=true
|
||||
-Dgraal.SpeculativeGuardMovement=true
|
||||
-Dgraal.TuneInlinerExploration=1
|
||||
-Dgraal.LoopRotation=true
|
||||
-Dgraal.OptWriteMotion=true
|
||||
-Dgraal.CompilerConfiguration=enterprise
|
||||
"
|
||||
fi
|
||||
fi
|
||||
|
||||
if isTrue "${USE_FLARE_FLAGS}"; then
|
||||
JVM_XX_OPTS="${JVM_XX_OPTS}
|
||||
-XX:+UnlockDiagnosticVMOptions
|
||||
@@ -360,4 +494,3 @@ else
|
||||
exec mc-server-runner ${bootstrapArgs} "${mcServerRunnerArgs[@]}" java "${finalArgs[@]}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -14,7 +14,9 @@ handleDebugMode
|
||||
: "${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS:=}"
|
||||
: "${PATCH_DEFINITIONS:=}"
|
||||
: "${DEBUG:=false}"
|
||||
: "${DOWNLOAD_DEFAULTS:=}"
|
||||
: "${DOWNLOAD_DEFAULT_CONFIGS:=}"
|
||||
: "${SKIP_DOWNLOAD_DEFAULTS:=false}"
|
||||
|
||||
if isTrue "${REPLACE_ENV_IN_PLACE}"; then
|
||||
log "Replacing env variables in ${REPLACE_ENV_PATHS} that match the prefix '$REPLACE_ENV_VARIABLE_PREFIX' ..."
|
||||
@@ -27,22 +29,28 @@ if isTrue "${REPLACE_ENV_IN_PLACE}"; then
|
||||
"${REPLACE_ENV_PATHS[@]}"
|
||||
fi
|
||||
|
||||
if [[ $DOWNLOAD_DEFAULT_CONFIGS ]]; then
|
||||
log "Downloading default configs, if needed"
|
||||
if ! mc-image-helper mcopy \
|
||||
--to /data/config \
|
||||
--skip-existing --skip-up-to-date=false \
|
||||
"$DOWNLOAD_DEFAULT_CONFIGS" 2> /dev/null; then
|
||||
logWarning "One or more default config files were not available from $DOWNLOAD_DEFAULT_CONFIGS"
|
||||
if isFalse "$SKIP_DOWNLOAD_DEFAULTS"; then
|
||||
commonArgs=(
|
||||
--skip-existing
|
||||
--skip-up-to-date=false
|
||||
--quiet-when-skipped
|
||||
--ignore-missing-sources
|
||||
)
|
||||
if [[ $DOWNLOAD_DEFAULT_CONFIGS ]]; then
|
||||
if ! mc-image-helper mcopy \
|
||||
--to /data/config \
|
||||
"${commonArgs[@]}" \
|
||||
"$DOWNLOAD_DEFAULT_CONFIGS"; then
|
||||
logWarning "One or more default config files were not available from $DOWNLOAD_DEFAULT_CONFIGS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [[ $DOWNLOAD_DEFAULTS ]]; then
|
||||
log "Downloading default top-level configs, if needed"
|
||||
if ! mc-image-helper mcopy \
|
||||
--to /data \
|
||||
--skip-existing --skip-up-to-date=false \
|
||||
"$DOWNLOAD_DEFAULTS" 2> /dev/null; then
|
||||
logWarning "One or more default files were not available from $DOWNLOAD_DEFAULTS"
|
||||
if [[ $DOWNLOAD_DEFAULTS ]]; then
|
||||
if ! mc-image-helper mcopy \
|
||||
--to /data \
|
||||
"${commonArgs[@]}" \
|
||||
"$DOWNLOAD_DEFAULTS"; then
|
||||
logWarning "One or more default files were not available from $DOWNLOAD_DEFAULTS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -11,8 +11,20 @@ set -e -o pipefail
|
||||
: "${PLUGINS_FILE:=}"
|
||||
: "${REMOVE_OLD_MODS_DEPTH:=1} "
|
||||
: "${REMOVE_OLD_MODS_INCLUDE:=*.jar,*-version.json}"
|
||||
: "${CF_API_KEY_FILE:=}" # Path to file containing CurseForge API key
|
||||
: "${MODRINTH_LOADER:=}"
|
||||
sum_file=/data/.generic_pack.sum
|
||||
|
||||
if [[ -n ${CF_API_KEY_FILE} ]]; then
|
||||
if [[ -r "${CF_API_KEY_FILE}" ]]; then
|
||||
CF_API_KEY="$(cat "${CF_API_KEY_FILE}")"
|
||||
export CF_API_KEY
|
||||
else
|
||||
logError "CF_API_KEY_FILE is not readable: ${CF_API_KEY_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# shellcheck source=start-utils
|
||||
. "${SCRIPTS:-/}start-utils"
|
||||
isDebugging && set -x
|
||||
@@ -252,13 +264,21 @@ function handleModrinthProjects() {
|
||||
fi
|
||||
|
||||
if [[ $MODRINTH_PROJECTS ]]; then
|
||||
if isFamily HYBRID; then
|
||||
loader=forge
|
||||
|
||||
if isType CUSTOM; then
|
||||
if ! [[ $MODRINTH_LOADER ]]; then
|
||||
logError "MODRINTH_LOADER must be set when using TYPE=CUSTOM and MODRINTH_PROJECTS"
|
||||
exit 1
|
||||
fi
|
||||
loader="${MODRINTH_LOADER,,}"
|
||||
elif isFamily HYBRID; then
|
||||
loader=${HYBRIDTYPE}
|
||||
elif isFamily VANILLA; then
|
||||
loader=datapack
|
||||
else
|
||||
loader="${TYPE,,}"
|
||||
fi
|
||||
|
||||
mc-image-helper modrinth \
|
||||
--output-directory=/data \
|
||||
--world-directory="${LEVEL:-world}" \
|
||||
@@ -286,7 +306,7 @@ function handleCurseForgeFiles() {
|
||||
if isFamily HYBRID; then
|
||||
# To disambiguate mc-mods we'll assume that hybrid servers
|
||||
# are blending Forge (rather than Fabric or NeoForge)
|
||||
args+=(--mod-loader "forge")
|
||||
args+=(--mod-loader "${HYBRIDTYPE}")
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -411,7 +411,7 @@ function isFamily() {
|
||||
function isType() {
|
||||
for t in "${@}"; do
|
||||
# shellcheck disable=SC2153
|
||||
if [[ $TYPE == "$t" ]]; then
|
||||
if [[ ${TYPE^^} == "${t^^}" ]]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
@@ -538,4 +538,18 @@ function buildDownloadList() {
|
||||
result+="${repoUrl}/${version}/$c"
|
||||
done
|
||||
echo "$result"
|
||||
}
|
||||
}
|
||||
|
||||
function firstArrayElement {
|
||||
local -n a="$1"
|
||||
if (( ${#a[@]} )); then
|
||||
echo "${a[0]}"
|
||||
fi
|
||||
}
|
||||
|
||||
function shiftArray {
|
||||
local -n a="$1"
|
||||
if (( ${#a[@]} )); then
|
||||
a=("${a[@]:1}")
|
||||
fi
|
||||
}
|
||||
|
||||
3
tests/.gitignore
vendored
3
tests/.gitignore
vendored
@@ -1 +1,2 @@
|
||||
data/
|
||||
data/
|
||||
cf_api_key.secret
|
||||
18
tests/setuponlytests/auto_curseforge_file/docker-compose.yml
Normal file
18
tests/setuponlytests/auto_curseforge_file/docker-compose.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
services:
|
||||
mc:
|
||||
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
|
||||
environment:
|
||||
EULA: "true"
|
||||
SETUP_ONLY: "TRUE"
|
||||
MODPACK_PLATFORM: AUTO_CURSEFORGE
|
||||
CF_API_KEY_FILE: /run/secrets/cf_api_key
|
||||
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/the-pixelmon-modpack/files/5954570
|
||||
DEBUG: true
|
||||
volumes:
|
||||
- ./data:/data
|
||||
secrets:
|
||||
- cf_api_key
|
||||
secrets:
|
||||
cf_api_key:
|
||||
file: cf_api_key.secret
|
||||
|
||||
2
tests/setuponlytests/auto_curseforge_file/require.sh
Executable file
2
tests/setuponlytests/auto_curseforge_file/require.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
[[ -n "$CF_API_KEY" ]] || exit 1
|
||||
echo "$CF_API_KEY" > cf_api_key.secret || exit 1
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user