Compare commits

...

131 Commits

Author SHA1 Message Date
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
dependabot[bot]
3b7ddcdbbd build(deps): bump the patches group in /docs with 1 update
Bumps the patches group in /docs with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).

- [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.7...9.4.8)

---
updated-dependencies:
- 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>
2023-11-06 09:00:03 -06:00
Geoff Bourne
8c74fc34cb build: java21 and java21-alpine images (#2464) 2023-11-03 17:33:10 -05:00
dependabot[bot]
89889c556b build(deps): bump mkdocs-static-i18n from 1.1.1 to 1.2.0 in /docs (#2459)
* build(deps): bump mkdocs-static-i18n from 1.1.1 to 1.2.0 in /docs

Bumps [mkdocs-static-i18n](https://github.com/ultrabug/mkdocs-static-i18n) from 1.1.1 to 1.2.0.
- [Changelog](https://github.com/ultrabug/mkdocs-static-i18n/blob/main/docs/changelog.md)
- [Commits](https://github.com/ultrabug/mkdocs-static-i18n/compare/1.1.1...1.2.0)

---
updated-dependencies:
- dependency-name: mkdocs-static-i18n
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump other docs dependencies together

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Geoff Bourne <itzgeoff@gmail.com>
2023-11-03 16:58:21 -05:00
Geoff Bourne
951a55707d build: upgrade easy-add built with Go 1.20.10 (#2462)
Also
* upgrade mc-monitor to Go 1.20.10
* upgrade restify to use Go 1.20.10
* upgrade rcon-cli to use Go 1.20.10
* upgrade mc-server-runner to use Go 1.20.10
2023-11-03 12:16:15 -05:00
Geoff Bourne
377273e5a3 Fail startup if server properties processing fails (#2460) 2023-11-01 19:08:31 -05:00
Kezzer
78fd5457d4 <doc>(server-properties):
- Add YAML multiline to render `GENERATOR_SETTINGS` code more readable
- Remove JSON code block above as it is now unnecessary
2023-10-27 11:25:29 -05:00
Kezzer
2e07ba431d <doc>(server-properties):
- Update generator_settings documentation in server-properties.md
2023-10-27 11:25:29 -05:00
Geoff Bourne
2dca9220e2 auto-cf: support excluding files from overrides (#2456) 2023-10-26 21:05:53 -05:00
dependabot[bot]
8ee9d6d2eb build(deps): bump the updates group with 1 update (#2452) 2023-10-24 08:42:01 -05:00
Jérémy Levilain
8faf560721 docs: refine deployment chapters and add Shulker section (#2454) 2023-10-23 07:38:59 -05:00
Geoff Bourne
a1d0830a8e docs: link to wiki from difficulty config (#2449) 2023-10-22 20:31:32 -05:00
Geoff Bourne
5642b8db35 auto-cf: for manual downloads, provide file page (#2444) 2023-10-18 21:19:52 -05:00
dependabot[bot]
ee562599f4 build(deps): bump the patches group in /docs with 2 updates (#2439)
Bumps the patches group in /docs with 2 updates: [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocs-static-i18n](https://github.com/ultrabug/mkdocs-static-i18n).


Updates `mkdocs-material` from 9.4.4 to 9.4.6
- [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.4...9.4.6)

Updates `mkdocs-static-i18n` from 1.1.0 to 1.1.1
- [Changelog](https://github.com/ultrabug/mkdocs-static-i18n/blob/main/docs/changelog.md)
- [Commits](https://github.com/ultrabug/mkdocs-static-i18n/compare/1.1.0...1.1.1)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patches
- dependency-name: mkdocs-static-i18n
  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-10-16 14:00:30 -05:00
Geoff Bourne
1ffcb5c221 docs: clarify multi-line MOTD (#2441) 2023-10-16 13:59:43 -05:00
Geoff Bourne
8cdf4d0072 Ensure server.properties is processed as UTF-8 (#2437) 2023-10-15 23:09:51 -05:00
Geoff Bourne
1545236cc6 misc: Corrected utils import for start-setupRbac (#2436) 2023-10-14 17:25:35 -05:00
Geoff Bourne
2ebcc0fe00 MOTD no longer needs to be pre-normalized (#2434) 2023-10-13 15:54:45 -05:00
Geoff Bourne
e5f818bdf1 Sanitize mod file subpath in Modrinth modpacks (#2429) 2023-10-10 17:44:03 -05:00
dependabot[bot]
df497ce3d8 build(deps): bump mkdocs-static-i18n from 1.0.6 to 1.1.0 in /docs (#2425) 2023-10-10 08:46:13 -05:00
Geoff Bourne
f7ff2779d9 Resolve Modrinth projects for Quilt specifically (#2427) 2023-10-09 18:21:42 -05:00
dependabot[bot]
c9e14864f5 build(deps): bump the patches group in /docs with 1 update (#2424)
Bumps the patches group in /docs with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).

- [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.3...9.4.4)

---
updated-dependencies:
- 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-10-09 18:03:20 -05:00
Geoff Bourne
ec539a5dd2 autopause: allow for DEBUG to be enabled (#2418) 2023-10-07 17:36:05 -05:00
Geoff Bourne
7427bc9043 build: fixing variant listing for java21-graalvm (#2416) 2023-10-07 15:19:01 -05:00
Geoff Bourne
8ab104f6b7 Added image variant for GraalVM Java 21 (#2415) 2023-10-07 14:07:24 -05:00
Geoff Bourne
f15cbb4ca1 Allow for custom server properties (#2414) 2023-10-07 13:26:27 -05:00
Geoff Bourne
fa235e97c5 Added support for NeoForge (#2408) 2023-10-03 18:00:24 -05:00
dependabot[bot]
d5e315bba8 build(deps): bump mkdocs-material from 9.3.1 to 9.4.3 in /docs (#2405) 2023-10-03 08:13:21 -05:00
dependabot[bot]
91ad2974ec build(deps): bump the patches group in /docs with 3 updates (#2399) 2023-10-02 07:37:09 -05:00
Geoff Bourne
59902566f3 docs: added examples page, starting with Geyser (#2404) 2023-10-01 17:42:15 -05:00
Geoff Bourne
411391baa1 Properly resolve latest file URLs from bukkit (#2402) 2023-09-30 12:14:31 -05:00
Misode
cadc48b41a Update Minecraft Wiki links to new domain after fork (#2400) 2023-09-27 21:28:53 -05:00
Geoff Bourne
1396a1ef6c build: update various github actions (#2397)
* build(deps): bump the patches group in /docs with 2 updates

Bumps the patches group in /docs with 2 updates: [mkdocs-literate-nav](https://github.com/oprypin/mkdocs-literate-nav) and [mkdocs-static-i18n](https://github.com/ultrabug/mkdocs-static-i18n).


Updates `mkdocs-literate-nav` from 0.6.0 to 0.6.1
- [Release notes](https://github.com/oprypin/mkdocs-literate-nav/releases)
- [Commits](https://github.com/oprypin/mkdocs-literate-nav/compare/v0.6.0...v0.6.1)

Updates `mkdocs-static-i18n` from 1.0.2 to 1.0.3
- [Changelog](https://github.com/ultrabug/mkdocs-static-i18n/blob/main/docs/changelog.md)
- [Commits](https://github.com/ultrabug/mkdocs-static-i18n/compare/1.0.2...1.0.3)

---
updated-dependencies:
- dependency-name: mkdocs-literate-nav
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patches
- dependency-name: mkdocs-static-i18n
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patches
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump mkdocs-material from 9.2.7 to 9.3.1 in /docs

Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.2.7 to 9.3.1.
- [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.2.7...9.3.1)

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

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump docker/setup-qemu-action from 2.2.0 to 3.0.0

Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2.2.0 to 3.0.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2.2.0...v3.0.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump docker/build-push-action from 4.2.1 to 5.0.0

Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.2.1 to 5.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4.2.1...v5.0.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump docker/setup-buildx-action from 2 to 3

Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump docker/metadata-action from 4 to 5

Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](https://github.com/docker/metadata-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump docker/login-action from 2 to 3

Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build: update various github actions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-23 18:44:45 -05:00
Zyztem
0cf5195fc5 Fix a typo in the variable portion of the docs (#2385) 2023-09-15 21:00:05 -05:00
dependabot[bot]
17e2f90b91 build(deps): bump docker/build-push-action from 4.1.1 to 4.2.1 (#2380) 2023-09-13 08:08:53 -05:00
Geoff Bourne
a079dd0ff0 docs: remove note about getbukkit being down (#2382) 2023-09-13 07:53:05 -05:00
dependabot[bot]
c4d8972a83 build(deps): bump actions/checkout from 3 to 4 (#2379) 2023-09-11 07:29:29 -05:00
Geoff Bourne
b494124a2d docs: note the apparent death of getbukkit (#2377) 2023-09-09 14:08:51 -05:00
Geoff Bourne
d8ad2e5721 modrinth: provide dependencies download options (#2375) 2023-09-09 08:37:46 -05:00
Noa Himesaka
ec7bd14451 Add Oracle GraalVM to images (#2369) 2023-09-08 07:38:14 -05:00
Geoff Bourne
2097702daa modrinth: support plugin lookups that are compatible with selected loader (#2372) 2023-09-06 21:23:05 -05:00
dependabot[bot]
dc149eaa01 build(deps): bump mkdocstrings from 0.22.0 to 0.23.0 in /docs (#2368) 2023-09-04 09:13:50 -05:00
dependabot[bot]
f14b77db05 build(deps): bump the patches group in /docs with 1 update (#2367) 2023-09-04 09:09:17 -05:00
Geoff Bourne
df53fe3971 Removing chmod g+w at start to tighten security (#2363) 2023-08-29 22:01:34 -05:00
DanielN
bb57d7e99f Disable healthcheck for unsupported versions (#2360) 2023-08-27 09:41:42 -05:00
Geoff Bourne
03034d2f15 docs: clarified path for zip file modpack (#2361) 2023-08-26 13:38:14 -05:00
Geoff Bourne
8fd1495795 Support skipping existing whitelist/ops files and restore as default (#2358) 2023-08-22 21:34:47 -05:00
Geoff Bourne
dba2556e4e Corrected use of VERSION when building Bukkit from source (#2341) 2023-08-20 13:00:06 -05:00
Geoff Bourne
cdec1c0c19 modrinth: allow installer to ignore missing files (#2352) 2023-08-20 09:11:55 -05:00
Geoff Bourne
3aa0dd2db6 modrinth: resolve issue with null versionId in manifest (#2349) 2023-08-18 18:37:19 -05:00
Geoff Bourne
c3829aa435 docs: clarified FORGE_VERSION usage (#2348) 2023-08-18 08:15:32 -05:00
Geoff Bourne
356c1af046 modrinth: ensure requested loader for modpack is optional (#2347) 2023-08-17 17:14:08 -05:00
Geoff Bourne
6bd4de3af5 Fixed copying of OPS_FILE and WHITELIST_FILE (#2346) 2023-08-17 16:12:12 -05:00
Geoff Bourne
4040e971f5 Improve whitelist/ops handling with caching, UUID, and offline support (#2342) 2023-08-16 19:41:22 -05:00
92 changed files with 1818 additions and 2532 deletions

View File

@@ -1,7 +1,24 @@
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
updates:
patterns:
- "*"
update-types:
- patch
- minor
- package-ecosystem: pip
directory: "/docs"
schedule:
interval: weekly
groups:
patches:
patterns:
- "*"
update-types:
- patch
- minor

View File

@@ -1,4 +1,4 @@
name: Test and Build multi-architecture
name: Build and Publish
on:
push:
branches:
@@ -18,10 +18,11 @@ jobs:
matrix:
# NOTE: the "latest" variant is identified in the Docker meta step's 'latest' config
variant:
- java20
- java20-alpine
- java21-graalvm
- java21
- java21-alpine
- java17
- java17-graalvm-ce
- java17-graalvm
- java17-jdk
- java17-openj9
- java17-alpine
@@ -34,37 +35,41 @@ jobs:
- java11-openj9
- java11-jdk
include:
# JAVA 20:
- variant: java20
baseImage: eclipse-temurin:20-jre
# JAVA 21:
- variant: java21-graalvm
baseImage: container-registry.oracle.com/graalvm/jdk:21-ol8
platforms: linux/amd64,linux/arm64
mcVersion: 1.19.3
- variant: java20-alpine
baseImage: eclipse-temurin:20-jre-alpine
mcVersion: latest
- variant: java21
baseImage: eclipse-temurin:21-jre
platforms: linux/amd64,linux/arm64
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
- variant: java17-graalvm-ce
baseImage: ghcr.io/graalvm/graalvm-ce:ol8-java17
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
@@ -106,14 +111,14 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4.1.1
with:
# for build-files step
fetch-depth: 0
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
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.
@@ -139,13 +144,13 @@ jobs:
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3.0.0
- name: Set up QEMU
uses: docker/setup-qemu-action@v2.2.0
uses: docker/setup-qemu-action@v3.0.0
- name: Build for test
uses: docker/build-push-action@v4.1.1
uses: docker/build-push-action@v5.1.0
with:
platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }}
@@ -168,14 +173,14 @@ jobs:
tests/test.sh
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v3.0.0
if: env.HAS_IMAGE_REPO_ACCESS
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GHCR
uses: docker/login-action@v2
uses: docker/login-action@v3.0.0
if: env.HAS_IMAGE_REPO_ACCESS
with:
registry: ghcr.io
@@ -183,7 +188,7 @@ jobs:
password: ${{ github.token }}
- name: Build and push
uses: docker/build-push-action@v4.1.1
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

@@ -16,26 +16,26 @@ jobs:
fail-fast: false
matrix:
variant:
- java20
- java21
- java17
- java17-alpine
- java8-multiarch
include:
# JAVA 20:
- variant: java20
baseImage: eclipse-temurin:20-jre
# JAVA 21:
- 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
@@ -45,16 +45,16 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4.1.1
with:
# for build-files step
fetch-depth: 0
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3.0.0
- name: Confirm multi-arch build
uses: docker/build-push-action@v4.1.1
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@v4.1.1
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.0
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.2
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.0 --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.2 --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.2 --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.0
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=1.9.0 --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.33.5
ARG MC_HELPER_BASE_URL=https://github.com/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
ARG MC_HELPER_VERSION=1.37.11
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 \
@@ -61,9 +68,7 @@ ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000
COPY --chmod=755 scripts/start* /
COPY --chmod=755 bin/ /usr/local/bin/
COPY --chmod=755 bin/mc-health /health.sh
COPY --chmod=644 files/log4j2.xml /image/log4j2.xml
# By default this file gets retrieved from repo, but bundle in image as potential fallback
COPY --chmod=644 files/cf-exclude-include.json /image/cf-exclude-include.json
COPY --chmod=644 files/* /image/
COPY --chmod=755 files/auto /auto
RUN curl -fsSL -o /image/Log4jPatcher.jar https://github.com/CreeperHost/Log4jPatcher/releases/download/v1.0.1/Log4jPatcher-1.0.1.jar

1945
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

@@ -1,10 +1,10 @@
#!/bin/bash
if [[ $(uname -m) == "aarch64" ]]; then
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.14/gosu-arm64
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-arm64
chmod +x /bin/gosu
elif [[ $(uname -m) == "x86_64" ]]; then
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.14/gosu-amd64
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-amd64
chmod +x /bin/gosu
else
echo "Not supported!"

View File

@@ -36,7 +36,9 @@ dnf install -y ImageMagick \
zstd \
lbzip2 \
libpcap \
libwebp
libwebp \
findutils \
which
bash /build/ol/install-gosu.sh
@@ -44,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

@@ -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,32 +1,74 @@
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.fandom.com/wiki/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, you will need to double escape the newline such as
To produce a multi-line MOTD, embed a newline character as `\n` in the string, such as
-e MOTD="Line one\\nLine two"
-e MOTD="Line one\nLine two"
!!! tip
You can also embed configured and resolved environment variables using [placeholders](#placeholders).
### Difficulty
@@ -40,49 +82,87 @@ Valid values are: `peaceful`, `easy`, `normal`, and `hard`, and an
error message will be output in the logs if it's not one of these
values.
Refer to [the Minecraft wiki](https://minecraft.wiki/w/Difficulty)
### Whitelist Players
!!! note
!!! warning "For public servers"
It is very important to set this with servers exposed to the internet where you want only limited players to join.
It is very important to consider setting a whitelist of expected players.
To whitelist players for your Minecraft server, you can:
- Provide a list of usernames and/or UUIDs separated by commas via the `WHITELIST` environment variable
`docker run -d -e WHITELIST=user1,uuid2 ...`
- Provide the url or path to a whitelist file via `WHITELIST_FILE` environment variable
`docker run -d -e WHITELIST_FILE=/extra/whitelist.json ...`
- Provide a list of usernames and/or UUIDs separated by commas or newlines via the `WHITELIST` environment variable
- Provide the URL or container path to a whitelist file via `WHITELIST_FILE` that will be retrieved/copied into the standard location
When either is set, [whitelisting of connecting users](https://minecraft.fandom.com/wiki/Server.properties#white-list) is enabled . If managing the list manually, `ENABLE_WHITELIST` can be set to "true" to set the `white-list` property.
!!! example
If whitelist configuration already exists, `WHITELIST_FILE` will not be retrieved and any usernames in `WHITELIST` are **added** to the whitelist configuration. You can enforce regeneration of the whitelist on each server startup by setting `OVERRIDE_WHITELIST` to "true". This will delete the whitelist file before processing whitelist configuration.
In a compose file, a text block can be used to improve maintainability, such as
!!! note
```yaml
WHITELIST: |
user1
user2
user3
```
You can provide both `WHITELIST_FILE` and `WHITELIST`, which are processed in that order.
When either is set, [whitelisting of connecting users](https://minecraft.wiki/w/Server.properties#white-list) is enabled.
To change the behavior when the whitelist file already exists, set the variable `EXISTING_WHITELIST_FILE` to one of the following options:
`SKIP` (default)
: Skip processing of the whitelist file when one is already present. This is the same as setting the legacy variable `OVERRIDE_WHITELIST` to "false".
`SYNCHRONIZE`
: Synchronize the list of users in the file with the `WHITELIST` or `WHITELIST_FILE` provided. When using both, `WHITELIST` will take precedence. This is the same as setting the legacy variable `OVERRIDE_WHITELIST` to "true".
`MERGE`
: Merge the list of users from `WHITELIST` into the existing file. `WHITELIST_FILE` cannot be used with this option.
`SYNC_FILE_MERGE_LIST`
: When `WHITELIST_FILE` is provided it will overwrite an existing whitelist file. Also, if `WHITELIST` is provided, then those users will be merged into the newly copied file.
!!! note
UUIDs passed via `WHITELIST` need to be the dashed variant, otherwise it not be recognised and instead added as a username.
If running Minecraft 1.7.5 or earlier, these variables will apply to `white-list.txt`, with 1.7.6 implementing support for `whitelist.json`. Make sure your `WHITELIST_FILE` is in the appropriate format.
To [enforce the whitelist changes immediately](https://minecraft.fandom.com/wiki/Server.properties#enforce-whitelist) when whitelist commands are used , set `ENFORCE_WHITELIST` to "true".
For versions prior to 1.7.3, `white-list.txt` will be maintained instead. Only usernames are supported for those versions.
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.
### Op/Administrator Players
Similar to the whitelist, to add users as operators (aka adminstrators) to your Minecraft server, you can:
Similar to the whitelist, users can be provisioned as operators (aka administrators) to your Minecraft server by
- Provide te url or path to an ops file via `OPS_FILE` environment variable
`docker run -d -e OPS_FILE=https://config.example.com/extra/ops.json ...`
- Provide a list of usernames and/or UUIDs separated by commas via the `OPS` environment variable
`docker run -d -e OPS=user1,uuid2 ...`
- Providing a list of usernames and/or UUIDs separated by commas or newlines via the `OPS` environment variable
- Providing the URL or container path to an ops file via `OPS_FILE` that will be retrieved/copied into the standard location
If ops configuration already exists, `OPS_FILE` will not be retrieved and any usernames in `OPS` are **added** to the ops configuration. You can enforce regeneration of the ops configuration on each server startup by setting `OVERRIDE_OPS` to "true". This will delete the ops file before processing ops configuration.
!!! example
!!! note
In a compose file, a text block can be used to improve maintainability, such as
Similar to whitelists, you can provide both `OPS_FILE` and `OPS`, and Minecraft 1.7.5 or earlier will use `ops.txt` rather than `ops.json`.
```yaml
OPS: |
user1
user2
user3
```
To change the behavior when the ops file already exists, set the variable `EXISTING_OPS_FILE` to one of the following options:
`SKIP` (default)
: Skip processing of the ops file when one is already present. This is the same as setting the legacy variable `OVERRIDE_OPS` to "false".
`SYNCHRONIZE`
: Synchronize the list of users in the file with the `OPS` or `OPS_FILE` provided. When using both, `OPS` will take precedence. The `level` and `bypassesPlayerLimit` will be retained from previous entries. This is the same as setting the legacy variable `OVERRIDE_OPS` to "true".
`MERGE`
: Merge the list of users from `OPS` into the existing file. `OPS_FILE` cannot be used with this option.
`SYNC_FILE_MERGE_LIST`
: When `OPS_FILE` is provided it will overwrite an existing ops file. Also, if `OPS` is provided, then those users will be merged into the newly copied file.
!!! note
For versions prior to 1.7.3, `ops.txt` will be maintained instead. Only usernames are supported for those versions.
### Enable/disable initial selection of datapacks
@@ -107,9 +187,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
@@ -243,7 +327,7 @@ If using a negative value for the seed, make sure to quote the value such as:
By default, Minecraft servers are configured to run in Survival mode. You can
change the mode using `MODE` where you can either provide the [standard
numerical values](http://minecraft.gamepedia.com/Game_mode#Game_modes) or the
numerical values](http://minecraft.wiki/Game_mode#Game_modes) or the
shortcut values:
- creative
@@ -265,9 +349,45 @@ environment variable set to `false`, such as
### Level Type and Generator Settings
By default, a standard world is generated with hills, valleys, water, etc. A different level type can
be configured by setting `LEVEL_TYPE` to [an expected type listed here](https://minecraft.fandom.com/wiki/Server.properties#level-type).
be configured by setting `LEVEL_TYPE` to [an expected type listed here](https://minecraft.wiki/w/Server.properties#level-type).
For some of the level types, `GENERATOR_SETTINGS` can be used to further customize the world generation [as described here](https://minecraft.fandom.com/wiki/Server.properties#generator-settings).
For some of the level types, `GENERATOR_SETTINGS` can be used to further customize the world generation.
To configure the `GENERATOR_SEETINGS` you need to add the appropriate `GeneratorOptions` JSON configuration. In the case of a superflat world, you may omit the `flat_world_options`.
The layers are applied from -64 and up and are added in the order of the list
Example for a superflat world:
- 1x bedrock
- 2x stone
- 15x sandstone
- Desert biome
```yaml
LEVEL_TYPE: FLAT
GENERATOR_SETTINGS: >-4
{
"layers": [
{
"block": "minecraft:bedrock",
"height": 1
},
{
"block": "minecraft:stone",
"height": 2
},
{
"block": "minecraft:sandstone",
"height": 15
}
],
"biome": "minecraft:desert"
}
```
For more details, check the [official wiki](https://minecraft.wiki/w/Java_Edition_level_format#generatorOptions_tag_format).
### Custom Server Resource Pack
@@ -317,10 +437,28 @@ If you must, the server port can be set like:
**however**, be sure to change your port mapping accordingly and be prepared for some features to break.
### Custom server properties
Some mods/plugins utilize custom `server.properties` entries which can be declared via the `CUSTOM_SERVER_PROPERTIES` environment variable. The contents must be newline delimited `name=value` pairs.
Within a compose file, newline delimited entries can be declared as shown here:
```yaml
CUSTOM_SERVER_PROPERTIES: |
custom1=value1
defaultworldgenerator-port=f8c04631-f744-11ec-b260-f02f74b094e0
```
When using `docker run` from a bash shell, the entries must be quoted with the `$'` syntax, such as
```
-e CUSTOM_SERVER_PROPERTIES=$'k1=v1\nk2=v2'
```
### Other server property mappings
| Environment Variable | Server Property |
| --------------------------------- | --------------------------------- |
|-----------------------------------|-----------------------------------|
| BROADCAST_CONSOLE_TO_OPS | broadcast-console-to-ops |
| BROADCAST_RCON_TO_OPS | broadcast-rcon-to-ops |
| ENABLE_STATUS | enable-status |

View File

@@ -46,49 +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
```
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

@@ -1,12 +1,22 @@
# More Deployment Info
## Using Helm
## On Kubernetes
### Using Helm
- itzg Helm Chart:
- [GitHub repo](https://github.com/itzg/minecraft-server-charts)
- [Helm Chart repo](https://itzg.github.io/minecraft-server-charts/)
- [mcsh/server-deployment](https://github.com/mcserverhosting-net/charts)
### Using Shulker
[Shulker](https://github.com/jeremylvln/Shulker) is a Kubernetes operator for managing complex and dynamic Minecraft infrastructures, including game servers and proxies. It uses the docker-minecraft-server and docker-bungeecord images under-the-hood.
## On CloudFormation (AWS)
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Minecraft Server Deployment (CloudFormation) repository](https://github.com/vatertime/minecraft-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
## Supporting Articles
Below are supporting articles for server deployment.
@@ -16,7 +26,3 @@ Below are supporting articles for server deployment.
https://dev.to/rela-v/zero-to-minecraft-server-with-docker-desktop-and-compose-500a
- This is a reference guide/tutorial on how to set up a vanilla Minecraft server using this project, including step-by-step instructions, and information on topics such as port-forwarding.
## Deploying onto AWS
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Minecraft Server Deployment (CloudFormation) repository](https://github.com/vatertime/minecraft-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.

74
docs/misc/examples.md Normal file
View File

@@ -0,0 +1,74 @@
# Examples
Various examples are [maintained in the repository](https://github.com/itzg/docker-minecraft-server/tree/master/examples). The sections below highlight a few particular ones.
## Bedrock compatible server
Using the [GeyserMC plugin](https://geysermc.org/) with a Paper server (or similar) "enables clients from Minecraft Bedrock Edition to join your Minecraft Java server". The example also includes [Floodgate](https://wiki.geysermc.org/floodgate/) which "allows Xbox Live authenticated Bedrock users to join without a Java Edition account".
```yaml
version: "3.8"
services:
mc:
image: itzg/minecraft-server
environment:
EULA: "true"
TYPE: "PAPER"
PLUGINS: |
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot
ports:
- "25565:25565"
- "19132:19132/udp"
volumes:
- ./data:/data
```
[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:
container_name: 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=PURPUR
- MEMORY=4G
- TZ=Europe/Berlin
- OVERRIDE_SERVER_PROPERTIES=TRUE
volumes:
- /opt/container_volumes/minecraft/data:/data
labels:
- lazytainer.group=minecraft
depends_on:
- lazytainer
network_mode: service:lazytainer
tty: true
stdin_open: true
restart: unless-stopped
networks: {}
```
[Source](https://github.com/itzg/docker-minecraft-server/blob/master/examples/lazytainer/docker-compose.yml)

View File

@@ -25,3 +25,8 @@ healthcheck:
```
Some orchestration systems, such as Portainer, don't allow for disabling the default `HEALTHCHECK` declared by this image. In those cases you can approximate the disabling of healthchecks by setting the environment variable `DISABLE_HEALTHCHECK` to `true`.
### Healthchecks for older versions
This container disables Healthchecks for Versions before b1.8 as those versions do not support any kind of server pinging.
For more information see [Server List Ping](https://wiki.vg/Server_List_Ping#Beta_1.8_to_1.3)

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

@@ -47,16 +47,14 @@ These paths work well if you want to have a common set of modules in a separate
## Zip file modpack
Like the `WORLD` option above, you can specify the URL or path of a "mod pack"
to download and install into `mods` for Forge/Fabric or `plugins` for Bukkit/Spigot.
To use this option pass the environment variable `MODPACK`, such as
Like the `WORLD` option above, you can specify the URL or container path of a "mod pack" to download and install into `mods` for Forge/Fabric or `plugins` for Bukkit/Spigot. To use this option pass the environment variable `MODPACK`, such as
```shell
docker run -d -e MODPACK=http://www.example.com/mods/modpack.zip ...
```
!!! note
The referenced URL must be a zip file with one or more jar files at the
The referenced URL/file must be a zip file with one or more jar files at the
top level of the zip archive. Make sure the jars are compatible with the
particular `TYPE` of server you are running.

View File

@@ -2,17 +2,29 @@
[Modrinth](https://modrinth.com/) is an open source modding platform with a clean, easy to use website for finding [Fabric and Forge mods](https://modrinth.com/mods). At startup, the container will automatically locate and download the newest versions of mod/plugin files that correspond to the `TYPE` and `VERSION` in use. Older file versions downloaded previously will automatically be cleaned up.
- **MODRINTH_PROJECTS** : comma separated list of project slugs (short name) or IDs. The project ID can be located in the "Technical information" section. The slug is the part of the page URL that follows `/mod/`:
- **MODRINTH_PROJECTS** : comma or newline separated list of project slugs (short name) or IDs. The project ID is located in the "Technical information" section. The slug is the part of the page URL that follows `/mod/`:
```
https://modrinth.com/mod/fabric-api
----------
|
+-- project slug
```
Also, specific version/type can be declared using colon symbol and version id/type after the project slug. The version id can be found at 'Metadata' section. Valid version types are `release`, `beta`, `alpha`. For instance:
```
-e MODRINTH_PROJECTS=fabric-api,fabric-api:PbVeub96,fabric-api:beta
```
- **MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES**=true : required dependencies of the project will _always_ be downloaded and optional dependencies can also be downloaded by setting this to `true`
- **MODRINTH_ALLOWED_VERSION_TYPE**=release : the version type is used to determine the newest version to use from each project. The allowed values are `release`, `beta`, `alpha`.
Also, a specific version/type can be declared using colon symbol and version id/type after the project slug. The version id can be found in the 'Metadata' section. Valid version types are `release`, `beta`, `alpha`.
!!! example
| Description | Example |
|---------------------------------|-----------------------|
| Select latest version | `fabric-api` |
| Select specific version | `fabric-api:PbVeub96` |
| Select latest beta version | `fabric-api:beta` |
| Latest version using project ID | `P7dR8mSH` |
## Extra options
`MODRINTH_DOWNLOAD_DEPENDENCIES`
: Can be set to `none` (the default), `required`, or `optional` to download required and/or optional dependencies.
`MODRINTH_ALLOWED_VERSION_TYPE`
: The version type is used to determine the newest version to use from each project. The allowed values are `release` (default), `beta`, `alpha`.

View File

@@ -1,9 +1,8 @@
mkdocs
mkdocs-material-extensions
mkdocs-material
mkdocs-autorefs
mkdocstrings
mkdocs-literate-nav
mdx-gh-links
mkdocs-click
mkdocs-static-i18n
mkdocs == 1.5.3
mkdocs-material == 9.5.7
mkdocs-autorefs == 0.5.0
mkdocstrings == 0.24.0
mkdocs-literate-nav == 0.6.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
@@ -56,13 +56,6 @@ For example:
-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8
```
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.
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**.
The latest file will be located and used by default, but if a specific version is desired you can use one of the following options. With any of these options **do not select a server file** -- they lack the required manifest and defeat the ability to consistently automate startup.
- Use `CF_PAGE_URL`, but include the full URL to a specific file
@@ -75,17 +68,95 @@ The following shows where to get the URL to the specific file and also shows whe
The following examples all refer to version 1.0.7 of ATM8:
```
-e CF_PAGE_URL=https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390
```yaml
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390
```
```
-e CF_SLUG=all-the-mods-8 -e CF_FILE_ID=4248390
```yaml
CF_SLUG: all-the-mods-8
CF_FILE_ID: "4248390"
```
```yaml
CF_SLUG: all-the-mods-8
CF_FILENAME_MATCHER: 1.0.7
```
-e CF_SLUG=all-the-mods-8 -e CF_FILENAME_MATCHER=1.0.7
```
## Manual Downloads
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.
!!! 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 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
@@ -103,12 +174,45 @@ If needing to iterate on the options above, set `CF_FORCE_SYNCHRONIZE` to "true"
!!! important
These options are provided to empower you to get your server up and running quickly. Please help out by reporting an issue with the respective mod project. Ideally mod developers should [use correct registrations for one-sided client mods](https://docs.minecraftforge.net/en/latest/concepts/sides/#writing-one-sided-mods). Understandably, those code changes may be non-trivial, so mod authors can also add "Client" to the game versions when publishing.
## Extra options
## Excluding Overrides Files
Modpack zip files typically include an `overrides` subdirectory that may contain config files, world data, and extra mod files. All of those files will be extracted into the `/data` path of the container. If any of those files, such as incompatible mods, need to be excluded from extraction, then the `CF_OVERRIDES_EXCLUSIONS` variable can be set with a comma or newline delimited list of ant-style paths ([see below](#ant-style-paths)) to exclude, relative to the overrides (or `/data`) directory.
### Ant-style paths
Ant-style paths can include the following globbing/wildcard symbols:
| Symbol | Behavior |
|--------|---------------------------------------------------------|
| `*` | Matches zero, one, or many characters except a slash |
| `**` | Matches zero, one, or many characters including slashes |
| `?` | Matches one character |
!!! example
The following compose `environment` entries show how to exclude Iris and Sodium mods from the overrides
```yaml
CF_OVERRIDES_EXCLUSIONS: mods/iris*.jar,mods/sodium*.jar
```
or using newline delimiter, which improves maintainability
```yaml
CF_OVERRIDES_EXCLUSIONS: |
mods/iris*.jar
mods/sodium*.jar
```
## 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`
## 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

@@ -2,24 +2,61 @@
[Modrinth Modpacks](https://modrinth.com/modpacks) can automatically be installed along with the required mod loader (Forge or Fabric) by setting `MOD_PLATFORM` or `TYPE` to "MODRINTH". Upgrading (and downgrading) takes care of cleaning up old files and upgrading (and downgrading) the mod loader.
## Modpack project
The desired modpack project is specified with the `MODRINTH_MODPACK` environment variable and must be one of:
- 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:
The latest release or beta version, respectively, of the Modrinth modpack is selected when `VERSION` is "LATEST" or "SNAPSHOT". That can be overridden by setting `MODRINTH_DEFAULT_VERSION_TYPE` to "release", "beta", or "alpha".
Furthermore, the resolved modpack version can be narrowed by setting `VERSION` to a specific Minecraft version, such as "1.19.2".
The resolved modpack version can be narrowed by setting `VERSION` to a specific Minecraft version, such as "1.19.2".
The selected version can also be narrowed to a particular mod loader by setting `MODRINTH_LOADER` to either "forge", "fabric", or "quilt".
Instead of auto resolving, a specific version of modpack file can be specified by passing the version's page URL to `MODRINTH_MODPACK`, such as <https://modrinth.com/modpack/cobblemon-fabric/version/1.3.2> or by setting `MODRINTH_VERSION` to the version ID or number located in the Metadata section, as shown here
![](../../img/modrinth-version-id.drawio.png)
## Ignore missing files
Some mods, such as [MCInstance Loader](https://modrinth.com/mod/mcinstance-loader), use temporary files from the modpack and delete them when finished. 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 `MODRINTH_IGNORE_MISSING_FILES`.
!!! example
In a Compose file
```yaml
environment:
MODRINTH_IGNORE_MISSING_FILES: |
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

@@ -1,12 +1,20 @@
# Bukkit/Spigot
Enable Bukkit/Spigot server mode by adding a `-e TYPE=BUKKIT` or `-e TYPE=SPIGOT` to your command-line.
Run a Bukkit/Spigot server type by setting the environment variable `TYPE` to "BUKKIT" or "SPIGOT".
```
docker run -d -v /path/on/host:/data \
-e TYPE=SPIGOT \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
```
!!! example
Command-line
```
docker run ... -e TYPE=SPIGOT ...
```
Compose
```yaml
environment:
...
TYPE: SPIGOT
```
If the downloaded server jar is corrupted, set `FORCE_REDOWNLOAD` to "true" to force a re-download during next container startup. After successfully re-downloading, you should remove that or set to "false".
@@ -15,16 +23,14 @@ If you are hosting your own copy of Bukkit/Spigot you can override the download
- -e BUKKIT_DOWNLOAD_URL=<url>
- -e SPIGOT_DOWNLOAD_URL=<url>
You can build spigot from source by adding `-e BUILD_FROM_SOURCE=true`
Plugins can either be managed within the `plugins` subdirectory of the [data directory](../../data-directory.md) or you can also [attach a `/plugins` volume](../../mods-and-plugins/index.md#optional-plugins-mods-and-config-attach-points). If you add plugins while the container is running, you'll need to restart it to pick those up.
[You can also auto-download plugins using `SPIGET_RESOURCES`.](../../mods-and-plugins/spiget.md)
!!! note
Some of the `VERSION` values are not as intuitive as you would think, so make sure to click into the version entry to find the **exact** version needed for the download. For example, "1.8" is not sufficient since their download naming expects `1.8-R0.1-SNAPSHOT-latest` exactly.
## Build from source
You can build spigot from source by setting the environment variable `BUILD_FROM_SOURCE` to "true".
## Alternatives
### Canyon

View File

@@ -1,32 +1,57 @@
Enable [Forge server](http://www.minecraftforge.net/) mode by adding a `-e TYPE=FORGE` to your command-line.
A [Forge server](http://www.minecraftforge.net/) can be automatically downloaded, upgraded, and run by setting the environment variable `TYPE` to "FORGE".
The overall version is specified by `VERSION`, [as described in the section above](../../versions/minecraft.md) and will run the recommended Forge version by default. You can also choose to run a specific Forge version with `FORGE_VERSION`, such as `-e FORGE_VERSION=14.23.5.2854`.
!!! example
```
docker run -d -v /path/on/host:/data \
-e TYPE=FORGE \
-e VERSION=1.12.2 -e FORGE_VERSION=14.23.5.2854 \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
```
```
docker run -e TYPE=FORGE ...
```
or in a compose file
```yaml
environment:
TYPE: FORGE
```
To use a pre-downloaded Forge installer, place it in the attached `/data` directory and
specify the name of the installer file with `FORGE_INSTALLER`, such as:
The overall version is specified by `VERSION`, [as described in the section above](../../versions/minecraft.md) and provides the same benefits of upgrading as new versions are released. By default, the recommended version of Forge for that Minecraft version will be selected. The latest version can be selected instead by setting the environment variable `FORGE_VERSION` to "latest". You can also choose a specific Forge version by setting `FORGE_VERSION` with that version, such as "14.23.5.2854".
```
docker run -d -v /path/on/host:/data ... \
-e FORGE_INSTALLER=forge-1.11.2-13.20.0.2228-installer.jar ...
```
!!! example
To download a Forge installer from a custom location, such as your own file repository, specify
the URL with `FORGE_INSTALLER_URL`, such as:
```
docker run -e TYPE=FORGE -e VERSION=1.12.2 -e FORGE_VERSION=14.23.5.2854 ...
```
or in a compose file
```yaml
environment:
TYPE: FORGE
VERSION: "1.12.2"
FORGE_VERSION: "14.23.5.2854"
```
```
docker run -d -v /path/on/host:/data ... \
-e FORGE_INSTALLER_URL=http://HOST/forge-1.11.2-13.20.0.2228-installer.jar ...
```
To use a pre-downloaded Forge installer, place it in a location mounted into the container and specify the container path with `FORGE_INSTALLER`. To download a Forge installer from a custom location, such as your own file repository, specify the URL with `FORGE_INSTALLER_URL`.
In both of the cases above, there is no need for the `VERSION` or `FORGEVERSION` variables.
In both of the cases above, there is no need for the `VERSION` or `FORGE_VERSION` variables.
!!! note
If an error occurred while installing Forge, it might be possible to resolve by temporarily setting `FORGE_FORCE_REINSTALL` to "true". Be sure to remove that variable after successfully starting the server.
## Alternatives
### 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 version, "latest", or "beta". By default, the latest, non-beta NeoForge version available for the requested Minecraft version will be used.
!!! example
```
docker run -e TYPE=NEOFORGE -e VERSION=1.20.1 -e NEOFORGE_VERSION=47.1.79 ...
```
or in a compose file
```yaml
environment:
TYPE: NEOFORGE
VERSION: "1.20.4"
NEOFORGE_VERSION: "beta"
```

View File

@@ -8,7 +8,34 @@ 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](https://git.magmafoundation.org/magmafoundation/magma-1-20-x/-/commit/4e7abe37403c47d09b74b77bcfc26a19b18f5891). Please use Magma Maintained for 1.12.2, 1.18.2, 1.19.3, and 1.20.1, or Ketting for 1.20.2+.
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 a alternative project of Magma 1.20.2+, 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.2" or later.
In addition, `FORGE_VERSION` and `KETTING_VERSION` must be specified. You can find the supported `FORGE_VERSION` in the [project page](https://github.com/kettingpowered/Ketting-1-20-x), and `KETTING_VERSION` in the [release page](https://github.com/kettingpowered/Ketting-1-20-x/releases).
!!! note
The length of `KETTING_VERSION` is 8, not 7 since it is taken from an abbreviated git commit hash. The value can be found in a jar file link on an Assets section for each releases.
### Mohist
@@ -19,7 +46,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

@@ -37,7 +37,7 @@ Configuration options with defaults:
!!! note
Instead of using format codes in the MOTD, Limbo requires [JSON chat content](https://minecraft.fandom.com/wiki/Raw_JSON_text_format#Java_Edition). If a plain string is provided, which is the default, then it gets converted into the required JSON structure.
Instead of using format codes in the MOTD, Limbo requires [JSON chat content](https://minecraft.wiki/w/Raw_JSON_text_format#Java_Edition). If a plain string is provided, which is the default, then it gets converted into the required JSON structure.
## Crucible

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>
@@ -48,7 +54,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
/etc/timezone:/etc/timezone:ro</code>
</td>
<td><code>1G</code></td>
<td><code>UTC</code></td>
<td>⬜️</td>
</tr>
<tr>
@@ -108,7 +114,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tbody>
</table>
### **SERVER**
### Server
<table>
<thead>
@@ -260,7 +266,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tr>
<tr>
<td><code>MODE</code></td>
<td>Minecraft servers are configured to run in Survival mode by default. You can change the mode using MODE where you can either provide the <a href="http://minecraft.gamepedia.com/Game_mode#Game_modes">standard numerical values</a> or the shortcut values:<br />
<td>Minecraft servers are configured to run in Survival mode by default. You can change the mode using MODE where you can either provide the <a href="http://minecraft.wiki/Game_mode#Game_modes">standard numerical values</a> or the shortcut values:<br />
<ul>
<li>creative</li>
<li>survival</li>
@@ -278,14 +284,14 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tr>
<tr>
<td><code>LEVEL_TYPE</code></td>
<td>By default, a standard world is generated with hills, valleys, water, etc. A different level type can be configured by setting LEVEL_TYPE to <a href="https://minecraft.fandom.com/wiki/Server.properties#level-type">an expected type listed here</a>.
<td>By default, a standard world is generated with hills, valleys, water, etc. A different level type can be configured by setting LEVEL_TYPE to <a href="https://minecraft.wiki/w/Server.properties#level-type">an expected type listed here</a>.
</td>
<td><code>minecraft:default</code></td>
<td>⬜️</td>
</tr>
<tr>
<td><code>GENERATOR_SETTINGS</code></td>
<td>For some of the level types, <code>GENERATOR_SETTINGS</code> can be used to further customize the world generation <a href="https://minecraft.fandom.com/wiki/Server.properties#generator-settings">as described here</a>.</td>
<td>For some of the level types, <code>GENERATOR_SETTINGS</code> can be used to further customize the world generation <a href="https://minecraft.wiki/w/Server.properties#generator-settings">as described here</a>.</td>
<td><code></code></td>
<td>⬜️</td>
</tr>
@@ -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,25 +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-ce | 17 | Oracle | GraalVM CE | amd64,arm64 |
| java17-alpine | 17 | Alpine | Hotspot | amd64 |
| java20-alpine | 20 | Alpine | Hotspot | amd64 |
| java20 | 20 | Ubuntu | Hotspot | 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:
@@ -46,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
@@ -53,3 +55,7 @@ The following image tags have been deprecated and are no longer receiving update
- openj9-nightly
- multiarch-latest
- 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.

View File

@@ -2,7 +2,8 @@ To use a different Minecraft version, pass the `VERSION` environment variable (c
- LATEST (the default)
- SNAPSHOT
- or a specific version, such as "1.7.9"
- a specific version, such as "1.7.9"
- or an alpha and beta version, such as "b1.7.3" (server download might not exist)
For example, to use the latest snapshot:

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

@@ -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,37 @@
version: "3"
services:
lazytainer:
container_name: 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=PURPUR
- MEMORY=4G
- TZ=Europe/Berlin
- OVERRIDE_SERVER_PROPERTIES=TRUE
volumes:
- /opt/container_volumes/minecraft/data:/data
labels:
- lazytainer.group=minecraft
depends_on:
- lazytainer
network_mode: service:lazytainer
tty: true
stdin_open: true
restart: unless-stopped
networks: {}

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

@@ -706,5 +706,5 @@ update-client-command-list: true
register-command-list-data: true
# If LuckPerms should attempt to resolve Vanilla command target selectors for LP commands.
# See here for more info: https://minecraft.gamepedia.com/Commands#Target_selectors
# See here for more info: https://minecraft.wiki/Commands#Target_selectors
resolve-command-selectors: false

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",

View File

@@ -0,0 +1,58 @@
{
"motd": {"env": "MOTD"},
"gamemode": {"env": "MODE"},
"difficulty": {"env": "DIFFICULTY"},
"white-list": {"env": "WHITELIST_PROP"},
"enforce-whitelist": {"env": "ENFORCE_WHITELIST"},
"level-type": {"env": "LEVEL_TYPE"},
"server-name": {"env": "SERVER_NAME"},
"server-ip": {"env": "SERVER_IP"},
"server-port": {"env": "SERVER_PORT"},
"allow-nether": {"env": "ALLOW_NETHER"},
"announce-player-achievements": {"env": "ANNOUNCE_PLAYER_ACHIEVEMENTS"},
"enable-command-block": {"env": "ENABLE_COMMAND_BLOCK"},
"spawn-animals": {"env": "SPAWN_ANIMALS"},
"spawn-monsters": {"env": "SPAWN_MONSTERS"},
"spawn-npcs": {"env": "SPAWN_NPCS"},
"spawn-protection": {"env": "SPAWN_PROTECTION"},
"generate-structures": {"env": "GENERATE_STRUCTURES"},
"view-distance": {"env": "VIEW_DISTANCE"},
"hardcore": {"env": "HARDCORE"},
"snooper-enabled": {"env": "SNOOPER_ENABLED"},
"max-build-height": {"env": "MAX_BUILD_HEIGHT"},
"force-gamemode": {"env": "FORCE_GAMEMODE"},
"max-tick-time": {"env": "MAX_TICK_TIME"},
"enable-query": {"env": "ENABLE_QUERY"},
"query.port": {"env": "QUERY_PORT"},
"enable-rcon": {"env": "ENABLE_RCON"},
"rcon.password": {"env": "RCON_PASSWORD"},
"rcon.port": {"env": "RCON_PORT"},
"max-players": {"env": "MAX_PLAYERS"},
"max-world-size": {"env": "MAX_WORLD_SIZE"},
"level-name": {"env": "LEVEL"},
"level-seed": {"env": "SEED"},
"pvp": {"env": "PVP"},
"generator-settings": {"env": "GENERATOR_SETTINGS"},
"online-mode": {"env": "ONLINE_MODE"},
"allow-flight": {"env": "ALLOW_FLIGHT"},
"resource-pack": {"env": "RESOURCE_PACK"},
"resource-pack-sha1": {"env": "RESOURCE_PACK_SHA1"},
"require-resource-pack": {"env": "RESOURCE_PACK_ENFORCE"},
"player-idle-timeout": {"env": "PLAYER_IDLE_TIMEOUT"},
"broadcast-console-to-ops": {"env": "BROADCAST_CONSOLE_TO_OPS"},
"broadcast-rcon-to-ops": {"env": "BROADCAST_RCON_TO_OPS"},
"enable-jmx-monitoring": {"env": "ENABLE_JMX"},
"sync-chunk-writes": {"env": "SYNC_CHUNK_WRITES"},
"enable-status": {"env": "ENABLE_STATUS"},
"entity-broadcast-range-percentage": {"env": "ENTITY_BROADCAST_RANGE_PERCENTAGE"},
"function-permission-level": {"env": "FUNCTION_PERMISSION_LEVEL"},
"network-compression-threshold": {"env": "NETWORK_COMPRESSION_THRESHOLD"},
"op-permission-level": {"env": "OP_PERMISSION_LEVEL"},
"prevent-proxy-connections": {"env": "PREVENT_PROXY_CONNECTIONS"},
"use-native-transport": {"env": "USE_NATIVE_TRANSPORT"},
"simulation-distance": {"env": "SIMULATION_DISTANCE"},
"previews-chat": {"env": "PREVIEWS_CHAT"},
"enforce-secure-profile": {"env": "ENFORCE_SECURE_PROFILE"},
"initial-enabled-packs": {"env": "INITIAL_ENABLED_PACKS"},
"initial-disabled-packs": {"env": "INITIAL_DISABLED_PACKS"}
}

View File

@@ -1,13 +1,12 @@
---
site_name: Minecraft Server on Docker (Java Edition)
site_url: https://docker-minecraft-server.readthedocs.io/
site_url: https://docker-minecraft-server.readthedocs.io/en/latest/
site_description: Documentation for Minecraft Server on Docker
repo_url: https://github.com/itzg/docker-minecraft-server
edit_uri: blob/master/docs/
theme:
name: material
features:
- navigation.instant
- navigation.tracking
- navigation.tabs
- navigation.tabs.sticky
@@ -34,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
@@ -50,13 +50,10 @@ markdown_extensions:
user: camalot
repo: mkdocs-test
- mkdocs-click
copyright: Copyright &copy; itzg 2023.
copyright: Copyright &copy; itzg 2024.
plugins:
- search
- autorefs
- literate-nav:
nav_file: README.md
implicit_index: true
- mkdocstrings:
handlers:
python:
@@ -68,8 +65,11 @@ plugins:
show_signature_annotations: true
# https://github.com/ultrabug/mkdocs-static-i18n
- i18n:
default_language: en
languages:
en:
- locale: en
name: English
build: true
default: true
- literate-nav:
nav_file: README.md
implicit_index: true

93
notes/rbac-processing.mmd Normal file
View File

@@ -0,0 +1,93 @@
[Scia Reto](https://sciareto.org) mind map
> __version__=`1.1`,showJumps=`true`
---
# RBAC processing
## inputs
### whitelist
#### command or space limited
##### uuid
##### username
### ops
#### username
#### uuid
### whitelist file
#### url?
##### yes
###### download
##### no
###### copy
### override whitelist?
#### yes
##### replace all with given input list
#### no
##### append only
## format
### version \< 1\.7\.6?
#### yes
##### text file listing usernames
###### white\-list\.txt
###### ops\.txt
#### no
> leftSide=`true`
##### json file
###### array of objects
####### name
######## can be any string, even an empty one
####### uuid
> leftSide=`true`
######## username to UUID API
- LINK
<pre>https://wiki.vg/Mojang_API#Username_to_UUID</pre>
######## needs to be "dashed" UUID syntax
> leftSide=`true`
####### ops?
######## yes
######### also includes
########## level
########### integer, usually a 4
########## bypassesPlayerLimit
########### boolean

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -7,21 +7,15 @@
: "${UID:=1000}"
: "${GID:=1000}"
umask 0002
chmod g+w /data
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"
@@ -185,6 +204,10 @@ case "${TYPE^^}" in
exec "${SCRIPTS:-/}start-deployForge" "$@"
;;
NEOFORGE|NEOFORGED)
exec "${SCRIPTS:-/}start-deployNeoForge" "$@"
;;
FABRIC)
exec "${SCRIPTS:-/}start-deployFabric" "$@"
;;
@@ -211,6 +234,16 @@ case "${TYPE^^}" in
exec "${SCRIPTS:-/}start-deployMagma" "$@"
;;
MAGMA_MAINTAINED)
evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployMagmaMaintained" "$@"
;;
KETTING)
evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployKetting" "$@"
;;
MOHIST)
evaluateJavaCompatibilityForForge
exec "${SCRIPTS:-/}start-deployMohist" "$@"

View File

@@ -10,11 +10,13 @@ set -eu
: "${CF_FILENAME_MATCHER:=}"
: "${CF_PARALLEL_DOWNLOADS:=4}"
: "${CF_FORCE_SYNCHRONIZE:=false}"
: "${CF_FORCE_REINSTALL_MODLOADER:=false}"
: "${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:=}"
: "${CF_SET_LEVEL_FROM:=}" # --set-level-from
: "${CF_OVERRIDES_SKIP_EXISTING:=false}" # --overrides-skip-existing
: "${CF_OVERRIDES_EXCLUSIONS:=}" # --overrides-exclusions
: "${CF_DOWNLOADS_REPO=$([ -d /downloads ] && echo '/downloads' || echo '')}"
: "${CF_MODPACK_MANIFEST:=}"
@@ -43,8 +45,12 @@ fi
if [[ ${CF_SET_LEVEL_FROM} ]]; then
args+=(--set-level-from="$CF_SET_LEVEL_FROM")
fi
if [[ ${CF_OVERRIDES_EXCLUSIONS} ]]; then
args+=(--overrides-exclusions="$CF_OVERRIDES_EXCLUSIONS")
fi
args+=(
--force-synchronize="$CF_FORCE_SYNCHRONIZE"
--force-reinstall-modloader="$CF_FORCE_REINSTALL_MODLOADER"
--overrides-skip-existing="$CF_OVERRIDES_SKIP_EXISTING"
)

View File

@@ -21,7 +21,7 @@ function buildSpigotFromSource {
logn ''
curl -sSL -o /data/temp/BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar && \
java $jvmOpts -jar /data/temp/BuildTools.jar --rev $VANILLA_VERSION 2>&1 |tee /data/spigot_build.log| while read l; do echo -n .; done; log "done"
java $jvmOpts -jar /data/temp/BuildTools.jar --rev "$VERSION" 2>&1 |tee /data/spigot_build.log| while read l; do echo -n .; done; log "done"
case ${TYPE^^} in
SPIGOT)

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} ..."

31
scripts/start-deployKetting Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/bash
# shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"
isDebugging && set -x
: "${FORGE_VERSION:=${FORGEVERSION:-RECOMMENDED}}"
: "${KETTING_VERSION:=}"
: "${KETTING_TAG:=${KETTING_VERSION:0:7}}"
resolveVersion
if ! downloadUrl="https://github.com/kettingpowered/Ketting-1-20-x/releases/download/${KETTING_TAG}/ketting-${VERSION}-${FORGE_VERSION}-${KETTING_VERSION}-server.jar"; then
log "ERROR failed to locate latest Ketting download for ${VERSION}. Is that version supported?"
exit 1
fi
if [[ $downloadUrl == null ]]; then
log "ERROR Ketting does not seem to be available for $VERSION"
exit 1
fi
if ! SERVER=$(get --output-filename --skip-up-to-date --output /data "$downloadUrl"); then
log "ERROR: failed to download Ketting server jar from $downloadUrl"
exit 1
fi
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

@@ -9,6 +9,8 @@ resultsFile=/data/.install-modrinth.env
: "${MODRINTH_MODPACK:=${MODRINTH_PROJECT:-}}"
: "${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"
@@ -23,6 +25,10 @@ args=(
--output-directory=/data
)
if [[ $MODRINTH_IGNORE_MISSING_FILES ]]; then
args+=(--ignore-missing-files "$MODRINTH_IGNORE_MISSING_FILES")
fi
case "${VERSION^^}" in
LATEST)
: "${MODRINTH_DEFAULT_VERSION_TYPE:=release}"
@@ -47,6 +53,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

@@ -0,0 +1,30 @@
#!/bin/bash
: "${NEOFORGE_VERSION:=latest}"
: "${NEOFORGE_FORCE_REINSTALL:=false}}"
# shellcheck source=start-utils
. "${SCRIPTS:-$(dirname "$0")}/start-utils"
isDebugging && set -x
resultsFile=/data/.run-neoforge.env
if ! mc-image-helper install-neoforge \
--output-directory=/data \
--results-file=${resultsFile} \
--minecraft-version="${VERSION}" \
--neoforge-version="${NEOFORGE_VERSION}" \
--force-reinstall="${NEOFORGE_FORCE_REINSTALL}"; then
log "ERROR failed to install Forge"
exit 1
fi
# grab SERVER and export it
set -a
# shellcheck disable=SC1090
source ${resultsFile}
set +a
export FAMILY=FORGE
exec "${SCRIPTS:-/}start-setupWorld" "$@"

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
@@ -221,7 +215,11 @@ function copyFilesForCurseForge() {
cp -f /data/eula.txt "${FTB_DIR}/"
}
if versionLessThan 1.7; then
if versionLessThan 'b1.8'; then
echo "
DISABLE_HEALTHCHECK=true
" > /data/.mc-health.env
elif versionLessThan 1.7; then
echo "
MC_HEALTH_EXTRA_ARGS=(
--use-server-list-ping
@@ -233,11 +231,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

@@ -229,16 +229,17 @@ function handleGenericPacks() {
function handleModrinthProjects() {
: "${MODRINTH_PROJECTS:=}"
: "${MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES:=true}"
: "${MODRINTH_ALLOWED_VERSION_TYPE:=release}"
: "${MODRINTH_DOWNLOAD_DEPENDENCIES:=none}"
if [[ -v MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES ]]; then
log "WARNING The variable MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES is removed."
log " Use MODRINTH_DOWNLOAD_DEPENDENCIES=optional instead"
fi
if [[ $MODRINTH_PROJECTS ]] && isFamily HYBRID FORGE FABRIC SPIGOT; then
if isFamily HYBRID FORGE; then
loader=forge
elif isFamily FABRIC; then
loader=fabric
else
# we're left with Bukkit/Spigot down-lines where plugins seem to be
loader="${TYPE,,}"
fi
mc-image-helper modrinth \
@@ -246,7 +247,7 @@ function handleModrinthProjects() {
--projects="${MODRINTH_PROJECTS}" \
--game-version="${VERSION}" \
--loader="$loader" \
--download-optional-dependencies="$MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES" \
--download-dependencies="$MODRINTH_DOWNLOAD_DEPENDENCIES" \
--allowed-version-type="$MODRINTH_ALLOWED_VERSION_TYPE"
fi
}
@@ -298,4 +299,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

@@ -1,98 +1,84 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
: "${EXISTING_OPS_FILE:=SKIP}"
: "${EXISTING_WHITELIST_FILE:=SKIP}"
# shellcheck source=start-utils
. "${SCRIPTS:-/}start-utils"
isDebugging && set -x
if versionLessThan 1.7.6; then
opsFile=ops.txt
whitelistFile=white-list.txt
else
opsFile=ops.json
whitelistFile=whitelist.json
if [[ -v APPEND_OPS ]] && isTrue "${APPEND_OPS}"; then
EXISTING_OPS_FILE=MERGE
elif [[ -v OVERRIDE_OPS ]] && isTrue "${OVERRIDE_OPS}"; then
EXISTING_OPS_FILE=SYNCHRONIZE
fi
function process_user_file() {
local output=$1
local source=$2
if [[ -v APPEND_WHITELIST ]] && isTrue "${APPEND_WHITELIST}"; then
EXISTING_WHITELIST_FILE=MERGE
elif [[ -v OVERRIDE_WHITELIST ]] && isTrue "${OVERRIDE_WHITELIST}"; then
EXISTING_WHITELIST_FILE=SYNCHRONIZE
fi
if isURL "$source"; then
log "Downloading $output from $source"
if ! get -o "/data/$output" "$source"; then
log "ERROR: failed to download from $source"
exit 2
fi
else
log "Copying $output from $source"
if ! cp "$source" "/data/$output"; then
log "ERROR: failed to copy from $source"
exit 1
fi
sharedArgs=(--version="$VERSION")
if [[ -v OPS_FILE ]]; then
existing="$EXISTING_OPS_FILE"
if [[ "$EXISTING_OPS_FILE" = SYNC_FILE_MERGE_LIST ]]; then
existing=SYNCHRONIZE
fi
}
function process_user_csv() {
local output=$1
local list=$2
local playerDataList
if [[ "$output" == *"ops"* ]]; then
# Extra data for ops.json
userData='{"uuid": .id, "name": .username, "level": 4}'
else
userData='{"uuid": .id, "name": .username}'
mc-image-helper manage-users \
"${sharedArgs[@]}" \
--type=JAVA_OPS \
--input-is-file \
--existing="${existing}" \
"$OPS_FILE"
fi
if [[ -v OPS ]]; then
args=()
if isTrue "${APPEND_OPS:-false}" || isFalse "${OVERRIDE_OPS:-true}"; then
args+=(--append-only)
fi
log "Updating ${output%.*}"
for i in ${list//,/ }
do
if [ -e "$output" ] && grep -q "$i" "$output"; then
log "$i already present in $output, skipping"
continue
fi
if ! playerData=$(get "https://playerdb.co/api/player/minecraft/$i" | jq -re ".data.player"); then
log "WARNING: Could not lookup user $i for ${output} addition"
else
playerDataList=$playerDataList$(echo "$playerData" | jq -r "$userData")
fi
done
local newUsers=$(echo "$playerDataList" | jq -s .)
if [[ $output =~ .*\.txt ]]; then
# username list for txt config (Minecraft <= 1.7.5)
echo $newUsers | jq -r '.[].name' >> "/data/${output}"
sort -u /data/${output} -o /data/${output}
elif [ -e /data/${output} ]; then
# Merge with existing json file
local currentUsers=$(cat "/data/${output}")
jq --argjson current "$currentUsers" --argjson new "$newUsers" -n '$new + $current | unique_by(.uuid)' > "/data/${output}"
else
# New json file
echo $newUsers > "/data/${output}"
existing="$EXISTING_OPS_FILE"
if [[ "$EXISTING_OPS_FILE" = SYNC_FILE_MERGE_LIST ]]; then
existing=MERGE
fi
}
if isTrue "${OVERRIDE_OPS}"; then
log "Recreating ${opsFile} file at server startup"
rm -f /data/${opsFile}
fi
if [ -n "${OPS_FILE}" ] && [ ! -e "/data/${opsFile}" ]; then
process_user_file ${opsFile} "$OPS_FILE"
fi
if [ -n "${OPS}" ]; then
process_user_csv ${opsFile} "$OPS"
# shellcheck disable=SC2086
mc-image-helper manage-users \
"${sharedArgs[@]}" "${args[@]}" \
--type=JAVA_OPS \
--existing="${existing}" \
$OPS
fi
if isTrue "${OVERRIDE_WHITELIST}"; then
log "Recreating ${whitelistFile} file at server startup"
rm -f /data/${whitelistFile}
if [[ -v WHITELIST_FILE ]]; then
existing="$EXISTING_WHITELIST_FILE"
if [[ "$EXISTING_WHITELIST_FILE" = SYNC_FILE_MERGE_LIST ]]; then
existing=SYNCHRONIZE
fi
mc-image-helper manage-users \
"${sharedArgs[@]}" \
--type=JAVA_WHITELIST \
--input-is-file \
--existing="${existing}" \
"$WHITELIST_FILE"
fi
if [ -n "${WHITELIST_FILE}" ] && [ ! -e "/data/${whitelistFile}" ]; then
process_user_file ${whitelistFile} "$WHITELIST_FILE"
if [[ -v WHITELIST ]]; then
args=()
if isTrue "${APPEND_WHITELIST:-false}" || isFalse "${OVERRIDE_WHITELIST:-true}"; then
args+=(--append-only)
fi
existing="$EXISTING_WHITELIST_FILE"
if [[ "$EXISTING_WHITELIST_FILE" = SYNC_FILE_MERGE_LIST ]]; then
existing=MERGE
fi
# shellcheck disable=SC2086
mc-image-helper manage-users \
"${sharedArgs[@]}" "${args[@]}" \
--type=JAVA_WHITELIST \
--existing="${existing}" \
$WHITELIST
fi
if [ -n "${WHITELIST}" ]; then
process_user_csv ${whitelistFile} "$WHITELIST"
fi
exec "${SCRIPTS:-/}start-finalExec" "$@"

View File

@@ -8,152 +8,29 @@
: "${SKIP_SERVER_PROPERTIES:=false}"
: "${ENABLE_WHITELIST:=}"
# FUNCTIONS
function setServerPropValue {
local prop=$1
local value=$2
# normalize booleans
case ${value^^} in
TRUE|FALSE)
value=${value,,} ;;
esac
if [[ $prop =~ password ]]; then
showValue="*****"
else
showValue="$value"
fi
if [ -f "$SERVER_PROPERTIES" ] && grep "${prop}" "$SERVER_PROPERTIES" > /dev/null; then
debug "Setting ${prop} to '${showValue}' in ${SERVER_PROPERTIES}"
sed -i "/^${prop}\s*=/ c ${prop}=${value//\\/\\\\}" "$SERVER_PROPERTIES"
else
debug "Adding ${prop} with '${showValue}' in ${SERVER_PROPERTIES}"
echo "${prop}=${value}" >> "$SERVER_PROPERTIES"
fi
}
function setServerProp {
local prop=$1
local varName=$2
if [ -v $varName ]; then
setServerPropValue "$prop" "${!varName}"
fi
}
function customizeServerProps {
local firstSetup=$1
# Whitelist processing
if [ -n "$WHITELIST" ] || [ -n "$WHITELIST_FILE" ] || isTrue "${ENABLE_WHITELIST}"; then
log "Enabling whitelist functionality"
setServerPropValue "white-list" "true"
setServerPropValue "enforce-whitelist" "true"
WHITELIST_PROP=true
ENFORCE_WHITELIST=true
export WHITELIST_PROP ENFORCE_WHITELIST
elif isTrue "$firstSetup" || isFalse "${ENABLE_WHITELIST}"; then
log "Disabling whitelist functionality"
setServerPropValue "white-list" "false"
setServerProp "enforce-whitelist" ENFORCE_WHITELIST
WHITELIST_PROP=false
export WHITELIST_PROP
fi
# normalize MOTD
if [[ ${TYPE^^} = LIMBO ]]; then
if [[ $MOTD ]] && ! [[ $MOTD =~ ^{ ]]; then
# shellcheck disable=SC2089
MOTD="{\"text\":\"${MOTD}\"}"
fi
fi
setServerProp "server-name" SERVER_NAME
setServerProp "server-ip" SERVER_IP
setServerProp "server-port" SERVER_PORT
setServerProp "allow-nether" ALLOW_NETHER
setServerProp "announce-player-achievements" ANNOUNCE_PLAYER_ACHIEVEMENTS
setServerProp "enable-command-block" ENABLE_COMMAND_BLOCK
setServerProp "spawn-animals" SPAWN_ANIMALS
setServerProp "spawn-monsters" SPAWN_MONSTERS
setServerProp "spawn-npcs" SPAWN_NPCS
setServerProp "spawn-protection" SPAWN_PROTECTION
setServerProp "generate-structures" GENERATE_STRUCTURES
setServerProp "view-distance" VIEW_DISTANCE
setServerProp "hardcore" HARDCORE
setServerProp "snooper-enabled" SNOOPER_ENABLED
setServerProp "max-build-height" MAX_BUILD_HEIGHT
setServerProp "force-gamemode" FORCE_GAMEMODE
setServerProp "max-tick-time" MAX_TICK_TIME
setServerProp "enable-query" ENABLE_QUERY
setServerProp "query.port" QUERY_PORT
setServerProp "enable-rcon" ENABLE_RCON
setServerProp "rcon.password" RCON_PASSWORD
setServerProp "rcon.port" RCON_PORT
setServerProp "max-players" MAX_PLAYERS
setServerProp "max-world-size" MAX_WORLD_SIZE
setServerProp "level-name" LEVEL
setServerProp "level-seed" SEED
setServerProp "pvp" PVP
setServerProp "generator-settings" GENERATOR_SETTINGS
setServerProp "online-mode" ONLINE_MODE
setServerProp "allow-flight" ALLOW_FLIGHT
setServerProp "resource-pack" RESOURCE_PACK
setServerProp "resource-pack-sha1" RESOURCE_PACK_SHA1
setServerProp "require-resource-pack" RESOURCE_PACK_ENFORCE
setServerProp "player-idle-timeout" PLAYER_IDLE_TIMEOUT
setServerProp "broadcast-console-to-ops" BROADCAST_CONSOLE_TO_OPS
setServerProp "broadcast-rcon-to-ops" BROADCAST_RCON_TO_OPS
setServerProp "enable-jmx-monitoring" ENABLE_JMX
setServerProp "sync-chunk-writes" SYNC_CHUNK_WRITES
setServerProp "enable-status" ENABLE_STATUS
setServerProp "entity-broadcast-range-percentage" ENTITY_BROADCAST_RANGE_PERCENTAGE
setServerProp "function-permission-level" FUNCTION_PERMISSION_LEVEL
setServerProp "network-compression-threshold" NETWORK_COMPRESSION_THRESHOLD
setServerProp "op-permission-level" OP_PERMISSION_LEVEL
setServerProp "prevent-proxy-connections" PREVENT_PROXY_CONNECTIONS
setServerProp "use-native-transport" USE_NATIVE_TRANSPORT
setServerProp "simulation-distance" SIMULATION_DISTANCE
setServerProp "previews-chat" PREVIEWS_CHAT
setServerProp "enforce-secure-profile" ENFORCE_SECURE_PROFILE
setServerProp "initial-enabled-packs" INITIAL_ENABLED_PACKS
setServerProp "initial-disabled-packs" INITIAL_DISABLED_PACKS
if [[ $MOTD ]]; then
setServerPropValue "motd" "$(echo "$MOTD" | mc-image-helper asciify)"
fi
[[ $LEVEL_TYPE ]] && setServerPropValue "level-type" "${LEVEL_TYPE^^}"
if [ -n "$DIFFICULTY" ]; then
case ${DIFFICULTY,,} in
peaceful|0)
if versionLessThan 1.13; then
DIFFICULTY=0
else
DIFFICULTY=peaceful
fi
;;
easy|1)
if versionLessThan 1.13; then
DIFFICULTY=1
else
DIFFICULTY=easy
fi
;;
normal|2)
if versionLessThan 1.13; then
DIFFICULTY=2
else
DIFFICULTY=normal
fi
;;
hard|3)
if versionLessThan 1.13; then
DIFFICULTY=3
else
DIFFICULTY=hard
fi
;;
*)
log "DIFFICULTY must be peaceful, easy, normal, or hard."
exit 1
;;
esac
setServerPropValue "difficulty" "$DIFFICULTY"
fi
if [ -n "$MODE" ]; then
if [[ -v MODE ]]; then
log "Setting mode"
case ${MODE,,} in
su*|0)
@@ -189,8 +66,69 @@ function customizeServerProps {
exit 1
;;
esac
setServerPropValue "gamemode" "$MODE"
fi
if [[ -v DIFFICULTY ]]; then
case ${DIFFICULTY,,} in
peaceful|0)
if versionLessThan 1.13; then
DIFFICULTY=0
else
DIFFICULTY=peaceful
fi
;;
easy|1)
if versionLessThan 1.13; then
DIFFICULTY=1
else
DIFFICULTY=easy
fi
;;
normal|2)
if versionLessThan 1.13; then
DIFFICULTY=2
else
DIFFICULTY=normal
fi
;;
hard|3)
if versionLessThan 1.13; then
DIFFICULTY=3
else
DIFFICULTY=hard
fi
;;
*)
log "DIFFICULTY must be peaceful, easy, normal, or hard."
exit 1
;;
esac
fi
if [[ -v LEVEL_TYPE ]]; then
LEVEL_TYPE="${LEVEL_TYPE^^}"
fi
setPropertiesArgs=(
--definitions "/image/property-definitions.json"
)
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
fi
}
# Deploy server.properties file
@@ -207,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

@@ -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"

0
tests/setuponlytests/cf_files/require.sh Normal file → Executable file
View File

View File

View File

0
tests/setuponlytests/curseforge/require.sh Normal file → Executable file
View File

0
tests/setuponlytests/icon-file-exact/require.sh Normal file → Executable file
View File

0
tests/setuponlytests/icon-gif-multiframe/require.sh Normal file → Executable file
View File

0
tests/setuponlytests/icon-png-atscale/require.sh Normal file → Executable file
View File

0
tests/setuponlytests/pufferfish/require.sh Normal file → Executable file
View File

0
tests/setuponlytests/quilt/require.sh Normal file → Executable file
View File

View File

@@ -0,0 +1 @@
[[ $EXTENDED_TESTS ]] || exit 1

View File

View File

0
tests/setuponlytests/test.sh Normal file → Executable file
View File

View File

View File

0
tests/setuponlytests/world_from_tar/require.sh Normal file → Executable file
View File

0
tests/setuponlytests/world_from_tarbz2/require.sh Normal file → Executable file
View File

0
tests/setuponlytests/world_from_tarzst/require.sh Normal file → Executable file
View File