mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-03-14 18:51:24 +00:00
Compare commits
2 Commits
feat/apply
...
6894bcc0fb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6894bcc0fb | ||
|
|
b15a6cc59c |
1
.github/release.yml
vendored
1
.github/release.yml
vendored
@@ -2,7 +2,6 @@ changelog:
|
||||
exclude:
|
||||
authors:
|
||||
- dependabot
|
||||
- renovate
|
||||
categories:
|
||||
- title: Enhancements
|
||||
labels:
|
||||
|
||||
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -138,7 +138,7 @@ jobs:
|
||||
uses: docker/setup-qemu-action@v3.7.0
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v6.19.2
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
with:
|
||||
platforms: linux/amd64
|
||||
tags: ${{ env.IMAGE_TO_TEST }}
|
||||
@@ -178,7 +178,7 @@ jobs:
|
||||
password: ${{ github.token }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6.19.2
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
if: github.actor == github.repository_owner
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
|
||||
40
.github/workflows/issue-label.yml
vendored
40
.github/workflows/issue-label.yml
vendored
@@ -1,17 +1,33 @@
|
||||
name: Issues notify
|
||||
name: Issue labels
|
||||
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- opened
|
||||
- labeled
|
||||
- unlabeled
|
||||
- closed
|
||||
types: [labeled, reopened, closed, deleted]
|
||||
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_ISSUES_WEBHOOK }}
|
||||
|
||||
jobs:
|
||||
notify:
|
||||
uses: itzg/github-workflows/.github/workflows/issues-notify-discord.yml@main
|
||||
with:
|
||||
triageLabel: 'status/needs triage'
|
||||
secrets:
|
||||
discordWebhook: "${{secrets.DISCORD_ISSUES_WEBHOOK}}"
|
||||
labelNotify:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- name: notify on label
|
||||
if: >
|
||||
github.event.label.name == 'enhancement'
|
||||
|| github.event.label.name == 'bug'
|
||||
|| github.event.label.name == 'help wanted'
|
||||
|| github.event.label.name == 'priority/high'
|
||||
|| github.event.label.name == 'question'
|
||||
|| github.event.label.name == 'status/waiting on upstream'
|
||||
uses: Ilshidur/action-discord@master
|
||||
with:
|
||||
args: "[${{ github.event.issue.title }} (#${{ github.event.issue.number }})](<${{ github.event.issue.html_url }}>) added `${{ github.event.label.name }}` label"
|
||||
- name: notify on action change
|
||||
if: >
|
||||
github.event.action == 'closed'
|
||||
|| github.event.action == 'reopened'
|
||||
|| github.event.action == 'deleted'
|
||||
uses: Ilshidur/action-discord@master
|
||||
with:
|
||||
args: "[${{ github.event.issue.title }} (#${{ github.event.issue.number }})](<${{ github.event.issue.html_url }}>) has been `${{ github.event.action }}` by `${{ github.event.sender.login }}`"
|
||||
|
||||
4
.github/workflows/verify-pr.yml
vendored
4
.github/workflows/verify-pr.yml
vendored
@@ -62,7 +62,7 @@ jobs:
|
||||
uses: docker/setup-buildx-action@v3.12.0
|
||||
|
||||
- name: Confirm multi-arch build
|
||||
uses: docker/build-push-action@v6.19.2
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
with:
|
||||
platforms: ${{ matrix.platforms }}
|
||||
# ensure latest base image is used
|
||||
@@ -73,7 +73,7 @@ jobs:
|
||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||
|
||||
- name: Build for test
|
||||
uses: docker/build-push-action@v6.19.2
|
||||
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"
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
version: 2
|
||||
|
||||
python:
|
||||
install:
|
||||
- requirements: docs/requirements.txt
|
||||
|
||||
build:
|
||||
os: ubuntu-24.04
|
||||
tools:
|
||||
python: "3.14"
|
||||
python: latest
|
||||
jobs:
|
||||
# We recommend using a requirements file for reproducible builds.
|
||||
# This is just a quick example to get started.
|
||||
# https://docs.readthedocs.io/page/guides/reproducible-builds.html
|
||||
install:
|
||||
- pip install -r docs/requirements.txt
|
||||
- pip install zensical
|
||||
build:
|
||||
html:
|
||||
- zensical build
|
||||
|
||||
15
Dockerfile
15
Dockerfile
@@ -25,37 +25,32 @@ EXPOSE 25565
|
||||
ARG APPS_REV=1
|
||||
ARG GITHUB_BASEURL=https://github.com
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/easy-add
|
||||
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
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/restify
|
||||
ARG RESTIFY_VERSION=1.7.12
|
||||
ARG RESTIFY_VERSION=1.7.11
|
||||
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
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/rcon-cli
|
||||
ARG RCON_CLI_VERSION=1.7.4
|
||||
ARG RCON_CLI_VERSION=1.7.3
|
||||
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
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/mc-monitor
|
||||
ARG MC_MONITOR_VERSION=0.16.1
|
||||
ARG MC_MONITOR_VERSION=0.16.0
|
||||
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
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/mc-server-runner
|
||||
ARG MC_SERVER_RUNNER_VERSION=1.14.3
|
||||
ARG MC_SERVER_RUNNER_VERSION=1.14.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
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/mc-image-helper versioning=loose
|
||||
ARG MC_HELPER_VERSION=1.55.2
|
||||
ARG MC_HELPER_VERSION=1.54.0
|
||||
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
|
||||
|
||||
@@ -31,7 +31,6 @@ apk add --no-cache -U \
|
||||
libpcap \
|
||||
libwebp \
|
||||
libcap \
|
||||
numactl \
|
||||
${EXTRA_ALPINE_PACKAGES}
|
||||
|
||||
# Download and install patched knockd
|
||||
|
||||
@@ -27,7 +27,6 @@ apt-get install -y \
|
||||
lbzip2 \
|
||||
nfs-common \
|
||||
libpcap0.8 \
|
||||
libnuma1 \
|
||||
${EXTRA_DEB_PACKAGES}
|
||||
|
||||
# Install Git LFS
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
services:
|
||||
mc-dev:
|
||||
build:
|
||||
context: .
|
||||
environment:
|
||||
EULA: true
|
||||
volumes:
|
||||
- ./scripts:/image/scripts:ro
|
||||
- data:/data
|
||||
ports:
|
||||
- "25565:25565"
|
||||
stdin_open: true
|
||||
tty: true
|
||||
volumes:
|
||||
data:
|
||||
@@ -166,7 +166,7 @@ such as:
|
||||
|
||||
## HTTP Proxy
|
||||
|
||||
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/proxied/compose.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`.
|
||||
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
|
||||
|
||||
|
||||
@@ -1,84 +1,4 @@
|
||||
|
||||
## Simple image additions
|
||||
|
||||
You can easily build upon the base image using an inline Dockerfile.
|
||||
|
||||
```yaml title="compose.yaml"
|
||||
services:
|
||||
mc:
|
||||
build:
|
||||
context: .
|
||||
dockerfile_inline: |
|
||||
FROM itzg/minecraft-server:latest
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
webp \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
pull: true # Always pull new base image
|
||||
pull_policy: build
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
EULA: true
|
||||
ports:
|
||||
- "25565:25565/tcp"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
Here is an example to add Nvidia GPU support for C2ME:
|
||||
|
||||
??? Example "C2ME GPU example"
|
||||
```yaml title="compose.yaml"
|
||||
|
||||
services:
|
||||
mc:
|
||||
build:
|
||||
context: .
|
||||
dockerfile_inline: |
|
||||
FROM itzg/minecraft-server:java25
|
||||
|
||||
# Install OpenCL loader and NVIDIA driver capabilities
|
||||
RUN apt-get update && apt-get install -y \
|
||||
ocl-icd-libopencl1 \
|
||||
opencl-headers \
|
||||
clinfo \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 1. Create the vendor directory
|
||||
# 2. Tell OpenCL to use the NVIDIA library
|
||||
RUN mkdir -p /etc/OpenCL/vendors && \
|
||||
echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
|
||||
|
||||
# Tell the NVIDIA container runtime to expose all GPU capabilities (including compute/utility)
|
||||
ENV NVIDIA_VISIBLE_DEVICES all
|
||||
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,graphics,video
|
||||
|
||||
COPY ./mods /mods
|
||||
pull: true # Always pull new base image
|
||||
pull_policy: build
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: 1
|
||||
capabilities: [gpu]
|
||||
environment:
|
||||
EULA: true
|
||||
TYPE: "FABRIC"
|
||||
VERSION: 1.21.10
|
||||
MEMORY: 8G
|
||||
MODRINTH_PROJECTS: |-
|
||||
fabric-api
|
||||
c2me
|
||||
ports:
|
||||
- "25565:25565/tcp"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
|
||||
!!! 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.
|
||||
|
||||
@@ -11,15 +11,61 @@ Adding a new server `TYPE` can vary due to the complexity of obtaining and confi
|
||||
|
||||
## Iterative script development
|
||||
|
||||
The included `compose-dev.yml` will mount the local `scripts` code into the container and allow for iterative development. Replace `[-e key=value]` with any environment variables you wish to set for testing the modified scripts.
|
||||
Individual scripts can be iteratively developed, debugged, and tested using the following procedure.
|
||||
|
||||
```shell
|
||||
docker compose -f compose-dev.yml run --rm -it [-e key=value] mc-dev
|
||||
First, build a baseline of the image to include the packages needed by existing or new scripts:
|
||||
|
||||
PowerShell: (Example of building and testing ForgeAPI)
|
||||
```powershell
|
||||
$env:FOLDER_TO_TEST="forgeapimods_projectids"
|
||||
$env:IMAGE_TO_TEST="mc-dev"
|
||||
docker build -t $env:IMAGE_TO_TEST .
|
||||
pushd "tests/setuponlytests/$env:FOLDER_TO_TEST/"
|
||||
docker compose run mc
|
||||
docker compose down -v --remove-orphans
|
||||
popd
|
||||
```
|
||||
|
||||
!!! tip
|
||||
PowerShell: Building different images of Java for testing
|
||||
```powershell
|
||||
$env:BASE_IMAGE='eclipse-temurin:8u312-b07-jre'
|
||||
$env:IMAGE_TO_TEST="mc-dev"
|
||||
docker build --build-arg BASE_IMAGE=$env:BASE_IMAGE -t $env:IMAGE_TO_TEST .
|
||||
```
|
||||
|
||||
To speed up the development cycle, it is recommended to set `SETUP_ONLY` to `true` as part of the run command above.
|
||||
Bash: (Example of building and testing ForgeAPI)
|
||||
```bash
|
||||
export FOLDER_TO_TEST="forgeapimods_file"
|
||||
export IMAGE_TO_TEST="mc-dev"
|
||||
docker build -t $IMAGE_TO_TEST .
|
||||
pushd tests/setuponlytests/$FOLDER_TO_TEST/
|
||||
docker compose run mc
|
||||
docker compose down -v --remove-orphans
|
||||
popd
|
||||
```
|
||||
|
||||
Using the baseline image, an interactive container can be started to iteratively run the scripts to be developed. By attaching the current workspace directory, you can use the local editor of your choice to iteratively modify scripts while using the container to run them.
|
||||
|
||||
```shell
|
||||
docker run -it --rm -v ${PWD}:/image/scripts --entrypoint bash mc-dev
|
||||
```
|
||||
|
||||
From within the container you can run individual scripts via the attached `/image/scripts/` path; however, be sure to set any environment variables expected by the scripts by either `export`ing them manually:
|
||||
|
||||
```shell
|
||||
export VERSION=1.12.2
|
||||
/image/scripts/start-deployFabric
|
||||
```
|
||||
|
||||
...or pre-pending script execution:
|
||||
|
||||
```shell
|
||||
VERSION=1.12.2 /image/scripts/start-deployFabric
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
You may want to temporarily add an `exit` statement near the end of your script to isolate execution to just the script you're developing.
|
||||
|
||||
## Using development copy of tools
|
||||
|
||||
|
||||
@@ -2,24 +2,24 @@ click==8.3.1
|
||||
colorama==0.4.6
|
||||
deepmerge==2.0
|
||||
ghp-import==2.1.0
|
||||
griffe==2.0.0
|
||||
griffe==1.15.0
|
||||
Jinja2==3.1.6
|
||||
Markdown==3.10.2
|
||||
Markdown==3.10.1
|
||||
MarkupSafe==3.0.3
|
||||
mergedeep==1.3.4
|
||||
mkdocs==1.6.1
|
||||
mkdocs-autorefs==1.4.4
|
||||
mkdocs-autorefs==1.4.3
|
||||
mkdocs-get-deps==0.2.0
|
||||
mkdocstrings==1.0.3
|
||||
mkdocstrings-python==2.0.3
|
||||
mkdocstrings-python==2.0.1
|
||||
packaging==26.0
|
||||
pathspec==1.0.4
|
||||
platformdirs==4.9.4
|
||||
platformdirs==4.5.1
|
||||
Pygments==2.19.2
|
||||
pymdown-extensions==10.21
|
||||
pymdown-extensions==10.20.1
|
||||
python-dateutil==2.9.0.post0
|
||||
PyYAML==6.0.3
|
||||
pyyaml_env_tag==1.1
|
||||
six==1.17.0
|
||||
watchdog==6.0.0
|
||||
zensical==0.0.24
|
||||
# zensical @ file:///
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{
|
||||
"tag": "latest",
|
||||
"notes": "Always tracks the most recent commit on the main branch",
|
||||
"java": "25",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
@@ -141,5 +141,4 @@
|
||||
{"tag": "java8-jdk", "deprecated": true},
|
||||
{"tag": "java8-openj9", "deprecated": true},
|
||||
{"tag": "java8-graalvm-ce", "deprecated": true}
|
||||
|
||||
]
|
||||
]
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 83 KiB |
@@ -8,9 +8,8 @@
|
||||
"customType": "regex",
|
||||
"managerFilePatterns": ["/^Dockerfile$/"],
|
||||
"matchStrings": [
|
||||
"# renovate: datasource=(?<datasource>[a-z-]+?)(?: packageName=(?<packageName>.+?))?(?: versioning=(?<versioning>[a-z-]+))?\\s(?:ENV|ARG) .+?_VERSION=(?<currentValue>.+?)\\s"
|
||||
"# renovate: datasource=(?<datasource>[a-z-]+?)(?: packageName=(?<packageName>.+?))? (?: versioning=(?<versioning>[a-z-]+?))?\\s(?:ENV|ARG) .+?_VERSION=(?<currentValue>.+?)\\s"
|
||||
]
|
||||
}
|
||||
],
|
||||
"labels": ["dependencies"]
|
||||
]
|
||||
}
|
||||
|
||||
@@ -54,8 +54,8 @@ fi
|
||||
|
||||
if isTrue "${DEBUG_MEMORY:-false}"; then
|
||||
log "Memory usage and availability (in MB)"
|
||||
uname -pars | applyLogPrefix
|
||||
free -m | applyLogPrefix
|
||||
uname -pars
|
||||
free -m
|
||||
fi
|
||||
|
||||
##########################################
|
||||
|
||||
0
scripts/start-deployAutoCF
Executable file → Normal file
0
scripts/start-deployAutoCF
Executable file → Normal file
0
scripts/start-deployFolia
Executable file → Normal file
0
scripts/start-deployFolia
Executable file → Normal file
8
scripts/start-deployGTNH
Executable file → Normal file
8
scripts/start-deployGTNH
Executable file → Normal file
@@ -8,14 +8,10 @@ function getGTNHdownloadPath(){
|
||||
gtnh_download_path=""
|
||||
current_java_version=$(mc-image-helper java-release)
|
||||
|
||||
if ! packs_data="$(
|
||||
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
|
||||
| jq -r '.versions[]?.server? | .[]? | select(type=="string" and test("Server"))'
|
||||
)"; then
|
||||
logError "Failed to retrieve data from https://downloads.gtnewhorizons.com/versions.json"
|
||||
if ! mapfile -t packs < <(curl -sfL 'http://downloads.gtnewhorizons.com/ServerPacks/?raw'); then
|
||||
logError "Failed to retrieve data from http://downloads.gtnewhorizons.com/ServerPacks/?raw"
|
||||
exit 1
|
||||
fi
|
||||
mapfile -t packs <<< "$packs_data"
|
||||
|
||||
log "Start locating server files..."
|
||||
for pack in "${packs[@]}"; do
|
||||
|
||||
0
scripts/start-deployLeaf
Executable file → Normal file
0
scripts/start-deployLeaf
Executable file → Normal file
0
scripts/start-deployModrinth
Executable file → Normal file
0
scripts/start-deployModrinth
Executable file → Normal file
0
scripts/start-deployNeoForge
Executable file → Normal file
0
scripts/start-deployNeoForge
Executable file → Normal file
0
scripts/start-deployPoseidon
Executable file → Normal file
0
scripts/start-deployPoseidon
Executable file → Normal file
0
scripts/start-rconcmds
Executable file → Normal file
0
scripts/start-rconcmds
Executable file → Normal file
0
scripts/start-setupRbac
Executable file → Normal file
0
scripts/start-setupRbac
Executable file → Normal file
@@ -125,12 +125,6 @@ function logn() {
|
||||
echo -n "[init] $*"
|
||||
}
|
||||
|
||||
# Use as
|
||||
# cmd | applyLogPrefix
|
||||
function applyLogPrefix() {
|
||||
sed 's/^/[init] /'
|
||||
}
|
||||
|
||||
function log() {
|
||||
local oldState
|
||||
# The return status when listing options is zero if all optnames are enabled, non- zero otherwise.
|
||||
|
||||
Reference in New Issue
Block a user