Compare commits

...

95 Commits

Author SHA1 Message Date
Geoff Bourne
e38cc6ec3b build: upgrade easy-add to 0.8.4 (#2686) 2024-02-27 22:19:29 -06:00
dependabot[bot]
e152875f65 build(deps): bump the patches group in /docs with 1 update (#2684) 2024-02-26 08:22:11 -06:00
dependabot[bot]
f5ceb60335 build(deps): bump the patches group in /docs with 1 update (#2674)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-24 11:28:38 -06:00
nohehf
23d20041fc feat: force include just-enough-resources-jer for create-arcane-engineering modpack (#2679) 2024-02-21 13:08:53 -06:00
Geoff Bourne
5979e65a01 auto-cf: resolve issue where zip compression scheme prevents manifest file extraction (#2678) 2024-02-20 11:10:56 -06:00
Geoff Bourne
d52b9b88a2 Gracefully handle getbukkit.org outage when resolving version (#2675) 2024-02-19 10:57:00 -06:00
Geoff Bourne
b957e4cdfa Improve rate limit detection and log available info (#2672) 2024-02-18 15:12:17 -06:00
Geoff Bourne
e816d37dc3 docs: use consistent style in lazytainer example (#2662) 2024-02-13 08:14:49 -06:00
Geoff Bourne
f17cdbee2b cf: support curseforge files that don't delcare any modloader (#2660) 2024-02-12 18:30:05 -06:00
Geoff Bourne
40653003a4 Fixed handling of Modrinth mods for NeoForge (#2659) 2024-02-12 11:13:02 -06:00
dependabot[bot]
9a29d6812b build(deps): bump the patches group in /docs with 1 update (#2656) 2024-02-12 07:52:35 -06:00
C0D3 M4513R
a03afd7650 Use KettingLauncher (#2655) 2024-02-10 20:04:44 -06:00
Geoff Bourne
f3bec94065 For legacy CURSEFORGE, write ops/whitelist files in final directory (#2654) 2024-02-10 16:02:23 -06:00
Geoff Bourne
ac7bf437ca Fixed support for mc-send-to-console (#2652) 2024-02-10 13:24:06 -06:00
Geoff Bourne
14de9281e2 auto-cf: add option to ignore files missing from previous installation (#2649) 2024-02-09 19:01:32 -06:00
Geoff Bourne
6aaed2da68 Disable REMOVE_OLD_MODS when it interferes with managed mod/plugin features (#2648) 2024-02-09 06:59:05 -06:00
Geoff Bourne
15c2e21e54 auto-cf: support modpack zips using IMPLODE compression method (#2646) 2024-02-08 15:05:12 -06:00
Geoff Bourne
730c228d48 build: use libcap package for Alpine images (#2644) 2024-02-07 19:37:27 -06:00
Geoff Bourne
b48a252dd6 Support NeoForge for Modrinth modpacks (#2643) 2024-02-07 17:10:18 -06:00
David Whittam
f9dd0f45ab Minor spelling fix in auto-curseforge.md (#2642) 2024-02-07 13:55:15 -06:00
Geoff Bourne
9c0aa776cd docs: clarified that auto CurseForge manual downloads need a browser (#2639) 2024-02-06 12:04:50 -06:00
dependabot[bot]
69eb7488e0 build(deps): bump the updates group with 1 update (#2636) 2024-02-05 09:00:48 -06:00
dependabot[bot]
93af5297fc build(deps): bump the patches group in /docs with 1 update (#2635) 2024-02-05 07:25:06 -06:00
Geoff Bourne
629156e1b3 auto-cf: provide option to force reinstall modpack's modloader (#2633) 2024-02-04 18:57:04 -06:00
Geoff Bourne
5c0b449c79 docs: improve memory limit examples (#2634) 2024-02-04 18:48:04 -06:00
Geoff Bourne
c424dc0c47 docs: clarify new default behavior with interactive console and colorized logs (#2632) 2024-02-04 15:47:13 -06:00
Geoff Bourne
8222a79bf4 docs: add example of Paper running with PROXY protocol enabled (#2629) 2024-02-03 19:38:44 -06:00
Geoff Bourne
6ae59e61fa Support 1.20.3 change to ping description structure (#2628) 2024-02-03 16:32:17 -06:00
Geoff Bourne
63b2e4484d Apply cap_net_raw to knockd to allow rootless auto-pause (#2625) 2024-02-02 22:23:07 -06:00
Geoff Bourne
600472d7eb docs: fixed formatting of deprecated Java version list (#2622) 2024-02-02 19:31:51 -06:00
Talesu
1e2024e8db Added Velocity to Multi Server (#2623) 2024-02-02 07:57:11 -06:00
Geoff Bourne
c2f41a48ef docs: clarified the Oracle GraalVM version used (#2621) 2024-01-31 16:53:13 -06:00
Zyztem
664b66dbb7 Update the doc's Copyright year (#2620) 2024-01-31 12:06:17 -06:00
Geoff Bourne
52351a423a docs: fix mkdocs emoji and static-i18n version (#2619) 2024-01-30 18:38:56 -06:00
Geoff Bourne
e23c73c83e docs: remove the deprecated content from the README (#2618) 2024-01-30 17:35:44 -06:00
dependabot[bot]
90ea47b792 build(deps): bump the patches group in /docs with 2 updates (#2615) 2024-01-29 12:35:15 -06:00
Geoff Bourne
6ea7d5851d modrinth: report error when project version not available for requested constraints (#2614) 2024-01-27 15:07:25 -06:00
dependabot[bot]
161ca91ab3 build(deps): bump the patches group in /docs with 1 update (#2608) 2024-01-22 07:36:07 -06:00
Geoff Bourne
619cee5ae5 docs: clarify that disabling RCON disables other features (#2607) 2024-01-21 12:21:40 -06:00
Geoff Bourne
b73fb88b3b Handle I/O timout type errors from autopause mc-monitor call (#2606) 2024-01-20 19:07:58 -06:00
Geoff Bourne
ca393c4fcf Directly attach stdin of server process by default (#2605) 2024-01-20 13:13:26 -06:00
Gjermund H. Pedersen
5729324195 umask as env var (#2601)
Co-authored-by: gjermundhp02 <gjermund.pedersen@gamil.com>
2024-01-18 18:27:58 -06:00
nfroeschl
a3b02ca3e3 Added Lazytainer Example (#2598) 2024-01-17 07:03:14 -06:00
Geoff Bourne
815608929c cf: allow for browser named files in final output (#2596) 2024-01-15 16:02:07 -06:00
Geoff Bourne
7cb2c0ddc7 Support local Modrinth modpack files (#2594) 2024-01-15 11:43:38 -06:00
Geoff Bourne
7a9e625935 docs: it’s spiget with an “e” (#2592) 2024-01-13 23:08:10 -06:00
dependabot[bot]
9e49840a26 build(deps): bump the updates group with 1 update (#2584) 2024-01-08 07:12:01 -06:00
Geoff Bourne
6f08613340 docs: added example of auto-cf custom manifest (#2582) 2024-01-07 12:20:34 -06:00
Kaiede
aec644dc3f Add SSH remote console support (#2576) 2024-01-06 09:55:14 -06:00
Geoff Bourne
63adc7bc6c docs: added example for All of Fabric 7 (#2575) 2024-01-05 19:00:17 -06:00
Geoff Bourne
6263cf419f docs: clarify the variables page (#2573) 2024-01-02 14:37:54 -06:00
Geoff Bourne
b0605581c3 docs: added ATM9 example (#2571) 2024-01-01 13:51:52 -06:00
Geoff Bourne
2cfd685def docs: fix formatting of sections and admonitions (#2570) 2024-01-01 13:30:45 -06:00
Geoff Bourne
6adda8f1b2 Handle calculated MEMORY value along with Aikar's flags (#2568) 2024-01-01 13:10:24 -06:00
streaminganger
cbd1e8d86d Handle various versions of Magma Maintained (#2563) 2023-12-29 08:57:13 -06:00
Geoff Bourne
7fa522853f neoforge: support 1.20.2+ (#2564) 2023-12-28 21:52:53 -06:00
farafonoff
6b2bd0d035 Fix magma_maintained server download path (#2562) 2023-12-27 09:42:21 -07:00
dependabot[bot]
6ac4586f26 build(deps): bump the updates group with 1 update (#2559) 2023-12-25 10:07:25 -07:00
dependabot[bot]
65a3490f43 build(deps): bump the patches group in /docs with 2 updates (#2560) 2023-12-25 07:20:24 -07:00
Geoff Bourne
422db18b20 neoforge: handle malformed version entry in maven metadata (#2557) 2023-12-23 13:31:57 -07:00
dependabot[bot]
88c24292ec build(deps): bump the patches group in /docs with 1 update (#2551) 2023-12-19 07:38:19 -07:00
Aruneko
3ca66db8b4 Add support for Magma Maintained (#2552) 2023-12-19 07:14:56 -07:00
Ryan Hullah
150881a941 Update release action (#2548) 2023-12-15 08:13:54 -06:00
sheepa
43accdf2f0 Fix FORCE_REDOWNLOAD at start-deployCustom (#2546) 2023-12-15 06:40:05 -06:00
Geoff Bourne
6363949bda Use Forge shim jar as entrypoint for >= 1.20.4 (#2543) 2023-12-13 20:06:53 -06:00
dependabot[bot]
b6b2da9d38 build(deps): bump actions/stale from 8 to 9 (#2538) 2023-12-11 07:28:38 -06:00
Aruneko
c40a47ebba Support ketting hybrid server (#2535) 2023-12-11 07:19:25 -06:00
Ryan Hullah
94f9bc74f0 Cleanup discord release message (#2532) 2023-12-07 10:04:06 -06:00
dependabot[bot]
0f4cb9c429 build(deps): bump the updates group with 1 update (#2525) 2023-12-06 07:34:58 -06:00
Ryan Hullah
66ed0eda1b Add Discord Release Notification (#2531) 2023-12-05 22:07:15 -06:00
Geoff Bourne
ea3a6644a8 Fixed unbound variable error for MODRINTH_EXCLUDE_FILES (#2528) 2023-12-04 23:01:26 -06:00
Geoff Bourne
c0c6e6d78d modrinth: support excluding mods from modpack (#2524) 2023-12-03 14:13:40 -06:00
Geoff Bourne
2507028193 modrinth: report error when no matching modpack version is available (#2520) 2023-12-01 14:21:52 -06:00
Geoff Bourne
2084f1ea12 Move DEBUG_MEMORY output to beginning of init (#2519) 2023-11-30 17:00:09 -06:00
Geoff Bourne
ca2c15ea8e docs: add example for Auto CurseForge manual downloads (#2517) 2023-11-29 10:41:25 -06:00
dependabot[bot]
a5ec64de24 build(deps): bump the patches group in /docs with 2 updates (#2515)
Bumps the patches group in /docs with 2 updates: [mkdocs-material-extensions](https://github.com/facelessuser/mkdocs-material-extensions) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material-extensions` from 1.3 to 1.3.1
- [Release notes](https://github.com/facelessuser/mkdocs-material-extensions/releases)
- [Changelog](https://github.com/facelessuser/mkdocs-material-extensions/blob/master/changelog.md)
- [Commits](https://github.com/facelessuser/mkdocs-material-extensions/compare/1.3...1.3.1)

Updates `mkdocs-material` from 9.4.10 to 9.4.14
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.4.10...9.4.14)

---
updated-dependencies:
- dependency-name: mkdocs-material-extensions
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patches
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patches
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-27 15:49:26 -06:00
Geoff Bourne
33c75bd2da Fix issue when setting ENABLE_RCON=false (#2513) 2023-11-26 08:34:49 -06:00
Geoff Bourne
2917af8ca4 Provide support for patching TOML files (#2512) 2023-11-25 18:44:45 -06:00
Geoff Bourne
9d7232c8b8 Process rcon password as regular user (#2511) 2023-11-25 18:30:18 -06:00
Geoff Bourne
051436c1df docs: clarify server properties intro (#2507) 2023-11-23 15:23:08 -06:00
Geoff Bourne
9b21661aaf docs: clarify that CurseForge files correspond to versions of that mod/plugin (#2505) 2023-11-22 09:14:20 -06:00
dependabot[bot]
47b903d134 build(deps): bump the patches group in /docs with 2 updates (#2503)
Bumps the patches group in /docs with 2 updates: [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).


Updates `mkdocs-material` from 9.4.8 to 9.4.10
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.4.8...9.4.10)

Updates `mkdocstrings` from 0.23.0 to 0.24.0
- [Release notes](https://github.com/mkdocstrings/mkdocstrings/releases)
- [Changelog](https://github.com/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mkdocstrings/mkdocstrings/compare/0.23.0...0.24.0)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patches
- dependency-name: mkdocstrings
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: patches
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-22 08:31:25 -06:00
dependabot[bot]
fc4331232c build(deps): bump the updates group with 1 update (#2504) 2023-11-20 09:28:01 -06:00
Geoff Bourne
5dc833c108 For Auto CurseForge etc, increase default connection pool acquire timeout (#2497) 2023-11-17 14:25:23 -06:00
Geoff Bourne
feb6a41c11 Stream file downloads to avoid 2GB limit (#2493) 2023-11-14 12:42:02 -06:00
Geoff Bourne
92947c92dc docs: clarify the resolved value for %VAR% (#2490) 2023-11-13 07:52:53 -06:00
Geoff Bourne
e8ffa0fc0d docs: document JMX_PORT (#2489) 2023-11-12 21:31:42 -06:00
Geoff Bourne
4c0bd61faf docs: clarify placeholder intro (#2488) 2023-11-12 19:38:21 -06:00
Geoff Bourne
85a957fe6f Retain declared version for placeholder usage (#2486) 2023-11-12 16:10:03 -06:00
Geoff Bourne
37a5d50f70 Process placeholders in server properties values (#2484) 2023-11-12 13:21:16 -06:00
Geoff Bourne
eb279d0fa0 Allow pre-escaping unicode in server.properties (#2483) 2023-11-11 19:53:41 -06:00
Geoff Bourne
aba27ad444 Escape unicode in server.properties by default when less than 1.20 (#2480) 2023-11-11 14:05:00 -06:00
Geoff Bourne
f5c332736d Provide option to escape unicode in server.properties 2023-11-10 22:46:25 -06:00
Geoff Bourne
bf621356c1 Gracefully handle corrupt/invalid auto-install manifest files (#2476) 2023-11-10 10:43:31 -06:00
Geoff Bourne
19948065d5 auto-cf: exclude embeddium by default (#2472) 2023-11-07 14:39:00 -06:00
65 changed files with 1187 additions and 2204 deletions

View File

@@ -39,37 +39,37 @@ jobs:
- variant: java21-graalvm
baseImage: container-registry.oracle.com/graalvm/jdk:21-ol8
platforms: linux/amd64,linux/arm64
mcVersion: 1.20.2
mcVersion: latest
- variant: java21
baseImage: eclipse-temurin:21-jre
platforms: linux/amd64,linux/arm64
mcVersion: 1.19.3
mcVersion: latest
- variant: java21-alpine
baseImage: eclipse-temurin:21-jre-alpine
platforms: linux/amd64
mcVersion: 1.19.3
mcVersion: latest
# JAVA 17:
- variant: java17
# jammy doesn't work until minecraft updates to https://github.com/netty/netty/issues/12343
baseImage: eclipse-temurin:17-jre-focal
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: 1.18.2
mcVersion: latest
- variant: java17-graalvm
baseImage: container-registry.oracle.com/graalvm/jdk:17-ol8
platforms: linux/amd64,linux/arm64
mcVersion: 1.18.2
mcVersion: latest
- variant: java17-jdk
baseImage: eclipse-temurin:17-focal
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: 1.18.2
mcVersion: latest
- variant: java17-openj9
baseImage: ibm-semeru-runtimes:open-17-jre
platforms: linux/amd64,linux/arm64
mcVersion: 1.18.2
mcVersion: latest
- variant: java17-alpine
baseImage: eclipse-temurin:17-jre-alpine
platforms: linux/amd64
mcVersion: 1.18.2
mcVersion: latest
# JAVA 11:
- variant: java11
baseImage: adoptopenjdk:11-jre-hotspot
@@ -118,7 +118,7 @@ jobs:
- name: Docker meta
id: meta
uses: docker/metadata-action@v5.0.0
uses: docker/metadata-action@v5.5.1
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.
@@ -150,7 +150,7 @@ jobs:
uses: docker/setup-qemu-action@v3.0.0
- name: Build for test
uses: docker/build-push-action@v5.0.0
uses: docker/build-push-action@v5.1.0
with:
platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }}
@@ -188,7 +188,7 @@ jobs:
password: ${{ github.token }}
- name: Build and push
uses: docker/build-push-action@v5.0.0
uses: docker/build-push-action@v5.1.0
if: github.actor == github.repository_owner
with:
platforms: ${{ matrix.platforms }}

View File

@@ -1,8 +1,11 @@
name: Discord notifications
on:
release:
types:
- published
workflow_run:
workflows: ["ContinuousIntegration", "Build and Publish", "Build and publish multiarch" ]
workflows: ["Build and Publish"]
types:
- completed
@@ -14,13 +17,26 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: on-publish
if: github.event_name == 'release' && github.event.action == 'published'
uses: SethCohen/github-releases-to-discord@v1.15.0
with:
webhook_url: ${{ secrets.DISCORD_WEBHOOK }}
- name: on-success
if: ${{ github.event.workflow_run.conclusion == 'success' }}
if: github.event.workflow_run.conclusion == 'success'
uses: Ilshidur/action-discord@master
with:
args: "Github repo: ${{ github.repository }}\n- Branch: ${{ github.event.workflow_run.head_branch }}\n- [Link: to Actions](<${{ github.event.workflow_run.html_url }}>)\n- Status: 🎉 ${{ github.event.workflow_run.conclusion }} 🍏"
args: |
Github repo: ${{ github.repository }}
- Branch: ${{ github.event.workflow_run.head_branch }}
- [Link: to Actions](<${{ github.event.workflow_run.html_url }}>)
- Status: 🎉 ${{ github.event.workflow_run.conclusion }} 🍏
- name: on-failure
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
if: github.event.workflow_run.conclusion == 'failure'
uses: Ilshidur/action-discord@master
with:
args: "Github repo: ${{ github.repository }}\n- Branch: ${{ github.event.workflow_run.head_branch }}\n- [Link: to Actions](<${{ github.event.workflow_run.html_url }}>)\n- Status: 🤔 ${{ github.event.workflow_run.conclusion }} 💣💥"
args: |
Github repo: ${{ github.repository }}
- Branch: ${{ github.event.workflow_run.head_branch }}
- [Link: to Actions](<${{ github.event.workflow_run.html_url }}>)
- Status: 🤔 ${{ github.event.workflow_run.conclusion }} 💣💥

View File

@@ -12,7 +12,7 @@ jobs:
pull-requests: write
steps:
- name: Process Stale Issues
uses: actions/stale@v8
uses: actions/stale@v9
with:
stale-issue-label: status/stale
stale-pr-label: status/stale

View File

@@ -25,17 +25,17 @@ jobs:
- variant: java21
baseImage: eclipse-temurin:21-jre
platforms: linux/amd64,linux/arm64
mcVersion: 1.19.4
mcVersion: latest
# JAVA 17:
- variant: java17
# jammy doesn't work until minecraft updates to https://github.com/netty/netty/issues/12343
baseImage: eclipse-temurin:17-jre-focal
platforms: linux/amd64
mcVersion: 1.19.4
mcVersion: latest
- variant: java17-alpine
baseImage: eclipse-temurin:17-jre-alpine
platforms: linux/amd64
mcVersion: 1.19.4
mcVersion: latest
- variant: java8-multiarch
baseImage: eclipse-temurin:8u312-b07-jre-focal
platforms: linux/amd64
@@ -54,7 +54,7 @@ jobs:
uses: docker/setup-buildx-action@v3.0.0
- name: Confirm multi-arch build
uses: docker/build-push-action@v5.0.0
uses: docker/build-push-action@v5.1.0
with:
platforms: ${{ matrix.platforms }}
# ensure latest base image is used
@@ -64,7 +64,7 @@ jobs:
cache-from: type=gha,scope=${{ matrix.variant }}
- name: Build for test
uses: docker/build-push-action@v5.0.0
uses: docker/build-push-action@v5.1.0
with:
# Only build single platform since loading multi-arch image into daemon fails with
# "docker exporter does not currently support exporting manifest lists"

View File

@@ -22,28 +22,35 @@ COPY --chmod=644 files/sudoers* /etc/sudoers.d
EXPOSE 25565
ARG EASY_ADD_VER=0.8.1
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
ARG APPS_REV=1
ARG GITHUB_BASEURL=https://github.com
ARG EASY_ADD_VERSION=0.8.4
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.1
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=1.7.1 --var app=restify --file {{.app}} \
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
--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.6.4
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=1.6.3 --var app=rcon-cli --file {{.app}} \
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
--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.12.8
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=0.12.5 --var app=mc-monitor --file {{.app}} \
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
--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.11.1
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=1.9.1 --var app=mc-server-runner --file {{.app}} \
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
--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.36.5
ARG MC_HELPER_BASE_URL=https://github.com/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
ARG MC_HELPER_VERSION=1.38.5
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
RUN curl -fsSL ${MC_HELPER_BASE_URL}/mc-image-helper-${MC_HELPER_VERSION}.tgz \

1943
README.md

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,11 @@
. "/start-utils"
: "${CONSOLE_IN_NAMED_PIPE:=/tmp/minecraft-console-in}"
if isFalse "${CREATE_CONSOLE_IN_PIPE:-false}"; then
echo "ERROR: console pipe needs to be enabled by setting CREATE_CONSOLE_IN_PIPE to true"
fi
if [ $# = 0 ]; then
echo "ERROR: pass console commands as arguments"
exit 1

View File

@@ -26,9 +26,11 @@ apk add --no-cache -U \
zstd \
nfs-utils \
libpcap \
libwebp
libwebp \
libcap
# Patched knockd
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-alpine-amd64.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd

View File

@@ -46,3 +46,4 @@ bash /build/ol/install-gosu.sh
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd

View File

@@ -35,4 +35,5 @@ apt-get clean
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd
find /usr/lib -name 'libpcap.so.0.8' -execdir cp '{}' libpcap.so.1 \;

View File

@@ -19,7 +19,9 @@ docker exec mc rcon-cli stop
_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. For example, a player can be op'ed in the container `mc` with:
## When RCON is disabled
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
@@ -27,9 +29,26 @@ docker exec mc mc-send-to-console op player
+- container name +- Minecraft commands start here
```
In order to attach and interact with the Minecraft server, add `-it` when starting the container, such as
## Enabling interactive console
In order to attach and interact with the Minecraft server make sure to enable TTY and keep stdin open.
!!! example
With `docker run` use the `-it` arguments:
```shell
docker run -d -it -p 25565:25565 --name mc itzg/minecraft-server
```
or with a compose file:
```yaml
services:
minecraft:
stdin_open: true
tty: true
```
With that you can attach and interact at any time using
@@ -37,9 +56,6 @@ With that you can attach and interact at any time using
and then Control-p Control-q to **detach**.
For remote access, configure your Docker daemon to use a `tcp` socket (such as `-H tcp://0.0.0.0:2375`)
and attach from another machine:
!!! info "RCON is required for fully interactive, color console"
docker -H $HOST:2375 attach mc
Unless you're on a home/private LAN, you should [enable TLS access](https://docs.docker.com/articles/https/).
RCON must be enabled, which is the default, in order to use a fully interactive console with auto-completion and colorized log output.

View File

@@ -101,11 +101,11 @@ secrets:
## Patching existing files
JSON path based patches can be applied to one or more existing files by setting the variable `PATCH_DEFINITIONS` to the path of a directory that contains one or more [patch definition json files](https://github.com/itzg/mc-image-helper#patchdefinition) or a [patch set json file](https://github.com/itzg/mc-image-helper#patchset).
JSON path based patches can be applied to one or more existing files by setting the variable `PATCH_DEFINITIONS` to the path of a directory that contains one or more [patch definition json files](https://github.com/itzg/mc-image-helper#patchdefinition) or a [patch set json file](https://github.com/itzg/mc-image-helper#patchset).
Variable placeholders in the patch values can be restricted by setting `REPLACE_ENV_VARIABLE_PREFIX`, which defaults to "CFG_".
The `file` and `value` fields of the patch definitions may contain `${...}` variable placeholders. The allowed environment variables in placeholders can be restricted by setting `REPLACE_ENV_VARIABLE_PREFIX`, which defaults to "CFG_".
The following example shows a patch-set file were various fields in the `paper.yaml` configuration file can be modified and added:
The following example shows a patch-set file where various fields in the `paper.yaml` configuration file can be modified and added:
```json
{
@@ -139,4 +139,8 @@ The following example shows a patch-set file were various fields in the `paper.y
}
```
> **NOTES:** Only JSON and Yaml files can be patched at this time. TOML support is planned to be added next. Removal of comments and other cosmetic changes will occur when patched files are processed.
Supports the file formats:
- JSON
- JSON5
- Yaml
- TOML, but processed output is not pretty

View File

@@ -8,13 +8,47 @@ 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]`. For example:
The values of all three are passed directly to the JVM and support format/units as `<size>[g|G|m|M|k|K]`.
-e MEMORY=2G
!!! example "Using docker run"
```
-e MEMORY=2G
```
To let the JVM calculate the heap size from the container declared memory limit, unset `MEMORY` with an empty value, such as `-e MEMORY=""`. By default, the JVM will use 25% of the container memory limit as the heap limit; however, as an example the following would tell the JVM to use 75% of the container limit of 2GB of memory:
or to use init and max memory:
-e MEMORY="" -e JVM_XX_OPTS="-XX:MaxRAMPercentage=75" -m 2000M
```
-e INIT_MEMORY=1G -e MAX_MEMORY=4G
```
!!! example "Using compose file"
```
environment:
MEMORY: 2G
```
or to use init and max memory:
```
environment:
INIT_MEMORY: 1G
MAX_MEMORY: 4G
```
To let the JVM calculate the heap size from the container declared memory limit, unset `MEMORY` with an empty value, such as `-e MEMORY=""`. By default, the JVM will use 25% of the container memory limit as the heap limit; however, as an example the following would tell the JVM to use 75% of the container limit of 4GB of memory:
!!! example "MaxRAMPercentage using compose file"
```
environment:
MEMORY: ""
JVM_XX_OPTS: "-XX:MaxRAMPercentage=75"
deploy:
limits:
memory: 4G
```
!!! important
The settings above only set the Java **heap** limits. Memory resource requests and limits on the overall container should also account for non-heap memory usage. An extra 25% is [a general best practice](https://dzone.com/articles/best-practices-java-memory-arguments-for-container).
@@ -62,11 +96,30 @@ you can use
## Enable Remote JMX for Profiling
To enable remote JMX, such as for profiling with VisualVM or JMC, add the environment variable `ENABLE_JMX=true`, set `JMX_HOST` to the IP/host running the Docker container, and add a port forwarding of TCP port 7091, such as:
To enable remote JMX, such as for profiling with VisualVM or JMC, set the environment variable `ENABLE_JMX` to "true", set `JMX_HOST` to the IP/host running the Docker container, and add a port forwarding of TCP port 7091, such as:
```
-e ENABLE_JMX=true -e JMX_HOST=$HOSTNAME -p 7091:7091
```
!!! example
With `docker run`
```
-e ENABLE_JMX=true -e JMX_HOST=$HOSTNAME -p 7091:7091
```
If needing to map to a different port, then also set the environment variable `JMX_PORT` to the desired host port.
!!! example
With a compose file:
```yaml
environment:
ENABLE_JMX: true
JMX_HOST: ${HOSTNAME}
JMX_PORT: "7092"
ports:
- "7092:7092"
```
## Enable Aikar's Flags

View File

@@ -41,21 +41,9 @@ See [Custom worlds directory path](../misc/world-data.md#custom-worlds-directory
## Interactive and Color Console
If you would like to `docker attach` to the Minecraft server console with color and interactive capabilities, then add
When RCON is enabled, which is the default, and [TTY](https://docs.docker.com/compose/compose-file/05-services/#tty) is enabled on the container, then some server types will output colorized logs and provide a fully interactive console. To access the interactive console, use [`docker attach`](https://docs.docker.com/engine/reference/commandline/container_attach/) (not `exec`). When finished, make sure to use the sequence Control-P, Control-Q to detach without stopping the container.
```
-e EXEC_DIRECTLY=true
```
> **NOTES**
>
> This feature doesn't work via rcon, so you will need to `docker attach` to the container. Use the sequence Ctrl-P, Ctrl-Q to detach.
>
> This will bypass graceful server shutdown handling when using `docker stop`, so be sure the server console's `stop` command.
>
> Make to enable stdin and tty with `-it` when using `docker run` or `stdin_open: true` and `tty: true` when using docker compose.
>
> This feature is incompatible with Autopause and cannot be set when `ENABLE_AUTOPAUSE=true`.
If this behavior interferes with the log content, then disable TTY or remove the setting entirely since the default is disabled. In a compose file, set the service's `tty` parameter to `false`. On the `docker run` command-line remove the `-t` argument.
## Server Shutdown Options

View File

@@ -1,33 +1,75 @@
By default, the server configuration will be created and set based on the following environment variables, but only the first time the server is started. If the `server.properties` file already exists, the values in them will not be changed.
In order to unify management of the Minecraft server container, all of the [`server.properties`](https://minecraft.wiki/w/Server.properties) entries can be managed by the environment variables described in the sections below. Some of the mappings provide additional functionality above and beyond the properties file.
If you prefer to manually manage the `server.properties` file, set `OVERRIDE_SERVER_PROPERTIES` to "false". Similarly, you can entirely skip the startup script's creation of `server.properties` by setting `SKIP_SERVER_PROPERTIES` to "true".
> NOTE: to clear a server property, set the variable to an empty string, such as `-e RESOURCE_PACK=""`. A variables that maps to a server property that is unset, is ignored and the existing `server.property` is left unchanged.
!!! note
To clear a server property, set the variable to an empty string, such as `-e RESOURCE_PACK=""`. An unset variable is ignored and the existing `server.property` is left unchanged.
## Placeholders
When declaring a server properties via container environment variables, those values may contain placeholders that are processed when the `server.properties` file is updated.
The syntax of placeholders is DOS-style, `%VAR%`, to avoid being processed by Docker or the shell and the following options are available:
`%VAR%` or `%env:VAR%`
: Replaced with the resolved value or the environment variable `VAR`
`%date:FMT%`
: Formats the current date/time with the given `FMT` string processed by [Java's DateTimeFormatter](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html).
Any declared or resolved environment variable may be referenced, such as `VERSION` and `TYPE`. Additionally, [Modrinth](../types-and-platforms/mod-platforms/modrinth-modpacks.md) and [Auto CurseForge](../types-and-platforms/mod-platforms/auto-curseforge.md) modpacks will expose the environment variables `MODPACK_NAME` and `MODPACK_VERSION`. The originally declared version, such as "LATEST" or "SNAPSHOT", is available in the variable `DECLARED_VERSION`
!!! example
As a compose file environment entry:
```yaml
MOTD: Running %MODPACK_NAME% version %env:MODPACK_VERSION%
LEVEL: world-%date:yyyy-MM-dd%
```
!!! warning
Placeholders are not supported when manually managing `server.properties`
## Properties
### Message of the Day
The message of the day, shown below each server entry in the client UI, can be changed with the `MOTD` environment variable, such as
-e MOTD="My Server"
If you leave it off, a default is computed from the server type and version, such as
The message of the day, shown below each server entry in the client UI, can be changed with the `MOTD` environment variable or a default is computed from the server type and version, such as
A Paper Minecraft Server powered by Docker
That way you can easily differentiate between several servers you may have started.
That way you can easily differentiate between several server types you may have started.
The section symbol (§) and other unicode characters are automatically converted to allow [formatting codes](https://minecraft.wiki/w/Formatting_codes) to be used consistently with all server versions. For example,
The section symbol (§) and other unicode characters are automatically converted to allow [formatting codes](https://minecraft.wiki/w/Formatting_codes) to be used consistently with all server versions. For Minecraft versions less than 1.20, unicode characters in `server.properties` will be escaped as `\uXXXX`, by default. That behavior can be altered by setting `SERVER_PROPERTIES_ESCAPE_UNICODE` to "true" or "false".
-e MOTD="A §l§cMinecraft§r §nserver"
!!! example
renders
With `docker run`
-e MOTD="A §l§cMinecraft§r §nserver"
or within a compose file
environment:
MOTD: "A §l§cMinecraft§r §nserver"
![](../img/motd-example.png)
renders
![](../img/motd-example.png)
To produce a multi-line MOTD, embed a newline character as `\n` in the string, such as
-e MOTD="Line one\nLine two"
!!! tip
You can also embed configured and resolved environment variables using [placeholders](#placeholders).
### Difficulty
The difficulty level (default: `easy`) can be set like:
@@ -86,6 +128,11 @@ To change the behavior when the whitelist file already exists, set the variable
To [enforce the whitelist changes immediately](https://minecraft.wiki/w/Server.properties#enforce-whitelist) when whitelist commands are used , set `ENFORCE_WHITELIST` to "true". If managing the whitelist file manually, `ENABLE_WHITELIST` can be set to "true" to set the `white-list` property.
!!! tip "Changing user API provider"
The usernames provided for whitelist and ops processing are resolved using either [PlayerDB](https://playerdb.co/) or [Mojang's API](https://wiki.vg/Mojang_API#Username_to_UUID). The default uses PlayerDB, but can be changed by setting the environment variable `USER_API_PROVIDER` to "mojang". Sometimes one or the other service can become overloaded, which is why there is the ability to switch providers.
### Op/Administrator Players
Similar to the whitelist, users can be provisioned as operators (aka administrators) to your Minecraft server by
@@ -145,9 +192,13 @@ The server icon which has been set doesn't get overridden by default. It can be
RCON is **enabled by default** to allow for graceful shut down the server and coordination of save state during backups. RCON can be disabled by setting `ENABLE_RCON` to "false".
The default password is randomly generated if `RCON_PASSWORD` has not been set.
!!! warning
**DO NOT MAP THE RCON PORT EXTERNALLY** unless you aware of all the consequences and have set a **secure password** with `RCON_PASSWORD`.
Disabling RCON will remove and limit some features, such as interactive and color console support.
The default password is randomly generated on each startup; however, a specific one can be set with `RCON_PASSWORD`.
**DO NOT MAP THE RCON PORT EXTERNALLY** unless you are aware of all the consequences and have set a **secure password** with `RCON_PASSWORD`.
!!! info

View File

@@ -46,51 +46,59 @@ 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 script
```shell
docker run -it --rm -v ${PWD}:/scripts -e SCRIPTS=/scripts/ --entrypoint bash mc-dev
```
From within the container you can run individual scripts via the attached `/scripts/` path; however, be sure to set any environment variables expected by the scripts by either `export`ing them manually:
```shell script
```shell
export VERSION=1.12.2
/scripts/start-magma
```
...or pre-pending script execution:
```shell script
```shell
VERSION=1.12.2 /scripts/start-magma
```
> 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.
!!! note
## Using development copy of mc-image-helper
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.
In the cloned copy of [`mc-image-helper`](https://github.com/itzg/mc-image-helper), create an up-to-date snapshot build of the tgz distribution using:
## Using development copy of tools
In the cloned repo, such as [`mc-image-helper`](https://github.com/itzg/mc-image-helper), create an up-to-date snapshot build of the tgz distribution using:
```shell
./gradlew distTar
```
!!! note
The distribution's version will be `0.0.0-<branch>-SNAPSHOT`
Assuming Java 18 or newer:
For Go base tools, run
```shell
cd build/distributions
jwebserver -b 0.0.0.0 -p 8008
goreleaser release --snapshot --clean
```
If `jwebserver` is not available, try `java -m jdk.httpserver -p 8008`
Clone [itzg/github-releases-proxy](https://github.com/itzg/github-releases-proxy) and run it according to the instructions shown there.
In the Docker build, configure the following
```shell
--build-arg MC_HELPER_VERSION=1.8.1-SNAPSHOT \
--build-arg MC_HELPER_BASE_URL=http://host.docker.internal:8008
--build-arg GITHUB_BASEURL=http://host.docker.internal:8080 \
--build-arg APPS_REV=1
```
Now the image can be built like normal, and it will install mc-image-helper from the locally built copy.
and declare one or more version overrides, such as
```
--build-arg MC_HELPER_VERSION=1.8.1-SNAPSHOT
```
## Generating release notes

View File

@@ -25,4 +25,46 @@ services:
- ./data:/data
```
[Source](https://github.com/itzg/docker-minecraft-server/blob/master/examples/geyser/docker-compose.yml)
[Source](https://github.com/itzg/docker-minecraft-server/blob/master/examples/geyser/docker-compose.yml)
## Lazytainer - Stop Minecraft container based on traffic
Monitors network traffic to the Minecraft containers. If there is traffic, the container runs, otherwise the container is stopped/paused.
By using [Lazytainer](https://github.com/vmorganp/Lazytainer) with the [docker-minecraft-server](https://github.com/itzg/docker-minecraft-server) a somehow similar behaviour to [Lazymc](https://github.com/timvisee/lazymc) can be archived.
```yaml
version: "3"
services:
lazytainer:
image: ghcr.io/vmorganp/lazytainer:master
environment:
VERBOSE: false
ports:
- 25565:25565
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
labels:
- lazytainer.group.minecraft.sleepMethod=stop
- lazytainer.group.minecraft.ports=25565
- lazytainer.group.minecraft.minPacketThreshold=2 # Start after two incomming packets
- lazytainer.group.minecraft.inactiveTimeout=600 # 10 minutes, to allow the server to bootstrap. You can probably make this lower later if you want.
restart: unless-stopped
network_mode: bridge
mc:
image: itzg/minecraft-server
environment:
EULA: TRUE
TYPE: PAPER
MEMORY: 4G
volumes:
- ./data:/data
labels:
- lazytainer.group=minecraft
depends_on:
- lazytainer
network_mode: service:lazytainer
tty: true
stdin_open: true
restart: unless-stopped
```
[Source](https://github.com/itzg/docker-minecraft-server/blob/master/examples/lazytainer/docker-compose.yml)

View File

@@ -10,6 +10,10 @@ A specific file can be omitted from each reference to allow for auto-selecting t
## Project-file references
!!! tip
Individual project files typically represent a version of the mod/plugin, but CurseForge refers to these items broadly as "files" rather than "versions".
The following formats are supported in the list of project-file references:
- A project page URL, such as `https://www.curseforge.com/minecraft/mc-mods/jei`. _The newest applicable file will be automatically selected._
@@ -17,7 +21,7 @@ The following formats are supported in the list of project-file references:
- Project slug, such as `jei`. _The newest applicable file will be automatically selected._
- Project ID, such as `238222`. _The newest applicable file will be automatically selected._
- Project slug or ID, `:`, and a file ID, such as `jei:4593548` or `238222:4593548`
- Project slug or ID, `@`, and a partial filename, such as `jei@10.2.1.1005`
- Project slug or ID, `@`, and a partial filename, such as `jei@10.2.1.1005`. This option is useful to refer to a version of the mod/plugin rather than looking up the file ID.
An `@` followed by the container path to a listing file can also be provided as a project-file reference. Each line is processed as a reference where blank lines and comments that start with `#` are ignored.

View File

@@ -1,9 +1,8 @@
mkdocs == 1.5.3
mkdocs-material-extensions == 1.3
mkdocs-material == 9.4.8
mkdocs-material == 9.5.11
mkdocs-autorefs == 0.5.0
mkdocstrings == 0.23.0
mkdocstrings == 0.24.0
mkdocs-literate-nav == 0.6.1
mdx-gh-links == 0.3.1
mdx-gh-links == 0.4
mkdocs-click == 0.8.1
mkdocs-static-i18n == 1.2.0

View File

@@ -8,7 +8,7 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
A CurseForge API key is **required** to use this feature. Go to their [developer console](https://console.curseforge.com/), generate an API key, and set the environment variable `CF_API_KEY`.
When entering your API Key in a docker compose file you will need to escape any `$` character with a second `$`.
When entering your API Key in a docker compose file you will need to escape any `$` character with a second `$`. Refer to [this compose file reference section](https://docs.docker.com/compose/compose-file/compose-file-v3/#variable-substitution) for more information.
Example if your key is `$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa`:
```yaml
@@ -86,12 +86,77 @@ The following examples all refer to version 1.0.7 of ATM8:
For mod, modpacks, and world files that are not allowed for automated download, the container path `/downloads` can be attached and matching files will be retrieved from there. The subdirectories `mods`, `modpacks`, and `worlds` will also be checked accordingly. To change the source location of downloaded files, set `CF_DOWNLOADS_REPO` to an existing container path. To disable this feature, set `CF_DOWNLOADS_REPO` to an empty string.
!!! note "Mods need download report"
A file called `MODS_NEED_DOWNLOAD.txt` will be created in the `/data` directory that lists the mods that need to be manually downloaded and where to get them.
!!! warning "Download using a browser"
It's important to use a browser to download the files listed for manual download. If your Docker host is running without a graphical interface, then you can use `scp` or similar to transfer the files to it.
!!! example
Assuming Docker compose is being used:
1. Create a directory next to the `docker-compose.yml` file. The name doesn't matter, but "downloads" is the common convention
2. From the "Mods Need Download" output, visit the download page of each, click on the file download and save that file into the directory created in the previous step
3. Add a host directory mount to the volumes section where the container path **must be** `/downloads`. The snippet below shows how that will look
4. Re-run `docker compose up -d` to apply the changes
```yaml
volumes:
./downloads:/downloads
```
## Unpublished Modpacks
If you wish to use a unpublished modpack zip, set the container path to the file in `CF_MODPACK_ZIP`. Similarly, the container path to a modpack manifest JSON can be passed to `CF_MODPACK_MANIFEST`. In either case, **the modpack slug or page URL must still be provided**.
If you wish to use an unpublished modpack zip, set the container path to the file in `CF_MODPACK_ZIP`. Similarly, the container path to a modpack manifest JSON can be passed to `CF_MODPACK_MANIFEST`. In either case, **the modpack slug or page URL must still be provided**.
!!! example
```yaml
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_MODPACK_MANIFEST: /manifests/manifest.json
CF_SLUG: "custom"
volumes:
- ./manifests:/manifests:ro
```
where an exported manifest file should look like:
```json
{
"minecraft": {
"version": "1.20.4",
"modLoaders": [
{
"id": "fabric-0.15.3",
"primary": true
}
]
},
"manifestType": "minecraftModpack",
"manifestVersion": 1,
"name": "Custom",
"author": "",
"files": [
{
"projectID": 351725,
"fileID": 4973035,
"required": true
},
{
"projectID": 306612,
"fileID": 5010374,
"required": true
}
],
"overrides": "overrides"
}
```
## Exclude client mods
@@ -142,11 +207,36 @@ Ant-style paths can include the following globbing/wildcard symbols:
## World/Level Data
Some modpacks come with world/save data via a worlds file and/or the overrides provided with the modpack. Either approach can be selected to set the `LEVEL` to the resulting saves directory by setting `CF_SET_LEVEL_FROM` to either:
- `WORLD_FILE`
- `OVERRIDES`
## Ignore missing files
Some mods use temporary files from the modpack and delete them when finished. Others will patch themselves and "disable" the original mod jar, such as gregtech. In order to avoid the installer from detecting the absent file(s) and re-installing, those files can be ignored by passing a comma or newline delimited list to `CF_IGNORE_MISSING_FILES`.
!!! hint
A warning log will indicate what files were found to be missing from the previous installation run, such as
```
Re-installing due to missing files from modpack: [mods/gregtech-2.6.2-beta.jar]
```
!!! example
In a Compose file
```yaml
environment:
CF_IGNORE_MISSING_FILES: |
mods/gregtech-2.6.2-beta.jar
```
## Extra options
Other configuration available:
- `CF_PARALLEL_DOWNLOADS` (default is 4): specify how many parallel mod downloads to perform
- `CF_OVERRIDES_SKIP_EXISTING` (default is false): if set, files in the overrides that already exist in the data directory are skipped. **NOTE** world data is always skipped, if present.
- `CF_FORCE_REINSTALL_MODLOADER` (default is false): this can be set to `true` to force the modpack's declared modloader, such as Forge, to be reinstalled. This is useful if some of the modloader's files become corrupted.

View File

@@ -1,5 +1,9 @@
# Manual CurseForge server packs
!!! warning "Deprecated"
This mod platform type is deprecated. Please use [AUTO_CURSEFORGE](auto-curseforge.md) for new deployments.
Enable this server mode by setting `MOD_PLATFORM` or `TYPE` to "CURSEFORGE" along with the following specific variables.
You need to specify a modpack to run, using the `CF_SERVER_MOD` environment

View File

@@ -9,11 +9,17 @@ The desired modpack project is specified with the `MODRINTH_MODPACK` environment
- The project "slug", which is located in the URL shown here:
![](../../img/modrinth-project-slug.drawio.png)
- The project ID, which is located in the bottom of the left panel, shown here
![](../../img/modrinth-project-id.drawio.png)
- The project page URL, such as <https://modrinth.com/modpack/cobblemon-fabric>. As described below, this can further be the page URL of a modpack's version page.
- A custom URL of a hosted [mrpack file](https://support.modrinth.com/en/articles/8802351-modrinth-modpack-format-mrpack)
- The container path to a local [mrpack file](https://support.modrinth.com/en/articles/8802351-modrinth-modpack-format-mrpack)
## Modpack version
The automatic modpack version resolving can be narrowed in a few ways:
@@ -41,3 +47,16 @@ Some mods, such as [MCInstance Loader](https://modrinth.com/mod/mcinstance-loade
config/mcinstanceloader/pack.mcinstance
```
## Excluding files
To exclude client mods that are incorrectly declared by the modpack as server-compatible, set `MODRINTH_EXCLUDE_FILES` to a comma or newline delimited list of partial file names to exclude. You may need to set `MODRINTH_FORCE_SYNCHRONIZE` to "true" while iterating on a compatible set of mods to use.
!!! example
In a Compose file:
```yaml
MODRINTH_EXCLUDE_FILES: |
notenoughanimations
lambdynamiclights
euphoriapatcher
```

View File

@@ -40,7 +40,7 @@ In both of the cases above, there is no need for the `VERSION` or `FORGE_VERSION
### NeoForge
Support for [NeoForge](https://neoforged.net/) is also provided. A NeoForge server can be automatically managed by setting `TYPE` to "NEOFORGE". `VERSION` specifies the Minecraft version and `NEOFORGE_VERSION` can be set to select a specific sub-version. By default, the latest NeoForge version available for the requested Minecraft version will be used.
Support for [NeoForge](https://neoforged.net/) is also provided. A NeoForge server can be automatically managed by setting `TYPE` to "NEOFORGE". `VERSION` specifies the Minecraft version and `NEOFORGE_VERSION` can be set to select a specific version, "latest", or "beta". By default, the latest, non-beta NeoForge version available for the requested Minecraft version will be used.
!!! example
@@ -52,6 +52,6 @@ Support for [NeoForge](https://neoforged.net/) is also provided. A NeoForge serv
```yaml
environment:
TYPE: NEOFORGE
VERSION: "1.20.1"
NEOFORGE_VERSION: "47.1.79"
VERSION: "1.20.4"
NEOFORGE_VERSION: "beta"
```

View File

@@ -8,8 +8,32 @@ A [Magma](https://magmafoundation.org/) server, which is a combination of Forge
!!! note
There are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2", "1.16.5", etc.
The Magma project has been terminated ([original link died](https://git.magmafoundation.org/magmafoundation/magma-1-20-x/-/commit/4e7abe37403c47d09b74b77bcfc26a19b18f5891), [alternate statement on their discord](https://discord.com/channels/612695539729039411/647287352833605662/1174412642962649198) ). Please use Magma Maintained for 1.12.2, 1.18.2, 1.19.3, and 1.20.1, or Ketting for 1.20.1+.
There are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2", "1.16.5", etc.
### Magma Maintained
A [Magma Maintained](https://github.com/magmamaintained/) server, which is a alternative project of Magma, can be used with
-e TYPE=MAGMA_MAINTAINED
!!! note
There are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2", "1.18.2", "1.19.3", or "1.20.1".
In addition, `FORGE_VERSION` and `MAGMA_MAINTAINED_TAG` must be specified. You can find the supported `FORGE_VERSION` and `MAGMA_MAINTAINED_TAG` in a releases page for each repositories.
### Ketting
A [Ketting](https://github.com/kettingpowered/Ketting-1-20-x) server, which is an alternative project of Magma 1.20.1+, can be used with
-e TYPE=KETTING
There are limited base versions supported, so you will also need to set `VERSION`, such as "1.20.1" or later.
`FORGE_VERSION` and `KETTING_VERSION` may be specified; however, they will be defaulted by the [Ketting launcher](https://github.com/kettingpowered/kettinglauncher) otherwise.
Available Ketting Versions may be found at [https://github.com/kettingpowered/Ketting-1-20-x/packages/2041866/versions](https://github.com/kettingpowered/Ketting-1-20-x/packages/2041866/versions).
The Version structure is `MinecraftVersion-ForgeVersion-KettingVersion` (e.g. `1.20.1-47.2.20-0.1.4` is for Minecraft `1.20.1`, Forge `47.2.20` and Ketting `0.1.4`).
### Mohist
@@ -19,7 +43,7 @@ A [Mohist](https://github.com/MohistMC/Mohist) server can be used with
!!! note
There are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2"
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

View File

@@ -1,5 +1,11 @@
### **OS OPTIONS**
!!! warning
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.
### General options
<table>
<thead>
<tr>
@@ -108,7 +114,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tbody>
</table>
### **SERVER**
### Server
<table>
<thead>
@@ -448,7 +454,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tbody>
</table>
### **CUSTOM RESOURCE PACK**
### Custom resource pack
<table>
<thead>
@@ -481,7 +487,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tbody>
</table>
### **WHITELIST**
### Whitelist
<table>
<thead>
@@ -520,7 +526,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tbody>
</table>
### **RCON**
### RCON
<table>
<thead>
@@ -534,7 +540,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
<tbody>
<tr>
<td><code>ENABLE_RCON</code></td>
<td>Should RCON be enabled</td>
<td>Enable/disable RCON support; however, be aware that disabling RCON will remove and limit some features, such as interactive and color console support.</td>
<td><code>true</code></td>
<td>⬜️</td>
</tr>
@@ -589,7 +595,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tbody>
</table>
### **AUTOPAUSE**
### Auto-Pause
!!! note
@@ -652,7 +658,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
### **AUTOSTOP**
### Auto-Stop
!!! note
@@ -702,11 +708,11 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</table>
### **CURSEFORGE**
### CurseForge
!!! note
A CurseForge API key is required to use a CurseForge type server. Go to their [developer console](https://console.curseforge.com/), generate an API key, and set the environment variable CF_API_KEY
!!! tip
Refer to the [main documentation page](types-and-platforms/mod-platforms/auto-curseforge.md) for more details and up-to-date information.
<table>
<thead>

View File

@@ -13,26 +13,26 @@
When using the image `itzg/minecraft-server` without a tag, the `latest` image tag is implied from the table below. To use a different version of Java, please use an alternate tag to run your Minecraft server container. The `stable` tag is similar to `latest`; however, it tracks [the most recent repository release/tag](https://github.com/itzg/docker-minecraft-server/releases/latest).
| Tag name | Java version | Linux | JVM Type | Architecture |
|------------------|--------------|--------|----------------|-------------------|
| latest | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| stable | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java8 | 8 | Alpine | Hotspot | amd64 |
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 |
| java8-multiarch | 8 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
| java11 | 11 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java11-jdk | 11 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java17-jdk | 17 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
| java17-graalvm | 17 | Oracle | Oracle GraalVM | amd64,arm64 |
| java17-alpine | 17 | Alpine | Hotspot | amd64 |
| java21-alpine | 21 | Alpine | Hotspot | amd64 |
| java21 | 21 | Ubuntu | Hotspot | amd64,arm64 |
| java21-graalvm | 21 | Oracle | Oracle GraalVM | amd64,arm64 |
| Tag name | Java version | Linux | JVM Type | Architecture |
|------------------|--------------|--------|--------------------|-------------------|
| latest | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| stable | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java8 | 8 | Alpine | Hotspot | amd64 |
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 |
| java8-multiarch | 8 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
| java11 | 11 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java11-jdk | 11 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java17-jdk | 17 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
| java17-graalvm | 17 | Oracle | Oracle GraalVM[^1] | amd64,arm64 |
| java17-alpine | 17 | Alpine | Hotspot | amd64 |
| java21-alpine | 21 | Alpine | Hotspot | amd64 |
| java21 | 21 | Ubuntu | Hotspot | amd64,arm64 |
| java21-graalvm | 21 | Oracle | Oracle GraalVM[^1] | amd64,arm64 |
For example, to use Java version 8 on any supported architecture:
@@ -47,6 +47,7 @@ For example, to use Java version 8 on any supported architecture:
### Deprecated Image Tags
The following image tags have been deprecated and are no longer receiving updates:
- java19
- adopt13
- adopt14
@@ -56,3 +57,5 @@ The following image tags have been deprecated and are no longer receiving update
- java16/java16-openj9
- java17-graalvm-ce
- java20-graalvm, java20, java20-alpine
[^1]: 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.

3
examples/.gitignore vendored
View File

@@ -1,3 +1,4 @@
data/
modpacks/
.env
.env
downloads/

View File

@@ -0,0 +1,37 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
MOD_PLATFORM: AUTO_CURSEFORGE
# from .env
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-of-fabric-7
# CF_FILENAME_MATCHER: 1.2.2
CF_OVERRIDES_EXCLUSIONS: |
mods/iris*.jar
mods/sodium*.jar
MEMORY: 4G
ports:
- "25565:25565"
volumes:
- mc-data:/data
- ./downloads:/downloads
# Manually download the following and put into the 'downloads' directory next to this compose file
#
# Mod Filename Download page
# =========================== ========================================= ====================================================================================
# Fish of Thieves [Fabric 1.20.1] Fish of Thieves v3.0.3 https://www.curseforge.com/minecraft/mc-mods/fish-of-thieves/files/4958329
# Only Hammers [FORGE/FABRIC] OnlyHammers-1.20.1-0.6-Fabric https://www.curseforge.com/minecraft/mc-mods/only-hammers-forge-fabric/files/4832068
# Sprinklerz sprinklerz-0.5_fabric.jar https://www.curseforge.com/minecraft/mc-mods/sprinklerz/files/4835664
# Frog Legs (Fabric/Forge) FrogLegs-v2.0.0-1.20.1-Fabric.jar https://www.curseforge.com/minecraft/mc-mods/froglegs/files/4917818
# TrimsEffects [FABRIC] TrimsEffects - MC 1.20.X - 1.1.0 https://www.curseforge.com/minecraft/mc-mods/trimseffects/files/4954156
# Display Case Display Case-fabric-1.20-1.0.8.jar https://www.curseforge.com/minecraft/mc-mods/displaycase/files/4921333
# Structory: Towers Structory Towers 1.20.4 v1.0.6 https://www.curseforge.com/minecraft/mc-mods/structory-towers/files/4937875
# Packet Fixer Packet Fixer Fabric 1.2.1 https://www.curseforge.com/minecraft/mc-mods/packet-fixer/files/4884316
# Perfect Plushies Perfect Plushies 1.9.0 [Fabric] https://www.curseforge.com/minecraft/mc-mods/perfect-plushies/files/4985767
# Structory Structory 1.20.2 v1.3.4 https://www.curseforge.com/minecraft/mc-mods/structory/files/4937872
volumes:
mc-data: {}

View File

@@ -0,0 +1,22 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server
ports:
- "25565:25565"
environment:
EULA: "true"
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-9
# Optional: select a specific version/file
#CF_FILENAME_MATCHER: "0.2.34"
MEMORY: 4G
volumes:
- mc-data:/data
- ./downloads:/downloads
volumes:
mc-data: {}

View File

@@ -0,0 +1,19 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_MODPACK_MANIFEST: /manifests/manifest.json
CF_SLUG: "custom"
MEMORY: 2G
volumes:
- mc-data:/data
- ./manifests:/manifests:ro
ports:
- "25565:25565"
volumes:
mc-data: {}

View File

@@ -0,0 +1,28 @@
{
"minecraft": {
"version": "1.20.4",
"modLoaders": [
{
"id": "fabric-0.15.3",
"primary": true
}
]
},
"manifestType": "minecraftModpack",
"manifestVersion": 1,
"name": "Custom",
"author": "",
"files": [
{
"projectID": 351725,
"fileID": 4973035,
"required": true
},
{
"projectID": 306612,
"fileID": 5010374,
"required": true
}
],
"overrides": "overrides"
}

View File

@@ -0,0 +1,51 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server:java8-multiarch
ports:
- "25565:25565"
environment:
EULA: "true"
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/minecraft-eternal/files/4102634
CF_EXCLUDE_MODS: |
cherished-worlds
controlling
ctm
custom-main-menu
ding
minecraft-rich-presence
enchantment-descriptions
just-enough-harvestcraft
just-enough-resources-jer
menumobs
more-overlays
mouse-tweaks
oldjavawarning
overloaded-armor-bar
reauth
thaumic-jei
tips
armor-toughness-bar
waila-harvestability
ambientsounds
biomeinfo
block-drops-jei-addon
loot-capacitor-tooltips
no-recipe-book
packmodemenu
resource-reloader
# blockdrops
CF_FORCE_SYNCHRONIZE: "true"
MEMORY: 4G
volumes:
- mc-data:/data
- ./downloads:/downloads
volumes:
mc-data: {}

View File

@@ -1,18 +1,20 @@
# NOTE
# This file is named spiget with an "e"
# since it provides an example of the
# feature https://docker-minecraft-server.readthedocs.io/en/latest/mods-and-plugins/spiget/
# which uses the Spiget API at https://spiget.org/
version: "3"
services:
mc:
# Only using IMAGE variable to allow for local testing
image: itzg/minecraft-server
# image: ${IMAGE:-itzg/minecraft-server}
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: SPIGOT
# SPIGET_RESOURCES: 34315,3836
SPIGET_RESOURCES: ""
REMOVE_OLD_MODS: "true"
TYPE: PAPER
SPIGET_RESOURCES: 34315,3836
volumes:
- data:/data

View File

@@ -4,6 +4,8 @@ version: '3'
services:
minecraft:
image: itzg/minecraft-server
stdin_open: true
tty: true
ports:
- "25565:25565"
volumes:

View File

@@ -0,0 +1,14 @@
services:
mc:
image: itzg/minecraft-server
tty: true
stdin_open: true
environment:
EULA: true
TYPE: FABRIC
MODRINTH_PROJECTS: |
jline4mcdsrv
volumes:
- mc-data:/data
volumes:
mc-data: {}

View File

@@ -19,6 +19,7 @@ spec:
containers:
- name: mc
image: itzg/minecraft-server
imagePullPolicy: Always
env:
- name: EULA
value: "TRUE"

View File

@@ -0,0 +1,33 @@
version: "3"
services:
lazytainer:
image: ghcr.io/vmorganp/lazytainer:master
environment:
VERBOSE: false
ports:
- 25565:25565
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
labels:
- lazytainer.group.minecraft.sleepMethod=stop
- lazytainer.group.minecraft.ports=25565
- lazytainer.group.minecraft.minPacketThreshold=2 # Start after two incomming packets
- lazytainer.group.minecraft.inactiveTimeout=600 # 10 minutes, to allow the server to bootstrap. You can probably make this lower later if you want.
restart: unless-stopped
network_mode: bridge
mc:
image: itzg/minecraft-server
environment:
EULA: TRUE
TYPE: PAPER
MEMORY: 4G
volumes:
- ./data:/data
labels:
- lazytainer.group=minecraft
depends_on:
- lazytainer
network_mode: service:lazytainer
tty: true
stdin_open: true
restart: unless-stopped

View File

@@ -0,0 +1,15 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
MOD_PLATFORM: MODRINTH
# Download the mrpack file from https://modrinth.com/modpack/cobblemon-fabric/version/1.4.1 and place in
# modpacks directory next to this compose file.
MODRINTH_MODPACK: /modpacks/Cobblemon Modpack [Fabric] 1.4.1.mrpack
volumes:
- mc-data:/data
- ./modpacks:/modpacks:ro
volumes:
mc-data: {}

View File

@@ -10,7 +10,16 @@ services:
volumes:
- waterfall:/server
- ./waterfall-config:/config
# If you want to use Velocity here is a premade version that supports Velocity
# velocity-proxy:
# image: itzg/bungeecord
# environment:
# TYPE: VELOCITY
# ports:
# - "25565:25577"
# volumes:
# - velocity:/server
# - ./velocity-config:/config
mc:
image: itzg/minecraft-server
environment:
@@ -38,4 +47,4 @@ networks:
dbs:
# declared in ../dbs
external: true
name: dbs_default
name: dbs_default

View File

@@ -0,0 +1,155 @@
# Config version. Do not change this
config-version = "2.6"
# What port should the proxy be bound to? By default, we'll bind to all addresses on port 25565.
bind = "0.0.0.0:25565"
# What should be the MOTD? This gets displayed when the player adds your server to
# their server list. Only MiniMessage format is accepted.
motd = "<#09add3>A Velocity Server"
# What should we display for the maximum number of players? (Velocity does not support a cap
# on the number of players online.)
show-max-players = 500
# Should we authenticate players with Mojang? By default, this is on.
online-mode = true
# Should the proxy enforce the new public key security standard? By default, this is on.
force-key-authentication = true
# If client's ISP/AS sent from this proxy is different from the one from Mojang's
# authentication server, the player is kicked. This disallows some VPN and proxy
# connections but is a weak form of protection.
prevent-client-proxy-connections = false
# Should we forward IP addresses and other data to backend servers?
# Available options:
# - "none": No forwarding will be done. All players will appear to be connecting
# from the proxy and will have offline-mode UUIDs.
# - "legacy": Forward player IPs and UUIDs in a BungeeCord-compatible format. Use this
# if you run servers using Minecraft 1.12 or lower.
# - "bungeeguard": Forward player IPs and UUIDs in a format supported by the BungeeGuard
# plugin. Use this if you run servers using Minecraft 1.12 or lower, and are
# unable to implement network level firewalling (on a shared host).
# - "modern": Forward player IPs and UUIDs as part of the login process using
# Velocity's native forwarding. Only applicable for Minecraft 1.13 or higher.
player-info-forwarding-mode = "NONE"
# If you are using modern or BungeeGuard IP forwarding, configure a file that contains a unique secret here.
# The file is expected to be UTF-8 encoded and not empty.
forwarding-secret-file = "forwarding.secret"
# Announce whether or not your server supports Forge. If you run a modded server, we
# suggest turning this on.
#
# If your network runs one modpack consistently, consider using ping-passthrough = "mods"
# instead for a nicer display in the server list.
announce-forge = false
# If enabled (default is false) and the proxy is in online mode, Velocity will kick
# any existing player who is online if a duplicate connection attempt is made.
kick-existing-players = false
# Should Velocity pass server list ping requests to a backend server?
# Available options:
# - "disabled": No pass-through will be done. The velocity.toml and server-icon.png
# will determine the initial server list ping response.
# - "mods": Passes only the mod list from your backend server into the response.
# The first server in your try list (or forced host) with a mod list will be
# used. If no backend servers can be contacted, Velocity won't display any
# mod information.
# - "description": Uses the description and mod list from the backend server. The first
# server in the try (or forced host) list that responds is used for the
# description and mod list.
# - "all": Uses the backend server's response as the proxy response. The Velocity
# configuration is used if no servers could be contacted.
ping-passthrough = "DISABLED"
# If not enabled (default is true) player IP addresses will be replaced by <ip address withheld> in logs
enable-player-address-logging = true
[servers]
# Configure your servers here. Each key represents the server's name, and the value
# represents the IP address of the server to connect to.
lobby = "127.0.0.1:30066"
factions = "127.0.0.1:30067"
minigames = "127.0.0.1:30068"
# In what order we should try servers when a player logs in or is kicked from a server.
try = [
"lobby"
]
[forced-hosts]
# Configure your forced hosts here.
"lobby.example.com" = [
"lobby"
]
"factions.example.com" = [
"factions"
]
"minigames.example.com" = [
"minigames"
]
[advanced]
# How large a Minecraft packet has to be before we compress it. Setting this to zero will
# compress all packets, and setting it to -1 will disable compression entirely.
compression-threshold = 256
# How much compression should be done (from 0-9). The default is -1, which uses the
# default level of 6.
compression-level = -1
# How fast (in milliseconds) are clients allowed to connect after the last connection? By
# default, this is three seconds. Disable this by setting this to 0.
login-ratelimit = 3000
# Specify a custom timeout for connection timeouts here. The default is five seconds.
connection-timeout = 5000
# Specify a read timeout for connections here. The default is 30 seconds.
read-timeout = 30000
# Enables compatibility with HAProxy's PROXY protocol. If you don't know what this is for, then
# don't enable it.
haproxy-protocol = false
# Enables TCP fast open support on the proxy. Requires the proxy to run on Linux.
tcp-fast-open = false
# Enables BungeeCord plugin messaging channel support on Velocity.
bungee-plugin-message-channel = true
# Shows ping requests to the proxy from clients.
show-ping-requests = false
# By default, Velocity will attempt to gracefully handle situations where the user unexpectedly
# loses connection to the server without an explicit disconnect message by attempting to fall the
# user back, except in the case of read timeouts. BungeeCord will disconnect the user instead. You
# can disable this setting to use the BungeeCord behavior.
failover-on-unexpected-server-disconnect = true
# Declares the proxy commands to 1.13+ clients.
announce-proxy-commands = true
# Enables the logging of commands
log-command-executions = false
# Enables logging of player connections when connecting to the proxy, switching servers
# and disconnecting from the proxy.
log-player-connections = true
[query]
# Whether to enable responding to GameSpy 4 query responses or not.
enabled = false
# If query is enabled, on what port should the query protocol listen on?
port = 25565
# This is the map name that is reported to the query services.
map = "Velocity"
# Whether plugins should be shown in query response by default or not
show-plugins = false

View File

@@ -0,0 +1,14 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
TYPE: NEOFORGE
VERSION: latest
NEOFORGE_VERSION: beta
ports:
- "25565:25565"
volumes:
- mc:/data
volumes:
mc: {}

View File

@@ -0,0 +1,2 @@
proxies:
proxy-protocol: true

View File

@@ -0,0 +1,15 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
TYPE: PAPER
ports:
# Use host port 25566 assuming mc-router or similar is bound to 25565
- "25566:25565"
volumes:
- mc-data:/data
- ./config:/config:ro
volumes:
mc-data: {}

View File

@@ -24,7 +24,9 @@ java_clients_connections() {
local connections
if java_running ; then
if ! connections=$(mc-monitor status --host localhost --port "$SERVER_PORT" --show-player-count); then
connections=0
# consider it a non-zero player count if the ping fails
# otherwise a laggy server with players connected could get paused
connections=1
fi
else
connections=0

View File

@@ -11,6 +11,7 @@
"defensive-measures",
"ding",
"dynamiclights-reforged",
"embeddium",
"enchantment-descriptions",
"entity-texture-features-fabric",
"entityculling",
@@ -58,6 +59,11 @@
"excludes": [
"modernfix"
]
},
"create-arcane-engineering": {
"forceIncludes": [
"just-enough-resources-jer"
]
}
}
}

View File

@@ -33,10 +33,11 @@ markdown_extensions:
permalink: true
- attr_list
- def_list
- footnotes
- tables
- pymdownx.emoji:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- pymdownx.highlight:
anchor_linenums: true
line_spans: __span
@@ -49,7 +50,7 @@ markdown_extensions:
user: camalot
repo: mkdocs-test
- mkdocs-click
copyright: Copyright &copy; itzg 2023.
copyright: Copyright &copy; itzg 2024.
plugins:
- search
- autorefs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -7,20 +7,15 @@
: "${UID:=1000}"
: "${GID:=1000}"
umask 0002
umask "${UMASK:=0002}"
if isTrue "${ENABLE_RCON:-true}" && ! [ -v RCON_PASSWORD ] && ! [ -v RCON_PASSWORD_FILE ]; then
RCON_PASSWORD=$(openssl rand -hex 12)
export RCON_PASSWORD
fi
# Remove from previous run and do this as elevated user since file used to be created before demoting
rm -f "$HOME/.rcon-cli.env"
if ! isTrue "${SKIP_SUDO:-false}" && [ "$(id -u)" = 0 ]; then
runAsUser=minecraft
runAsGroup=minecraft
# For rcon-cli access running via exec, which by default is running as root
echo "password=${RCON_PASSWORD}" > "$HOME/.rcon-cli.env"
if [[ -v UID ]]; then
if [[ $UID != 0 ]]; then
if [[ $UID != $(id -u minecraft) ]]; then

View File

@@ -15,11 +15,9 @@ IFS=$'\n\t'
: "${RCON_CMDS_FIRST_CONNECT:=}"
: "${RCON_CMDS_LAST_DISCONNECT:=}"
: "${RCON_CMDS_PERIOD:=10}"
: "${RCON_PASSWORD_FILE:=}"
: "${ENABLE_RCON:=true}"
: "${RCON_PASSWORD:=minecraft}"
: "${RCON_PORT:=25575}"
export ENABLE_RCON RCON_PASSWORD RCON_PORT
export ENABLE_RCON RCON_PORT
: "${MEMORY=1G}"
: "${INIT_MEMORY=${MEMORY}}"
@@ -49,6 +47,45 @@ if [ ! -e /data/eula.txt ]; then
writeEula
fi
if isTrue "${DEBUG_MEMORY:-false}"; then
log "Memory usage and availability (in MB)"
uname -a
free -m
fi
##########################################
# Setup RCON password
if isTrue "${ENABLE_RCON:-true}"; then
if [[ -v RCON_PASSWORD_FILE ]]; then
if [ ! -e "${RCON_PASSWORD_FILE}" ]; then
log ""
log "Initial RCON password file ${RCON_PASSWORD_FILE} does not seems to exist."
log "Please ensure your configuration."
log "If you are using Docker Secrets feature, please check this for further information: "
log " https://docs.docker.com/engine/swarm/secrets"
log ""
exit 1
else
RCON_PASSWORD=$(cat "${RCON_PASSWORD_FILE}")
export RCON_PASSWORD
fi
elif ! [[ -v RCON_PASSWORD ]]; then
RCON_PASSWORD=$(openssl rand -hex 12)
export RCON_PASSWORD
fi
# For rcon-cli access running via exec, which by default is running as root
echo "password=${RCON_PASSWORD}" > "$HOME/.rcon-cli.env"
echo "password: \"${RCON_PASSWORD}\"" > "$HOME/.rcon-cli.yaml"
else
rm -f "$HOME/.rcon-cli.env" "$HOME/.rcon-cli.yaml"
fi
##########################################
# Auto-pause/stop
if isTrue "${ENABLE_AUTOPAUSE}" && isTrue "${EXEC_DIRECTLY:-false}"; then
log "EXEC_DIRECTLY=true is incompatible with ENABLE_AUTOPAUSE=true"
exit 1
@@ -67,25 +104,6 @@ if [[ $PROXY ]]; then
sleep 5
fi
if [[ $RCON_PASSWORD_FILE ]]; then
log ""
if [ ! -e ${RCON_PASSWORD_FILE} ]; then
log "Initial RCON password file ${RCON_PASSWORD_FILE} does not seems to exist."
log "Please ensure your configuration."
log "If you are using Docker Secrets feature, please check this for further information: "
log " https://docs.docker.com/engine/swarm/secrets"
log ""
exit 1
else
RCON_PASSWORD=$(cat ${RCON_PASSWORD_FILE})
export RCON_PASSWORD
fi
log ""
fi
# For rcon-cli access
echo "password=${RCON_PASSWORD}" > "$HOME/.rcon-cli.env"
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.
@@ -113,7 +131,8 @@ fi
cd /data || exit 1
export ORIGINAL_TYPE=${TYPE^^}
export DECLARED_TYPE=${TYPE^^}
export DECLARED_VERSION="$VERSION"
if isTrue "${ENABLE_AUTOPAUSE}"; then
"${SCRIPTS:-/}start-autopause"
@@ -215,6 +234,15 @@ case "${TYPE^^}" in
exec "${SCRIPTS:-/}start-deployMagma" "$@"
;;
MAGMA_MAINTAINED)
evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployMagmaMaintained" "$@"
;;
KETTING)
exec "${SCRIPTS:-/}start-deployKetting" "$@"
;;
MOHIST)
evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployMohist" "$@"

View File

@@ -10,6 +10,8 @@ set -eu
: "${CF_FILENAME_MATCHER:=}"
: "${CF_PARALLEL_DOWNLOADS:=4}"
: "${CF_FORCE_SYNCHRONIZE:=false}"
: "${CF_FORCE_REINSTALL_MODLOADER:=false}"
: "${CF_IGNORE_MISSING_FILES:=}"
: "${CF_EXCLUDE_INCLUDE_FILE=https://raw.githubusercontent.com/itzg/docker-minecraft-server/master/files/cf-exclude-include.json}"
: "${CF_EXCLUDE_MODS:=}"
: "${CF_FORCE_INCLUDE_MODS:=}"
@@ -23,6 +25,8 @@ resultsFile=/data/.install-curseforge.env
isDebugging && set -x
ensureRemoveAllModsOff "MOD_PLATFORM=AUTO_CURSEFORGE"
args=(
--results-file="$resultsFile"
)
@@ -47,8 +51,12 @@ fi
if [[ ${CF_OVERRIDES_EXCLUSIONS} ]]; then
args+=(--overrides-exclusions="$CF_OVERRIDES_EXCLUSIONS")
fi
if [[ ${CF_IGNORE_MISSING_FILES} ]]; then
args+=(--ignore-missing-files="$CF_IGNORE_MISSING_FILES")
fi
args+=(
--force-synchronize="$CF_FORCE_SYNCHRONIZE"
--force-reinstall-modloader="$CF_FORCE_REINSTALL_MODLOADER"
--overrides-skip-existing="$CF_OVERRIDES_SKIP_EXISTING"
)

View File

@@ -4,7 +4,7 @@
. "${SCRIPTS:-/}start-utils"
isDebugging && set -x
set -e
set -eo pipefail
function buildSpigotFromSource {
if [[ ${TYPE^^} = *BUKKIT ]] && ! versionLessThan "1.14"; then
@@ -25,14 +25,14 @@ function buildSpigotFromSource {
case ${TYPE^^} in
SPIGOT)
if ! mv spigot-*.jar /data/${SERVER}; then
if ! mv spigot-*.jar "/data/${SERVER}"; then
log "ERR failed to build Spigot"
cat /data/spigot_build.log
exit 1
fi
;;
*BUKKIT)
if ! mv craftbukkit-*.jar /data/${SERVER}; then
if ! mv craftbukkit-*.jar "/data/${SERVER}"; then
log "ERR failed to build Spigot"
cat /data/spigot_build.log
exit 1
@@ -61,11 +61,14 @@ function downloadSpigot {
esac
if [[ ${VERSION^^} = LATEST ]]; then
VERSION=$(restify https://getbukkit.org/download/spigot --attribute='property=og:title' | jq -r '.[0] | .attributes | select(.property == "og:title") | .content | split(" ") | .[-1]')
if ! VERSION=$(restify https://getbukkit.org/download/spigot --attribute='property=og:title' | jq -r '.[0] | .attributes | select(.property == "og:title") | .content | split(" ") | .[-1]'); then
log "ERROR: failed to retrieve latest version from https://getbukkit.org/download/spigot -- site might be down"
exit 1
fi
fi
if [[ -z $downloadUrl ]]; then
if versionLessThan 1.16.5 || ([[ ${getbukkitFlavor} = "craftbukkit" ]] && [[ ${VERSION} = "1.16.5" ]]); then
if versionLessThan 1.16.5 || { [[ ${getbukkitFlavor} = "craftbukkit" ]] && [[ ${VERSION} = "1.16.5" ]] ; }; then
downloadUrl="https://cdn.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VERSION}.jar"
else
downloadUrl="https://download.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VERSION}.jar"
@@ -82,7 +85,7 @@ function downloadSpigot {
fi
log "Downloading $match from $downloadUrl ..."
curl -fsSL -o "$SERVER" $curlArgs "$downloadUrl"
if [[ $? != 0 || $(grep -c "DOCTYPE html" $SERVER) != 0 ]]; then
if [[ $? != 0 || $(grep -c "DOCTYPE html" "$SERVER") != 0 ]]; then
cat <<EOF
ERROR: failed to download from $downloadUrl
@@ -130,4 +133,4 @@ fi
# Normalize on Spigot for operations below
export FAMILY=SPIGOT
exec ${SCRIPTS:-/}start-spiget "$@"
exec "${SCRIPTS:-/}start-spiget" "$@"

View File

@@ -12,7 +12,7 @@ if isURL "${CUSTOM_SERVER}"; then
filename=$(basename "${CUSTOM_SERVER}")
export SERVER=/data/${filename}
if [[ -f ${SERVER} ]] || [ -n "$FORCE_REDOWNLOAD" ]; then
if [[ -f ${SERVER} ]] && ! isTrue "$FORCE_REDOWNLOAD"; then
log "Using previously downloaded jar at ${SERVER}"
else
log "Downloading custom server jar from ${CUSTOM_SERVER} ..."

32
scripts/start-deployKetting Executable file
View File

@@ -0,0 +1,32 @@
#!/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="kettinglauncher-.+?(?<!-sources)\.jar" \
kettingpowered/kettinglauncher
); then
log "ERROR: failed to download Ketting launcher"
exit 1
fi
export SERVER
resolveVersion
EXTRA_ARGS+="-minecraftVersion $VERSION"
if [[ ${KETTING_VERSION:-} ]]; then
EXTRA_ARGS+="-kettingVersion $KETTING_VERSION"
fi
if [[ ${FORGE_VERSION:-} ]]; then
EXTRA_ARGS+="-forgeVersion $FORGE_VERSION"
fi
export EXTRA_ARGS
export SERVER
export FAMILY=HYBRID
exec "${SCRIPTS:-/}start-spiget" "$@"

View File

@@ -0,0 +1,38 @@
#!/bin/bash
# shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"
isDebugging && set -x
: "${FORGE_VERSION:=}"
: "${MAGMA_MAINTAINED_TAG:=}"
resolveVersion
if [ -z $MAGMA_MAINTAINED_TAG ]; then
log "ERROR the variable MAGMA_MAINTAINED_TAG is not specified"
exit 1
fi
# Magma-1.12.2/releases/download/88659fb/Magma-1.12.2-88659fb-server.jar
# Magma-1.20.1/releases/download/adec9ce/magma-1.20.1-47.2.17-adec9ce-server.jar
if [[ ${VERSION} = "1.12.2" ]]; then
fileName="Magma-${VERSION}-${MAGMA_MAINTAINED_TAG}-server.jar"
else
if [ -z $FORGE_VERSION ]; then
log "ERROR the variable FORGE_VERSION is not specified"
exit 1
fi
fileName="magma-${VERSION}-${FORGE_VERSION}-${MAGMA_MAINTAINED_TAG}-server.jar"
fi
downloadUrl="https://github.com/magmamaintained/Magma-${VERSION}/releases/download/${MAGMA_MAINTAINED_TAG}/${fileName}"
if ! SERVER=$(get --output-filename --skip-up-to-date --output /data "$downloadUrl"); then
log "ERROR: failed to download Magma Maintained server jar from $downloadUrl"
exit 1
fi
export SERVER
export FAMILY=HYBRID
exec "${SCRIPTS:-/}start-spiget" "$@"

View File

@@ -10,6 +10,7 @@ resultsFile=/data/.install-modrinth.env
: "${MODRINTH_LOADER:=}"
: "${MODRINTH_VERSION:=${MODRINTH_VERSION_ID:-}}"
: "${MODRINTH_IGNORE_MISSING_FILES:=}"
: "${MODRINTH_EXCLUDE_FILES:=}"
if [[ ! $MODRINTH_MODPACK ]]; then
log "ERROR: MODRINTH_MODPACK must be set when using TYPE/MOD_PLATFORM of MODRINTH"
@@ -18,6 +19,8 @@ fi
isDebugging && set -x
ensureRemoveAllModsOff "MOD_PLATFORM=MODRINTH"
args=(
--results-file="$resultsFile"
--project="${MODRINTH_MODPACK}"
@@ -52,6 +55,7 @@ setArg() {
setArg --loader MODRINTH_LOADER
setArg --version MODRINTH_VERSION
setArg --default-version-type MODRINTH_DEFAULT_VERSION_TYPE
setArg --exclude-files MODRINTH_EXCLUDE_FILES
if ! mc-image-helper install-modrinth-modpack "${args[@]}"; then
log "ERROR failed to install Modrinth modpack"

View File

@@ -88,7 +88,7 @@ elif versionLessThan 1.18.1; then
fi
fi
if isTrue ${ENABLE_ROLLING_LOGS:-false}; then
if isTrue "${ENABLE_ROLLING_LOGS:-false}"; then
if ! ${canUseRollingLogs}; then
log "ERROR: Using rolling logs is currently not possible in the selected version due to CVE-2021-44228"
exit 1
@@ -139,7 +139,7 @@ fi
if isTrue "${USE_AIKAR_FLAGS}"; then
# From https://mcflags.emc.gs/
if (( $(normalizeMemSize "${MAX_MEMORY}") >= $(normalizeMemSize 12g) )); then
if [[ $MAX_MEMORY ]] && (( $(normalizeMemSize "${MAX_MEMORY}") >= $(normalizeMemSize 12g) )); then
log "Using Aikar's >12GB flags"
G1NewSizePercent=40
G1MaxNewSizePercent=50
@@ -192,12 +192,6 @@ if isTrue "${USE_SIMD_FLAGS}"; then
"
fi
if isTrue "${DEBUG_MEMORY}"; then
log "Memory usage and availability (in MB)"
uname -a
free -m
fi
if [[ ${INIT_MEMORY} || ${MAX_MEMORY} ]]; then
log "Setting initial memory to ${INIT_MEMORY:=${MEMORY}} and max to ${MAX_MEMORY:=${MEMORY}}"
if [[ ${INIT_MEMORY} ]]; then
@@ -209,11 +203,6 @@ if [[ ${INIT_MEMORY} || ${MAX_MEMORY} ]]; then
fi
function copyFilesForCurseForge() {
# copy player modification files unconditionally since their
# processing into json is additive anyway
[ -f /data/ops.txt ] && cp -f /data/ops.txt "${FTB_DIR}/"
[ -f /data/white-list.txt ] && cp -f /data/white-list.txt "${FTB_DIR}/"
if [ ! -e "${FTB_DIR}/server-icon.png" ] && [ -e /data/server-icon.png ]; then
cp -f /data/server-icon.png "${FTB_DIR}/"
fi
@@ -237,11 +226,16 @@ fi
mcServerRunnerArgs=(
--stop-duration "${STOP_DURATION:-60}s"
--named-pipe "${CONSOLE_IN_NAMED_PIPE:-/tmp/minecraft-console-in}"
)
if isTrue "${CREATE_CONSOLE_IN_PIPE:-false}"; then
mcServerRunnerArgs+=(--named-pipe "${CONSOLE_IN_NAMED_PIPE:-/tmp/minecraft-console-in}")
fi
if [[ ${STOP_SERVER_ANNOUNCE_DELAY} ]]; then
mcServerRunnerArgs+=(--stop-server-announce-delay "${STOP_SERVER_ANNOUNCE_DELAY}s")
fi
if isTrue "${ENABLE_SSH}"; then
mcServerRunnerArgs+=(--remote-console)
fi
if [[ ${TYPE} == "CURSEFORGE" && "${SERVER}" ]]; then
copyFilesForCurseForge

View File

@@ -1,28 +0,0 @@
#!/bin/bash
# shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"
# If supplied with a URL for a config (simple zip of configurations), download it and unpack
if [[ "$MODCONFIG" ]]; then
case "X$MODCONFIG" in
X[Hh][Tt][Tt][Pp]*[Zz][iI][pP])
log "Downloading mod/plugin configs via HTTP"
log " from $MODCONFIG ..."
curl -sSL -o /tmp/modconfig.zip "$MODCONFIG"
if [ "$FAMILY" = "SPIGOT" ]; then
mkdir -p /data/plugins
unzip -o -d /data/plugins /tmp/modconfig.zip
else
mkdir -p /data/config
unzip -o -d /data/config /tmp/modconfig.zip
fi
rm -f /tmp/modconfig.zip
;;
*)
log "Invalid URL given for modconfig: Must be HTTP or HTTPS and a ZIP file"
;;
esac
fi
exec "${SCRIPTS:-/}start-setupMounts" "$@"

View File

@@ -83,6 +83,9 @@ fi
function handleListings() {
if usesMods && usesPlugins; then
if [[ "$MODS" ]]; then
ensureRemoveAllModsOff "MODS is set"
mkdir -p "$MODS_OUT_DIR"
mc-image-helper mcopy \
--glob=*.jar \
@@ -91,6 +94,7 @@ function handleListings() {
"$MODS"
fi
if [[ "$PLUGINS" ]]; then
ensureRemoveAllModsOff "PLUGINS is set"
mkdir -p "$PLUGINS_OUT_DIR"
mc-image-helper mcopy \
--glob=*.jar \
@@ -100,6 +104,7 @@ function handleListings() {
fi
if [[ "$MODS_FILE" ]]; then
ensureRemoveAllModsOff "MODS_FILE is set"
mkdir -p "$MODS_OUT_DIR"
mc-image-helper mcopy \
--file-is-listing \
@@ -108,6 +113,7 @@ function handleListings() {
"$MODS_FILE"
fi
if [[ "$PLUGINS_FILE" ]]; then
ensureRemoveAllModsOff "PLUGINS_FILE is set"
mkdir -p "$PLUGINS_OUT_DIR"
mc-image-helper mcopy \
--file-is-listing \
@@ -123,6 +129,7 @@ function handleListings() {
fi
if [[ "$MODS" || "$PLUGINS" ]]; then
ensureRemoveAllModsOff "MODS or PLUGINS is set"
mkdir -p "$outDir"
mc-image-helper mcopy \
--glob=*.jar \
@@ -132,6 +139,7 @@ function handleListings() {
fi
if [[ "$MODS_FILE" || "$PLUGINS_FILE" ]]; then
ensureRemoveAllModsOff "MODS_FILE or PLUGINS_FILE is set"
mkdir -p "$outDir"
mc-image-helper mcopy \
--file-is-listing \
@@ -237,7 +245,7 @@ function handleModrinthProjects() {
fi
if [[ $MODRINTH_PROJECTS ]] && isFamily HYBRID FORGE FABRIC SPIGOT; then
if isFamily HYBRID FORGE; then
if isFamily HYBRID; then
loader=forge
else
loader="${TYPE,,}"
@@ -299,4 +307,26 @@ if usesMods || usesPlugins; then
handleCurseForgeFiles
fi
exec "${SCRIPTS:-/}start-setupModconfig" "$@"
# If supplied with a URL for a config (simple zip of configurations), download it and unpack
if [[ "$MODCONFIG" ]]; then
case "X$MODCONFIG" in
X[Hh][Tt][Tt][Pp]*[Zz][iI][pP])
log "Downloading mod/plugin configs via HTTP"
log " from $MODCONFIG ..."
curl -sSL -o /tmp/modconfig.zip "$MODCONFIG"
if [ "$FAMILY" = "SPIGOT" ]; then
mkdir -p /data/plugins
unzip -o -d /data/plugins /tmp/modconfig.zip
else
mkdir -p /data/config
unzip -o -d /data/config /tmp/modconfig.zip
fi
rm -f /tmp/modconfig.zip
;;
*)
log "Invalid URL given for modconfig: Must be HTTP or HTTPS and a ZIP file"
;;
esac
fi
exec "${SCRIPTS:-/}start-setupMounts" "$@"

View File

@@ -22,8 +22,10 @@ elif [[ -v OVERRIDE_WHITELIST ]] && isTrue "${OVERRIDE_WHITELIST}"; then
fi
sharedArgs=(--version="$VERSION")
if isFalse "${ONLINE_MODE:-true}"; then
sharedArgs+=( --offline )
if [[ ${FTB_DIR:-} ]]; then
sharedArgs+=(--output-directory="$FTB_DIR")
else
sharedArgs+=(--output-directory=/data)
fi
if [[ -v OPS_FILE ]]; then

View File

@@ -25,6 +25,7 @@ function customizeServerProps {
# normalize MOTD
if [[ ${TYPE^^} = LIMBO ]]; then
if [[ $MOTD ]] && ! [[ $MOTD =~ ^{ ]]; then
# shellcheck disable=SC2089
MOTD="{\"text\":\"${MOTD}\"}"
fi
fi
@@ -114,7 +115,15 @@ function customizeServerProps {
if [[ -v CUSTOM_SERVER_PROPERTIES ]]; then
setPropertiesArgs+=(--custom-properties "$CUSTOM_SERVER_PROPERTIES")
fi
if [[ -v SERVER_PROPERTIES_ESCAPE_UNICODE ]]; then
if isTrue "$SERVER_PROPERTIES_ESCAPE_UNICODE"; then
setPropertiesArgs+=(--escape-unicode)
fi
elif versionLessThan '1.20'; then
setPropertiesArgs+=(--escape-unicode)
fi
handleDebugMode
if ! mc-image-helper set-properties "${setPropertiesArgs[@]}" "$SERVER_PROPERTIES"; then
log "ERROR: failed to update server.properties"
exit 1
@@ -136,10 +145,10 @@ if ! isTrue "${SKIP_SERVER_PROPERTIES}"; then
# which shows up in the server listing in the client
if ! [ -v MOTD ]; then
# snapshot is the odd case where we have to look at version to identify that label
if [[ ${ORIGINAL_TYPE} == "VANILLA" && ${VERSION} == "SNAPSHOT" ]]; then
if [[ ${DECLARED_TYPE} == "VANILLA" && ${VERSION} == "SNAPSHOT" ]]; then
label=SNAPSHOT
else
label=${ORIGINAL_TYPE}
label=${DECLARED_TYPE}
fi
# Convert label to title-case

View File

@@ -347,4 +347,13 @@ function resolveFamily() {
;;
esac
export FAMILY
}
function ensureRemoveAllModsOff() {
reason=${1?}
if isTrue "${REMOVE_OLD_MODS:-false}"; then
log "WARNING using REMOVE_OLDS_MODS interferes with $reason -- it is now disabled"
REMOVE_OLD_MODS=false
fi
}

View File

@@ -0,0 +1,19 @@
version: "3"
services:
monitor:
depends_on:
- mc
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
entrypoint: mc-monitor
command: status --host mc --retry-interval 1s --timeout 1s --retry-limit 60
mc:
restart: "no"
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
environment:
EULA: "TRUE"
VERSION: ${MINECRAFT_VERSION:-LATEST}
TYPE: PAPER
# regression tests https://github.com/itzg/docker-minecraft-server/issues/2545
MOTD: "Foo§rBar"

View File

@@ -3,41 +3,33 @@
# go to script root directory
cd "$(dirname "$0")" || exit 1
# compose down function for reuse
down() {
docker-compose down -v --remove-orphans
}
checkandExitOnFailure(){
failed=$1
# docker-compose logs outputs messages from the specified container
if $failed; then
docker-compose logs mc
down
cd ..
exit 2
fi
docker compose -f "$1" down -v --remove-orphans
}
# tests to completely spin up Minecraft and use the monitor to validate the service is running.
fullMinecraftUpTest(){
folder=$1
cd "$folder"
file="$1"
failed=false
# run the monitor to validate the Minecraft image is healthy
docker-compose run monitor || failed=true
echo "${folder} Result: failed=$failed"
checkandExitOnFailure $failed
down
cd ..
docker compose -f "$file" run monitor || failed=true
echo "$(dirname "$file") Result: failed=$failed"
if $failed; then
docker compose logs mc
down "$file"
return 1
else
down "$file"
fi
}
# go through each folder in fulltests and run fullbuilds
FOLDERS=$(ls)
for folder in $FOLDERS; do
# If folder is a directory
if [ -d "$folder" ]; then
echo "Starting Tests on ${folder}"
fullMinecraftUpTest $folder
files=$(ls */docker-compose.yml)
for file in $files; do
echo "Starting Tests on $(dirname "$file")"
if ! fullMinecraftUpTest "$file"; then
exit 2
fi
done

View File

@@ -4,7 +4,8 @@ services:
monitor:
depends_on:
- mc
image: itzg/mc-monitor:${MC_MONITOR_VERSION:-0.10.4}
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
entrypoint: mc-monitor
command: status --host mc --retry-interval 1s --timeout 1s --retry-limit 300
mc:
restart: "no"

View File

@@ -1 +1 @@
architectury-api@4.11.93
architectury-api@4.12.94