Compare commits

...

203 Commits

Author SHA1 Message Date
Geoff Bourne
ceec69391c Auto-merging via docker-versions-create 2021-07-17 18:06:45 -05:00
Geoff Bourne
5018298c81 Fixed log for existing spiget resource
#981
2021-07-17 17:57:15 -05:00
Geoff Bourne
37b81aa0be Fixed issue with unset FORCE_REDOWNLOAD with TYPE=AIRPLANE
#979
2021-07-16 07:26:49 -05:00
Jawa_Juice
6a3a0465a4 Move to Pl3x DL API V2 (#977) 2021-07-15 16:51:18 -05:00
itzg
34d67d6018 docs: Auto update markdown TOC 2021-07-15 13:34:00 +00:00
Geoff Bourne
9c4403d7ff docs: corrected compose snippets within README 2021-07-15 08:33:43 -05:00
Geoff Bourne
dfa5add6ba Auto-merging via docker-versions-create 2021-07-14 18:43:35 -05:00
Daniel Ramp
3c0566cb87 fix: SPIGET_RESOURCES not always download (#975)
implemented to only re-download SPIGET resources with REMOVE_OLD_MODS enabled

fixes #974 partially
2021-07-14 18:42:34 -05:00
Geoff Bourne
02677ce1e2 Auto-merging via docker-versions-create 2021-07-12 19:11:49 -05:00
itzg
4357066cdf docs: Auto update markdown TOC 2021-07-13 00:03:34 +00:00
Jawa_Juice
67ca9a7fc4 Update Airplane branches for 1.17 release (#968)
* Update branches for official 1.17/1.17.1 releases

* Reflect Airplane 1.17 release
2021-07-12 19:03:17 -05:00
itzg
9c9c295a79 docs: Auto update markdown TOC 2021-07-12 14:24:37 +00:00
silence_eternal
daa3292000 docs: Update README with watchdog disable for autopause (#967) 2021-07-12 09:24:20 -05:00
itzg
2da5e2b2ec docs: Auto update markdown TOC 2021-07-11 18:28:34 +00:00
Geoff Bourne
c5119ad27b docs: Clarified docker attach usage with interactive, color console 2021-07-11 13:28:17 -05:00
Geoff Bourne
4808507da8 Simplified and improved multi-version handling for Fabric
#964
2021-07-10 14:56:10 -05:00
Geoff Bourne
2902e13c61 Auto-merging via docker-versions-create 2021-07-09 20:00:33 -05:00
Geoff Bourne
11a286fe26 Bukkit/Spigot download URL switched by VERSION
#962
2021-07-09 19:55:46 -05:00
Geoff Bourne
6d01021a30 Auto-merging via docker-versions-create 2021-07-08 18:01:57 -05:00
Bram Ceulemans
ca80b4730f Update start-deployAirplane (#960) 2021-07-08 17:56:06 -05:00
Geoff Bourne
07ded28d20 Auto-merging via docker-versions-create 2021-07-08 08:06:08 -05:00
Geoff Bourne
80a8ce8a46 ci: removed merge-variants workflow since GHA won't trigger branch builds 2021-07-08 08:01:43 -05:00
itzg
a2d79fb85b Auto-merging via docker-versions-create 2021-07-08 12:56:12 +00:00
Geoff Bourne
d804323cab Updated getbukkit download URL
#958
2021-07-08 07:55:31 -05:00
Geoff Bourne
ecf9a090b1 Auto-merging via docker-versions-create 2021-07-08 07:41:13 -05:00
Pascal Sthamer
cbaef446ac fix: don't echo double-double-quotes to server.properties (#954)
Using `sed`, we need to escape double quotes, but with `echo` we can just use the variable as-is.
Closes #949
2021-07-07 09:56:16 -05:00
NyCode
8aa1312ae2 Fix typo: tunity -> tuinity (#951) 2021-07-06 07:22:01 -05:00
dependabot[bot]
7ec09fcfe9 build(deps): bump docker/build-push-action from 2.5.0 to 2.6.1 (#950) 2021-07-05 07:09:06 -05:00
itzg
17a3aa8079 Auto-merging via docker-versions-create 2021-07-04 19:54:11 +00:00
itzg
c090095e08 docs: Auto update markdown TOC 2021-07-04 19:53:56 +00:00
Geoff Bourne
f24bc00eb9 docs: link to data directory section from level / world save name section 2021-07-04 14:53:36 -05:00
Geoff Bourne
14fb905ec1 Auto-merging from master 2021-07-03 14:29:24 -05:00
Geoff Bourne
f91ee5d245 ci: fixed publishing of latest image for master branch only
#946
2021-07-03 14:16:10 -05:00
Geoff Bourne
8629bf5cb5 ci: auto-merge from master 2021-07-02 16:06:34 -05:00
Geoff Bourne
dd6700e659 ci: removed branch name qualifier in gha caching 2021-07-02 15:46:40 -05:00
itzg
f05891e475 Auto-merging via docker-versions-create 2021-07-02 16:56:06 +00:00
Austin Keller
ca8a27babe Fix unquoted COPY_MODS_DEST and COPY_CONFIG_DEST variables (#942) 2021-07-02 11:55:34 -05:00
itzg
f1453dd4c1 Auto-merging via docker-versions-create 2021-06-28 12:14:17 +00:00
itzg
19cc894662 docs: Auto update markdown TOC 2021-06-28 12:13:58 +00:00
Audition-CSBlock
15320f0eb2 improve readme (#939) 2021-06-28 07:13:40 -05:00
itzg
22b560ba5d Auto-merging via docker-versions-create 2021-06-27 13:13:22 +00:00
itzg
af758af51a docs: Auto update markdown TOC 2021-06-27 13:13:05 +00:00
Pascal Sthamer
9d231801da Allow to enable the whitelist without modifying the whitelist file (#937) 2021-06-27 08:12:51 -05:00
itzg
e3acafee2f Auto-merging via docker-versions-create 2021-06-24 12:47:16 +00:00
itzg
33c2154a98 docs: Auto update markdown TOC 2021-06-24 12:47:02 +00:00
Jawa_Juice
f890b316da Correct AirplanePurpur branch name (#936) 2021-06-24 07:46:40 -05:00
Geoff Bourne
03df627881 Auto-merging via docker-versions-create 2021-06-23 22:36:07 -05:00
itzg
2e4cf0b731 docs: Auto update markdown TOC 2021-06-24 03:30:11 +00:00
Jawa_Juice
f5a319b0b3 Move to new Airplane download system (#933)
Co-authored-by: Jawa-Juice <Jawa-Juice@users.noreply.github.com>
2021-06-23 22:29:58 -05:00
Geoff Bourne
2533d2c694 ci: merge-variants: revert previous change 2021-06-23 22:29:24 -05:00
Geoff Bourne
b1fed81821 ci: merge-variants: skip any workflow changes 2021-06-23 22:24:12 -05:00
Geoff Bourne
0064c0357f ci: merge-variants: fetch all history and batch mode 2021-06-23 22:11:41 -05:00
Geoff Bourne
20cd8cce1d ci: fixed typo in calling docker-versions-create.sh 2021-06-23 22:07:32 -05:00
Geoff Bourne
bc8af2784f ci: added merge-variants workflow 2021-06-23 21:57:32 -05:00
Geoff Bourne
e300810a16 ci: fixed repo name in workflows conditional 2021-06-23 21:20:37 -05:00
Geoff Bourne
33b48a8a4b ci: used ${{ }} syntax in job conditional 2021-06-23 21:09:20 -05:00
Geoff Bourne
6f2f1174e6 ci: limited build-multiarch workflow to itzg's 2021-06-23 21:07:22 -05:00
Geoff Bourne
adbe75ae7e ci: limits generate-toc workflow to itzg's 2021-06-23 21:06:29 -05:00
itzg
dae2add713 docs: Auto update markdown TOC 2021-06-22 23:39:21 +00:00
Christoph Mittermaier
38946fd294 fixed typo in readme (#932) 2021-06-22 18:39:05 -05:00
Geoff Bourne
d87e5bdaa2 Auto-merging via docker-versions-create 2021-06-20 12:51:26 -05:00
Duncan X Simpson
047ef107ae Modify start-deployFTBA to allow Fabric FTB packs (#926)
Fixes #912

Co-authored-by: Duncan X Simpson <duncan@k7dxs.net>
2021-06-20 12:27:18 -05:00
basisbit
1bb2f92f5b Workaround: Change default RELEASE of Yatopia (#922) 2021-06-16 07:34:38 -05:00
itzg
727a1f29d1 docs: Auto update markdown TOC 2021-06-09 12:35:19 +00:00
Jawa_Juice
012bd3a307 Support Java versions above 11 for Airplane (#917) 2021-06-09 07:35:00 -05:00
itzg
ae5b19b0aa docs: Auto update markdown TOC 2021-06-07 01:38:43 +00:00
Jawa_Juice
81d9c55eee Reflect Pupur's removal of Airplane patches (#910) 2021-06-06 20:38:29 -05:00
Geoff Bourne
2543a5417c Auto-merging via docker-versions-create 2021-06-05 17:55:19 -05:00
Erik Selberg
90cfe0e151 fix bad find statement in CurseForge handling (#901)
Co-authored-by: Erik Selberg <erik.selberg@grabtaxi.com>
Co-authored-by: Geoff Bourne <itzgeoff@gmail.com>
2021-06-05 17:46:59 -05:00
dependabot[bot]
491800280c build(deps): bump docker/build-push-action from 2.4.0 to 2.5.0 (#904) 2021-06-01 12:33:42 -05:00
dependabot[bot]
d60c2e0815 build(deps): bump actions/cache from 2.1.5 to 2.1.6 (#903) 2021-05-31 08:03:12 -05:00
dependabot[bot]
fb0babe261 build(deps): bump docker/setup-qemu-action from 1.1.0 to 1.2.0 (#902) 2021-05-31 08:02:39 -05:00
Niek Candaele
e6bc8abdc1 fix: update Sky Factory version link (#898) 2021-05-27 07:41:05 -05:00
Geoff Bourne
614f6a4be0 Auto-merging via docker-versions-create 2021-05-24 20:53:08 -05:00
tonymmm1
fbee644b4e Fix Forge download (#890) 2021-05-24 20:47:51 -05:00
Geoff Bourne
aaf327b308 Added SETUP_ONLY option
#878
2021-05-23 12:39:21 -05:00
itzg
d404e0f50e docs: Auto update markdown TOC 2021-05-23 17:29:03 +00:00
Geoff Bourne
c5bb83c6d0 ci: deprecated java15 since java16 is now primary 2021-05-23 12:28:42 -05:00
Geoff Bourne
fe9735d8c1 Merge branch 'master' into java16-openj9 2021-05-23 12:27:35 -05:00
Geoff Bourne
8bf3b64831 ci: changed build flavor latest=true 2021-05-23 12:24:13 -05:00
Geoff Bourne
10dcbe7b03 Merge from master 2021-05-22 13:47:41 -05:00
Geoff Bourne
9ff04f8637 ci: auto 'latest' tag on master 2021-05-22 10:48:44 -05:00
itzg
dd7953ab4c docs: Auto update markdown TOC 2021-05-22 13:59:05 +00:00
Geoff Bourne
23fde3387a docs: group related mods and worlds sections 2021-05-22 08:58:42 -05:00
Geoff Bourne
85103cd8cf Auto-merging via docker-versions-create 2021-05-21 23:04:11 -05:00
Geoff Bourne
ecbdb2b18d ci: use flavor config in docker meta 2021-05-21 23:00:27 -05:00
Geoff Bourne
12915b04b7 Auto-merging via docker-versions-create 2021-05-21 22:53:22 -05:00
itzg
373921777a docs: Auto update markdown TOC 2021-05-22 03:44:27 +00:00
Geoff Bourne
2f489b04ae docs: replaced openj9-11 with java11-openj9 2021-05-21 22:40:29 -05:00
Geoff Bourne
a2c393ccc5 docs: added java8-openj9 in place of openj9 image tag 2021-05-21 22:34:45 -05:00
itzg
73a11c91d2 docs: Auto update markdown TOC 2021-05-22 03:28:50 +00:00
Geoff Bourne
8673f919fd docs: adjusted image version mentioned for RaspberryPi 2021-05-21 22:28:32 -05:00
Geoff Bourne
1e32161652 ci: fixed pr test builds for buildkit 2021-05-21 22:24:31 -05:00
itzg
38eb769c1b docs: Auto update markdown TOC 2021-05-22 03:12:47 +00:00
Geoff Bourne
5e372ed9f4 docs: added java11 tag to README 2021-05-21 22:12:29 -05:00
Geoff Bourne
e027a81317 ci: add java11 to build/merge 2021-05-21 22:05:59 -05:00
itzg
0a51713bd7 docs: Auto update markdown TOC 2021-05-22 03:05:38 +00:00
FW
d5cde03db1 Update Mohist URLs (#887) 2021-05-21 22:05:22 -05:00
Geoff Bourne
449f2bfa09 ci: adjusted multiarch build for java8-multiarch 2021-05-21 17:28:25 -05:00
Geoff Bourne
c9815e2ccb ci: use CACHE_NAME in main.yml 2021-05-21 17:20:35 -05:00
itzg
9bd6bc64b0 docs: Auto update markdown TOC 2021-05-21 22:01:17 +00:00
Geoff Bourne
a5fe016854 docs: added edge tag to image versions section 2021-05-21 17:00:58 -05:00
itzg
93cd299c77 docs: Auto update markdown TOC 2021-05-21 21:59:13 +00:00
Geoff Bourne
e8f8d8b4d4 ci: introduced CACHE_NAME 2021-05-21 16:58:52 -05:00
Geoff Bourne
b806ea6871 docs: adoptopenjdk:16-openj9 is only available on amd64
#885
2021-05-21 16:53:22 -05:00
Geoff Bourne
fbc8f72a22 ci: adjusted for adoptopenjdk for openj9 only on amd64 2021-05-21 16:49:29 -05:00
Geoff Bourne
7229c40202 Merge branch 'master' into java16-openj9
# Conflicts:
#	.github/workflows/build-multiarch.yml
#	Dockerfile
2021-05-21 16:46:51 -05:00
Geoff Bourne
cb17180dea ci: updated build action for java16-openj9
#885
2021-05-21 16:45:33 -05:00
Geoff Bourne
581b514970 ci: added java16-openj9 branch
#885
2021-05-21 16:42:23 -05:00
Geoff Bourne
78ec4ba2a7 ci: multiarch build reference master branch 2021-05-21 07:59:04 -05:00
Geoff Bourne
317104de30 ci: fixed multiarch 'master' branch trigger 2021-05-21 07:46:58 -05:00
itzg
63412975c3 docs: Auto update markdown TOC 2021-05-21 12:45:51 +00:00
Geoff Bourne
9c87f8749d docs: updated README for latest=16 2021-05-21 07:40:46 -05:00
Geoff Bourne
5fc36516f4 ci: switch 'latest/master' build to multiarch 2021-05-21 07:39:59 -05:00
Geoff Bourne
c608c8a57e Merge branch 'master' into java16 2021-05-21 07:31:12 -05:00
Geoff Bourne
853a9884d7 ci: force apk update 2021-05-21 06:57:19 -05:00
Geoff Bourne
ecafaf4ea1 ci: force rebuild of latest 2021-05-21 06:51:17 -05:00
Geoff Bourne
eb490e92c3 ci: force rebuild of latest 2021-05-21 06:50:04 -05:00
Geoff Bourne
98c7e43927 ci: prefixed TOC commit message 2021-05-19 20:47:48 -05:00
Geoff Bourne
d8786d4785 Auto-merging via docker-versions-create 2021-05-19 20:31:17 -05:00
Geoff Bourne
d030daf354 Auto-merging via docker-versions-create 2021-05-19 20:30:40 -05:00
Geoff Bourne
02181021ce ci: avoid mix of tags and tags-ignore 2021-05-19 20:26:28 -05:00
Geoff Bourne
fa60f8c16e ci: exclude java8 from multiarch builds 2021-05-19 20:23:12 -05:00
itzg
3084a2f409 Auto update markdown TOC 2021-05-20 01:17:12 +00:00
Stealthii
f473cfc6f2 Add support for Canyon server for b1.7.3 (#879) 2021-05-19 20:16:57 -05:00
Geoff Bourne
8a34aa5c45 Auto-merging via docker-versions-create 2021-05-15 12:43:57 -05:00
Geoff Bourne
98e6adbe1a Auto-merging via docker-versions-create 2021-05-15 12:43:32 -05:00
Geoff Bourne
cc204c297f Fixed REMOVE_OLD_MODS with SPIGET_RESOURCES
#834
2021-05-15 12:39:48 -05:00
Geoff Bourne
bb210ff59e Merge branch 'multiarch' into java16
# Conflicts:
#	.github/workflows/build-multiarch.yml
#	Dockerfile
2021-05-14 18:04:56 -05:00
Geoff Bourne
b94cfc44a0 Merge branch 'multiarch' into java15-openj9
# Conflicts:
#	.github/workflows/build-multiarch.yml
#	Dockerfile
2021-05-14 18:03:39 -05:00
Geoff Bourne
671e84bec9 ci: use docker/metadata-action 2021-05-14 17:48:17 -05:00
Geoff Bourne
fc2ba2df32 Merge branch 'master' into multiarch 2021-05-14 17:37:30 -05:00
dependabot[bot]
e5bee8e79b build(deps): bump docker/build-push-action from 2 to 2.4.0 (#866)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 2.4.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2...v2.4.0)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-14 17:18:58 -05:00
Geoff Bourne
1b13ddcf32 Added start-server.sh as detected CurseForge entry script 2021-05-14 17:17:07 -05:00
itzg
de707049d4 Auto update markdown TOC 2021-05-14 13:06:27 +00:00
Giles Knap
e95ae2dbbb fix helm chart links (#873) 2021-05-14 08:06:08 -05:00
itzg
4606c27cdc Auto update markdown TOC 2021-05-14 03:52:02 +00:00
W4ff1e
ba88bf72ce Updated examples to version 3.8 (#872) 2021-05-13 22:51:47 -05:00
dependabot[bot]
75967cec02 build(deps): bump actions/cache from 2 to 2.1.5 (#870) 2021-05-14 01:47:19 +00:00
dependabot[bot]
0a35f661bd build(deps): bump actions/checkout from 2.2.0 to 2.3.4 (#869) 2021-05-14 01:45:43 +00:00
dependabot[bot]
f141806fb4 build(deps): bump stefanzweifel/git-auto-commit-action from 4 to 4.11.0 (#868) 2021-05-14 01:39:04 +00:00
dependabot[bot]
d80f40075c build(deps): bump docker/setup-qemu-action from 1 to 1.1.0 (#867) 2021-05-13 02:10:17 +00:00
itzg
44dbe80096 Auto update markdown TOC 2021-05-13 01:59:18 +00:00
Geoff Bourne
c7546ef08a docs: Clarified the default type and version of Minecraft server
#863
2021-05-12 20:59:02 -05:00
itzg
6fe5bb4aa8 Auto update markdown TOC 2021-05-13 01:41:49 +00:00
Geoff Bourne
589a9aa3db Added support for directories in MODS
#871
2021-05-12 20:41:28 -05:00
Geoff Bourne
2c8d1a9255 Merge branch 'master' into java16 2021-05-12 11:33:39 -05:00
Geoff Bourne
a8c11c0cdb Add java16 branch/image-tag
#864
2021-05-12 11:32:40 -05:00
itzg
34ae93f379 Auto update markdown TOC 2021-05-12 16:29:05 +00:00
Geoff Bourne
bd57d291c1 ci: Preparing for java16 image tag
#864
2021-05-12 11:28:44 -05:00
Geoff Bourne
7310daf51d Auto-merging via docker-versions-create 2021-05-06 20:17:59 -05:00
Geoff Bourne
8a9e85fb17 Auto-merging via docker-versions-create 2021-05-06 20:17:17 -05:00
Geoff Bourne
78d9d888db Auto-merging via docker-versions-create 2021-05-06 20:16:34 -05:00
itzg
bccdc7f5e8 Auto update markdown TOC 2021-05-06 21:27:45 +00:00
picapi
3854526389 Support local paths for modpacks / mods (#858) 2021-05-06 16:27:30 -05:00
Geoff Bourne
74072847ca docs: Added world-copy-compose-project diagram 2021-05-02 18:31:08 -05:00
Geoff Bourne
c5857bfc0b ci: ignore md files for regular build trigger 2021-05-01 17:39:35 -05:00
Geoff Bourne
8b380894f9 ci: gitignore the gh-md-toc script 2021-05-01 17:36:53 -05:00
itzg
b090737162 Auto update markdown TOC 2021-05-01 22:34:32 +00:00
Geoff Bourne
476abc9dad docs: Added table of contents
#845
2021-05-01 17:34:12 -05:00
Geoff Bourne
a2cbf07b6d Auto-merging via docker-versions-create 2021-04-30 14:30:52 -05:00
Geoff Bourne
8a39719427 Auto-merging via docker-versions-create 2021-04-30 14:30:25 -05:00
Geoff Bourne
2a67344b93 Auto-merging via docker-versions-create 2021-04-30 14:29:57 -05:00
Tyler Heucke
9ecb617d2e allow mods with "forge" in name for cf modpacks (#853) 2021-04-30 14:26:05 -05:00
Geoff Bourne
9381776345 Auto-merging via docker-versions-create 2021-04-30 11:14:59 -05:00
Geoff Bourne
4100aa1f61 Auto-merging via docker-versions-create 2021-04-30 11:14:31 -05:00
Geoff Bourne
5a47bb11ba Auto-merging via docker-versions-create 2021-04-30 11:13:53 -05:00
Tyler Heucke
4be4fc4808 Corrected locating of CF modpack server jar when not using server script (#852) 2021-04-30 11:05:56 -05:00
Geoff Bourne
d939be28e6 Auto-merging via docker-versions-create 2021-04-28 16:55:54 -05:00
Geoff Bourne
4d5fe0a03b Auto-merging via docker-versions-create 2021-04-28 16:55:09 -05:00
Geoff Bourne
185fccf712 Auto-merging via docker-versions-create 2021-04-26 08:23:48 -05:00
Geoff Bourne
236bb565ce Auto-merging via docker-versions-create 2021-04-26 08:23:22 -05:00
Geoff Bourne
0f0017b02d Auto-merging via docker-versions-create 2021-04-24 13:45:24 -05:00
Geoff Bourne
7608168823 Auto-merging via docker-versions-create 2021-04-24 13:44:55 -05:00
Geoff Bourne
5e8f947ce5 Auto-merging via docker-versions-create 2021-04-23 21:06:22 -05:00
Geoff Bourne
acabb9d93c Auto-merging via docker-versions-create 2021-04-23 21:05:53 -05:00
Geoff Bourne
e593ca4bda Auto-merging via docker-versions-create 2021-04-18 13:33:22 -05:00
Geoff Bourne
4e9c00c4d5 Auto-merging via docker-versions-create 2021-04-18 13:32:45 -05:00
Geoff Bourne
a3039eea12 Auto-merging via docker-versions-create 2021-04-11 10:12:35 -05:00
Geoff Bourne
f3826422cf Auto-merging via docker-versions-create 2021-04-11 10:12:00 -05:00
Geoff Bourne
10a3037ab3 Merged latest from master 2021-04-08 19:32:07 -05:00
Geoff Bourne
9b7459ad5c Merged latest from master 2021-04-08 19:28:35 -05:00
Geoff Bourne
6fab527eed Auto-merging via docker-versions-create 2021-04-01 16:40:48 -05:00
Geoff Bourne
c9dc6012f6 Auto-merging via docker-versions-create 2021-04-01 16:40:16 -05:00
Geoff Bourne
a5aec72837 Added git
#819
2021-04-01 16:29:06 -05:00
Geoff Bourne
e5948081a7 Added git
#819
2021-04-01 16:27:50 -05:00
Geoff Bourne
af38a8fc7a ci: removed armv7 build since 15-openj9 doesn't include it 2021-03-06 17:27:08 -06:00
Geoff Bourne
58fa3c897d Merge branch 'master' into java15-openj9 2021-03-06 17:23:02 -06:00
Geoff Bourne
e45621d8e2 ci: Added java15-openj9 branch 2021-03-06 17:22:36 -06:00
Geoff Bourne
298bf5fb0a Merge branch 'master' into multiarch 2021-03-06 16:27:57 -06:00
Geoff Bourne
44769b6001 Shifted PATH-fix earlier in startup 2021-03-06 16:06:43 -06:00
Geoff Bourne
4186cfd91c Auto-merging via docker-versions-create 2021-02-27 20:56:01 -06:00
Geoff Bourne
89afba7437 Ensure FTBA version.json is readable
#784
2021-02-27 17:03:09 -06:00
Geoff Bourne
f397dd71a9 Fix PATH to include java when needed 2021-02-11 14:52:51 -06:00
Geoff Bourne
02e0a47a52 Merge branch master 2021-02-10 14:58:33 -06:00
Geoff Bourne
60809fe5ad Merge from master
CONFLICT (content): Merge conflict in start-configuration
2021-02-10 14:08:21 -06:00
Geoff Bourne
4a8e416fe1 Auto-merging via docker-versions-create
CONFLICT (content): Merge conflict in Dockerfile
2021-02-07 18:22:16 -06:00
Geoff Bourne
ce4efd0b70 Auto-merging docker-versions-create.sh
CONFLICT (content): Merge conflict in Dockerfile
2021-02-07 09:16:33 -06:00
Geoff Bourne
f856276d71 Upgraded multiarch to Java 11 2021-02-06 15:22:15 -06:00
Geoff Bourne
0300854c46 Merge branch 'master' into multiarch 2021-02-06 15:21:53 -06:00
Geoff Bourne
f06e9f5ede Merge branch 'master' into multiarch 2021-02-06 14:52:35 -06:00
Geoff Bourne
8d3ca813ed Auto-merging via docker-versions-create 2021-01-29 21:07:00 -06:00
Geoff Bourne
e97a00e61d Auto-merging via docker-versions-create 2021-01-12 17:28:11 -06:00
41 changed files with 769 additions and 497 deletions

7
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,7 @@
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

View File

@@ -2,57 +2,58 @@ name: Build and publish multiarch
on:
push:
branches:
- multiarch
- java8-multiarch
- multiarch-latest
- java15
- java15-openj9
- master
- "*-multiarch"
- "multiarch*"
- java8-openj9
- java11*
- java16*
- test/multiarch/*
tags:
- "[0-9]+.[0-9]+.[0-9]+-multiarch"
- "[0-9]+.[0-9]+.[0-9]+-multiarch-latest"
- "[0-9]+.[0-9]+.[0-9]+-java15"
- "[0-9]+.[0-9]+.[0-9]+"
- "[0-9]+.[0-9]+.[0-9]+-multiarch*"
- "[0-9]+.[0-9]+.[0-9]+-*multiarch"
- "[0-9]+.[0-9]+.[0-9]+-java8-openj9"
- "[0-9]+.[0-9]+.[0-9]+-java11*"
- "[0-9]+.[0-9]+.[0-9]+-java16*"
paths-ignore:
- "*.md"
- "docs/**"
- "examples/**"
jobs:
docker-buildx:
if: github.repository == 'itzg/docker-minecraft-server'
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2.2.0
uses: actions/checkout@v2.3.4
- name: Prepare
id: prep
run: |
DOCKER_IMAGE=itzg/minecraft-server
VERSION=edge
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
fi
if [[ $GITHUB_REF == refs/heads/* ]]; then
VERSION=${GITHUB_REF#refs/heads/}
if [[ $VERSION == master ]]; then
VERSION=latest
fi
fi
TAGS="${DOCKER_IMAGE}:${VERSION//\//-}"
echo ::set-output name=tags::${TAGS}
echo ::set-output name=cache_from::${TAGS}
echo ::set-output name=version::${VERSION//\//-}
echo ::set-output name=cache_version::${VERSION//\//-}
- name: Docker meta
id: meta
uses: docker/metadata-action@v3
with:
images: |
itzg/minecraft-server
tags: |
type=ref,event=branch
type=ref,event=tag
flavor: |
latest=${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Cache Docker layers
uses: actions/cache@v2
uses: actions/cache@v2.1.6
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-${{ github.sha }}
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-
${{ runner.os }}-buildx-
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v1.2.0
- name: Login to DockerHub
uses: docker/login-action@v1
@@ -62,22 +63,25 @@ jobs:
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2.6.1
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v7,linux/arm64
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.prep.outputs.tags }}
tags: ${{ steps.meta.outputs.tags }}
# ensure latest base image is used
pull: true
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
labels: |
org.opencontainers.image.documentation=https://github.com/itzg/docker-minecraft-server
org.opencontainers.image.source=https://github.com/itzg/docker-minecraft-server
org.opencontainers.image.version=${{ steps.prep.outputs.version }}
org.opencontainers.image.revision=${{ github.sha }}
cache-to: type=local,dest=/tmp/.buildx-cache-new
labels: ${{ steps.meta.outputs.labels }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
- # Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache

21
.github/workflows/generate-toc.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
name: Generate README table of contents
on:
push:
branches:
- master
paths:
- README.md
jobs:
generate:
if: github.repository == 'itzg/docker-minecraft-server'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v2.3.4
- run: |
curl https://raw.githubusercontent.com/ekalinin/github-markdown-toc/master/gh-md-toc -o gh-md-toc
chmod a+x gh-md-toc
./gh-md-toc --insert --no-backup README.md
- uses: stefanzweifel/git-auto-commit-action@v4.11.0
with:
commit_message: "docs: Auto update markdown TOC"

View File

@@ -3,14 +3,12 @@ name: Build and Publish
on:
push:
branches:
- master
- java8
- openj9
- openj9-11
- adopt11
- test/*
tags:
- "[0-9]+.[0-9]+.[0-9]+"
- "[0-9]+.[0-9]+.[0-9]+-java8"
- "[0-9]+.[0-9]+.[0-9]+-openj9"
- "[0-9]+.[0-9]+.[0-9]+-openj9-11"
@@ -22,7 +20,7 @@ jobs:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2.3.4
- name: Run tests
run: |
@@ -33,7 +31,7 @@ jobs:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2.3.4
- name: Prepare
id: prep
@@ -51,20 +49,17 @@ jobs:
fi
TAGS="${DOCKER_IMAGE}:${VERSION//\//-}"
echo ::set-output name=tags::${TAGS}
echo ::set-output name=cache_from::${TAGS}
echo ::set-output name=version::${VERSION//\//-}
echo ::set-output name=cache_version::${VERSION//\//-}
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Cache Docker layers
uses: actions/cache@v2
uses: actions/cache@v2.1.6
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-${{ github.sha }}
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-
${{ runner.os }}-buildx-
- name: Login to DockerHub
@@ -75,7 +70,7 @@ jobs:
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2.6.1
with:
context: .
file: ./Dockerfile
@@ -86,7 +81,7 @@ jobs:
# tags determined by prep step
tags: ${{ steps.prep.outputs.tags }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new
labels: |
org.opencontainers.image.documentation=https://github.com/itzg/docker-minecraft-server
org.opencontainers.image.version=${{ steps.prep.outputs.version }}
@@ -95,3 +90,11 @@ jobs:
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
- # Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache

View File

@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2.3.4
- name: Run tests
run: |

3
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/data/
/.idea/
*.iml
*.iml
/gh-md-toc

View File

@@ -1,4 +1,4 @@
FROM adoptopenjdk:15-jre
FROM adoptopenjdk:16-openj9
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
@@ -84,5 +84,6 @@ RUN dos2unix /start* && chmod +x /start*
RUN dos2unix /health.sh && chmod +x /health.sh
RUN dos2unix /autopause/* && chmod +x /autopause/*.sh
ENTRYPOINT [ "/start" ]
HEALTHCHECK --start-period=1m CMD /health.sh

728
README.md
View File

@@ -38,6 +38,117 @@ With that you can easily view the logs, stop, or re-start the container:
> Be sure to always include `-e EULA=TRUE` in your commands, as Mojang/Microsoft requires EULA acceptance.
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](#versions) and the [`TYPE`](#server-types) can be configured to create many variations of desired Minecraft server.
**TABLE OF CONTENTS**
<!--ts-->
* [Looking for a Bedrock Dedicated Server](#looking-for-a-bedrock-dedicated-server)
* [Interacting with the server](#interacting-with-the-server)
* [Data Directory](#data-directory)
* [Attaching data directory to host filesystem](#attaching-data-directory-to-host-filesystem)
* [Converting anonymous /data volume to named volume](#converting-anonymous-data-volume-to-named-volume)
* [Versions](#versions)
* [Running Minecraft server on different Java version](#running-minecraft-server-on-different-java-version)
* [Deprecated Image Tags](#deprecated-image-tags)
* [Healthcheck](#healthcheck)
* [Deployment Templates and Examples](#deployment-templates-and-examples)
* [Helm Charts](#helm-charts)
* [Examples](#examples)
* [Amazon Web Services (AWS) Deployment](#amazon-web-services-aws-deployment)
* [Using Docker Compose](#using-docker-compose)
* [Server types](#server-types)
* [Running a Forge Server](#running-a-forge-server)
* [Running a Bukkit/Spigot server](#running-a-bukkitspigot-server)
* [Running a Paper server](#running-a-paper-server)
* [Running a Tuinity server](#running-a-tuinity-server)
* [Running an Airplane server](#running-an-airplane-server)
* [Running a Purpur server](#running-a-purpur-server)
* [Running a Yatopia server](#running-a-yatopia-server)
* [Running a Magma server](#running-a-magma-server)
* [Running a Mohist server](#running-a-mohist-server)
* [Running a Catserver type server](#running-a-catserver-type-server)
* [Running an Canyon server](#running-an-canyon-server)
* [Running a SpongeVanilla server](#running-a-spongevanilla-server)
* [Running a Fabric Server](#running-a-fabric-server)
* [Running a server with a Feed the Beast modpack](#running-a-server-with-a-feed-the-beast-modpack)
* [Environment Variables:](#environment-variables)
* [Upgrading](#upgrading)
* [Example](#example)
* [Running a server with a CurseForge modpack](#running-a-server-with-a-curseforge-modpack)
* [Modpack data directory](#modpack-data-directory)
* [Buggy start scripts](#buggy-start-scripts)
* [Fixing "unable to launch forgemodloader"](#fixing-unable-to-launch-forgemodloader)
* [Working with mods and plugins](#working-with-mods-and-plugins)
* [Optional plugins, mods, and config attach points](#optional-plugins-mods-and-config-attach-points)
* [Auto-downloading SpigotMC/Bukkit/PaperMC plugins](#auto-downloading-spigotmcbukkitpapermc-plugins)
* [Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers](#downloadable-modplugin-pack-for-forge-bukkit-and-spigot-servers)
* [Remove old mods/plugins](#remove-old-modsplugins)
* [Working with world data](#working-with-world-data)
* [Downloadable world](#downloadable-world)
* [Cloning world from a container path](#cloning-world-from-a-container-path)
* [Overwrite world on start](#overwrite-world-on-start)
* [Server configuration](#server-configuration)
* [Server name](#server-name)
* [Server port](#server-port)
* [Difficulty](#difficulty)
* [Whitelist Players](#whitelist-players)
* [Op/Administrator Players](#opadministrator-players)
* [Server icon](#server-icon)
* [Rcon](#rcon)
* [Query](#query)
* [Max players](#max-players)
* [Max world size](#max-world-size)
* [Allow Nether](#allow-nether)
* [Announce Player Achievements](#announce-player-achievements)
* [Enable Command Block](#enable-command-block)
* [Force Gamemode](#force-gamemode)
* [Generate Structures](#generate-structures)
* [Hardcore](#hardcore)
* [Snooper](#snooper)
* [Max Build Height](#max-build-height)
* [Max Tick Time](#max-tick-time)
* [Spawn Animals](#spawn-animals)
* [Spawn Monsters](#spawn-monsters)
* [Spawn NPCs](#spawn-npcs)
* [Set spawn protection](#set-spawn-protection)
* [View Distance](#view-distance)
* [Level Seed](#level-seed)
* [Game Mode](#game-mode)
* [Message of the Day](#message-of-the-day)
* [PVP Mode](#pvp-mode)
* [Level Type and Generator Settings](#level-type-and-generator-settings)
* [Custom Server Resource Pack](#custom-server-resource-pack)
* [Level / World Save Name](#level--world-save-name)
* [Online mode](#online-mode)
* [Allow flight](#allow-flight)
* [Other server property mappings](#other-server-property-mappings)
* [Miscellaneous Options](#miscellaneous-options)
* [Replacing variables inside configs](#replacing-variables-inside-configs)
* [Running with a custom server JAR](#running-with-a-custom-server-jar)
* [Force re-download of the server file](#force-re-download-of-the-server-file)
* [Running as alternate user/group ID](#running-as-alternate-usergroup-id)
* [Memory Limit](#memory-limit)
* [JVM Options](#jvm-options)
* [Interactive and Color Console](#interactive-and-color-console)
* [OpenJ9 Specific Options](#openj9-specific-options)
* [Enabling rolling logs](#enabling-rolling-logs)
* [Timezone Configuration](#timezone-configuration)
* [Enable Remote JMX for Profiling](#enable-remote-jmx-for-profiling)
* [Enable Aikar's Flags](#enable-aikars-flags)
* [HTTP Proxy](#http-proxy)
* [Using "noconsole" option](#using-noconsole-option)
* [Explicitly disable GUI](#explicitly-disable-gui)
* [Stop Duration](#stop-duration)
* [Autopause](#autopause)
* [Description](#description)
* [Enabling Autopause](#enabling-autopause)
* [Running on RaspberryPi](#running-on-raspberrypi)
<!-- Added by: runner, at: Thu Jul 15 13:34:00 UTC 2021 -->
<!--te-->
## Looking for a Bedrock Dedicated Server
For Minecraft clients running on consoles, mobile, or native Windows, you'll need to
@@ -110,6 +221,9 @@ services:
- 25565:25565
environment:
EULA: "TRUE"
tty: true
stdin_open: true
restart: unless-stopped
volumes:
# attach a directory relative to the directory containing this compose file
- ./minecraft-data:/data
@@ -138,7 +252,7 @@ docker run -d -it --name mc-new -v mc:/data -p 25565:25565 -e EULA=TRUE -e MEMOR
## Versions
To use a different Minecraft version, pass the `VERSION` environment variable, which can have the value
To use a different Minecraft version, pass the `VERSION` environment variable (case sensitive), which can have the value
- LATEST (the default)
- SNAPSHOT
@@ -163,15 +277,14 @@ To use a different version of Java, please use a docker tag to run your Minecraf
| Tag name | Java version | Linux | JVM Type | Architecture |
| -------------- | -------------|--------|----------|-------------------|
| latest | 11 | Alpine | Hotspot | amd64 |
| latest | 16 | Debian | Hotspot | amd64,arm64,armv7 |
| java8 | 8 | Alpine | Hotspot | amd64 |
| java8-multiarch | 8 | Debian | Hotspot | amd64,arm64,armv7 |
| java15 | 15 | Debian | Hotspot | amd64,arm64,armv7 |
| java15-openj9 | 15 | Debian | OpenJ9 | amd64,arm64 |
| adopt11 | 11 | Alpine | Hotspot | amd64 |
| openj9 | 8 | Alpine | OpenJ9 | amd64 |
| openj9-11 | 11 | Alpine | OpenJ9 | amd64 |
| multiarch | 11 | Debian | Hotspot | amd64,arm64,armv7 |
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
| java11 | 11 | Debian | Hotspot | amd64,arm64,armv7 |
| java11-openj9 | 11 | Debian | OpenJ9 | amd64 |
| java16 | 16 | Debian | Hotspot | amd64,arm64,armv7 |
| java16-openj9 | 16 | Debian | OpenJ9 | amd64 |
| multiarch-latest | 15+ | Debian | Hotspot | amd64,arm64,armv7 |
For example, to use Java version 15 on any supported architecture:
@@ -212,7 +325,9 @@ Some orchestration systems, such as Portainer, don't allow for disabling the def
### Helm Charts
- [stable/minecraft](https://hub.helm.sh/charts/stable/minecraft) ([chart source](https://github.com/helm/charts/tree/master/stable/minecraft))
- 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)
### Examples
@@ -223,13 +338,44 @@ The [examples directory](https://github.com/itzg/docker-minecraft-server/tree/ma
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.
## Running a Forge Server
### Using Docker Compose
Rather than type the server options below, the port mappings above, etc
every time you want to create new Minecraft server, you can now use
[Docker Compose](https://docs.docker.com/compose/). Start with a
`docker-compose.yml` file like the following:
```yml
version: "3"
services:
mc:
image: itzg/minecraft-server
ports:
- 25565:25565
environment:
EULA: "TRUE"
tty: true
stdin_open: true
restart: unless-stopped
```
and in the same directory as that file run
docker-compose up -d
Now, go play...or adjust the `environment` section to configure
this server instance.
## Server types
### Running a Forge Server
Enable [Forge server](http://www.minecraftforge.net/wiki/) mode by adding a `-e TYPE=FORGE` to your command-line.
The overall version is specified by `VERSION`, [as described in the section above](#versions) and will run the recommended Forge version by default. You can also choose to run a specific Forge version with `FORGEVERSION`, such as `-e FORGEVERSION=14.23.5.2854`.
$ docker run -d -v /path/on/host:/data \
docker run -d -v /path/on/host:/data \
-e TYPE=FORGE \
-e VERSION=1.12.2 -e FORGEVERSION=14.23.5.2854 \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
@@ -237,36 +383,18 @@ The overall version is specified by `VERSION`, [as described in the section abov
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:
$ docker run -d -v /path/on/host:/data ... \
docker run -d -v /path/on/host:/data ... \
-e FORGE_INSTALLER=forge-1.11.2-13.20.0.2228-installer.jar ...
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 -d -v /path/on/host:/data ... \
docker run -d -v /path/on/host:/data ... \
-e FORGE_INSTALLER_URL=http://HOST/forge-1.11.2-13.20.0.2228-installer.jar ...
In both of the cases above, there is no need for the `VERSION` or `FORGEVERSION` variables.
### Managing mods
In order to manage mods, you have two options:
1. [Attach a host directory to the /data path](#attaching-data-directory-to-host-filesystem) and manage the contents of the `mods` subdirectory
2. Using a mods-mount
If the container paths `/mods` and/or `/config` exist, such as by attaching a docker volume or host path, then any files in either of these directories will be copied over to the respective `/data` subdirectory before starting Minecraft.
If you want old mods to be removed as the `/mods` content is updated, then add `-e REMOVE_OLD_MODS=TRUE`. You can fine tune the removal process by specifying the `REMOVE_OLD_MODS_INCLUDE` and `REMOVE_OLD_MODS_EXCLUDE` variables. By default, everything will be removed. You can also specify the `REMOVE_OLD_MODS_DEPTH` (default is 16) variable to only delete files up to a certain level.
For example: `-e REMOVE_OLD_MODS=TRUE -e REMOVE_OLD_MODS_INCLUDE="*.jar" -e REMOVE_OLD_MODS_DEPTH=1` will remove all old jar files that are directly inside the `plugins/` or `mods/` directory.
You can specify the destination of the files that are copied from `/mods` and `/config` by setting the `COPY_MODS_DEST` and `COPY_CONFIG_DEST`, where the default is `/data/mods` and `/data/config`. For example, `-v ./config:/config -e COPY_CONFIG_DEST=/data` will allow you to copy over files like `bukkit.yml` and so on directly into the server directory.
> NOTE: If a file was updated in the destination path and is newer than the source file from `/config`, then it will not be overwritten.
## Running a Bukkit/Spigot server
### Running a Bukkit/Spigot server
Enable Bukkit/Spigot server mode by adding a `-e TYPE=BUKKIT` or `-e TYPE=SPIGOT` to your command-line.
@@ -287,7 +415,7 @@ Plugins can either be managed within the `plugins` subdirectory of the [data dir
> 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.
## Running a Paper server
### Running a Paper server
Enable Paper server mode by adding a `-e TYPE=PAPER` to your command-line.
@@ -309,7 +437,7 @@ If you have attached a host directory to the `/data` volume, then you can instal
[You can also auto-download plugins using `SPIGET_RESOURCES`.](#auto-downloading-spigotmcbukkitpapermc-plugins)
## Running a Tuinity server
### Running a Tuinity server
A [Tuinity](https://github.com/Spottedleaf/Tuinity) server, which is a fork of Paper aimed at improving server performance at high playercounts.
@@ -317,23 +445,22 @@ A [Tuinity](https://github.com/Spottedleaf/Tuinity) server, which is a fork of P
> **NOTE** only `VERSION=LATEST` is supported
## Running an Airplane server
### Running an Airplane server
An [Airplane](https://github.com/TECHNOVE/Airplane) server, which is a fork of Tuinity aimed at further improving server performance at high playercounts.
-e TYPE=AIRPLANE
> **NOTE** only `VERSION=LATEST` is supported
> **NOTE** only Java 8 and 11 are supported
> NOTE: The `VERSION` variable is used to select an Airplane branch to download from. The available options are "LATEST" "1.17" "1.16" "PURPUR" and "PURPUR-1.16"
Extra variables:
- `AIRPLANE_BUILD=lastSuccessfulBuild` : set a specific Airplane build to use
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler
## Running a Purpur server
### Running a Purpur server
A [Purpur](https://purpur.pl3x.net/) server, which is "a fork of Paper, Tuinity, Airplane with the goal of providing new and interesting configuration options".
A [Purpur](https://purpur.pl3x.net/) server, which is "a drop-in replacement for Paper servers designed for configurability, new fun and exciting gameplay features, and high performance built on top of Tuinity."
-e TYPE=PURPUR
@@ -342,9 +469,8 @@ A [Purpur](https://purpur.pl3x.net/) server, which is "a fork of Paper, Tuinity,
Extra variables:
- `PURPUR_BUILD=LATEST` : set a specific Purpur build to use
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler
## Running a Yatopia server
### Running a Yatopia server
A [Yatopia](https://github.com/YatopiaMC/Yatopia) server, which is a "blazing fast Tuinity fork with best in class performance".
@@ -357,7 +483,7 @@ Extra variables:
- `FORCE_REDOWNLOAD=false` : set to true to force the located server jar to be re-downloaded
- `USE_FLARE_FLAGS=false` : set to true to add appropriate flags for the [Flare](https://blog.airplane.gg/flare) profiler
## Running a Magma server
### Running a Magma server
A [Magma](https://magmafoundation.org/) server, which is a combination of Forge and PaperMC, can be used with
@@ -366,9 +492,9 @@ 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"
## Running a Mohist server
### Running a Mohist server
A [Mohist](https://github.com/Mohist-Community/Mohist) server can be used with
A [Mohist](https://github.com/MohistMC/Mohist) server can be used with
-e TYPE=MOHIST
@@ -378,7 +504,7 @@ By default the latest build will be used; however, a specific build number can b
-e VERSION=1.16.5 -e MOHIST_BUILD=374
## Running a Catserver type server
### Running a Catserver type server
A [Catserver](http://catserver.moe/) type server can be used with
@@ -386,6 +512,63 @@ A [Catserver](http://catserver.moe/) type server can be used with
> **NOTE** Catserver only provides a single release stream, so `VERSION` is ignored
### Running an Canyon server
[Canyon](https://github.com/canyonmodded/canyon) is a fork of CraftBukkit for Minecraft Beta 1.7.3. It includes multiple enhancements whilst also retaining compatibility with old Bukkit plugins and mods as much as possible.
-e VERSION=b1.7.3 -e TYPE=CANYON
> **NOTE** only `VERSION=b1.7.3` is supported
> **NOTE** only Java 8 is supported
By default the latest build will be used; however, a specific build number can be selected by setting `CANYON_BUILD`, such as
-e CANYON_BUILD=11
### Running a SpongeVanilla server
Enable SpongeVanilla server mode by adding a `-e TYPE=SPONGEVANILLA` to your command-line.
By default the container will run the latest `STABLE` version.
If you want to run a specific version, you can add `-e SPONGEVERSION=1.11.2-6.1.0-BETA-19` to your command-line.
docker run -d -v /path/on/host:/data -e TYPE=SPONGEVANILLA \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
You can also choose to use the `EXPERIMENTAL` branch.
Just change it with `SPONGEBRANCH`, such as:
$ docker run -d -v /path/on/host:/data ... \
-e TYPE=SPONGEVANILLA -e SPONGEBRANCH=EXPERIMENTAL ...
### Running a Fabric Server
Enable [Fabric server](http://fabricmc.net/use/) mode by adding a `-e TYPE=FABRIC` to your command-line. By default, the container will run the latest version, but you can also choose to run a specific version with `VERSION`.
```
docker run -d -v /path/on/host:/data \
-e TYPE=FABRIC \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
```
A specific installer version can be requested using `FABRIC_INSTALLER_VERSION`.
To use a pre-downloaded Fabric installer, place it in a directory attached into the container, such as the `/data` volume and specify the name of the installer file with `FABRIC_INSTALLER`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER=fabric-installer-0.5.0.32.jar ...
```
To download a Fabric installer from a custom location, such as your own file repository, specify the URL with `FABRIC_INSTALLER_URL`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER_URL=http://HOST/fabric-installer-0.5.0.32.jar ...
```
In order to add mods, you have two options:
## Running a server with a Feed the Beast modpack
> **NOTE** requires one of the Debian based images listed in [the Java versions section](#running-minecraft-server-on-different-java-version).
@@ -457,77 +640,9 @@ then you apply a workaround by adding this to the run invocation:
-e FTB_LEGACYJAVAFIXER=true
## Running a SpongeVanilla server
## Working with mods and plugins
Enable SpongeVanilla server mode by adding a `-e TYPE=SPONGEVANILLA` to your command-line.
By default the container will run the latest `STABLE` version.
If you want to run a specific version, you can add `-e SPONGEVERSION=1.11.2-6.1.0-BETA-19` to your command-line.
docker run -d -v /path/on/host:/data -e TYPE=SPONGEVANILLA \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
You can also choose to use the `EXPERIMENTAL` branch.
Just change it with `SPONGEBRANCH`, such as:
$ docker run -d -v /path/on/host:/data ... \
-e TYPE=SPONGEVANILLA -e SPONGEBRANCH=EXPERIMENTAL ...
## Running a Fabric Server
Enable [Fabric server](http://fabricmc.net/use/) mode by adding a `-e TYPE=FABRIC` to your command-line. By default, the container will run the latest version, but you can also choose to run a specific version with `VERSION`.
```
docker run -d -v /path/on/host:/data \
-e TYPE=FABRIC \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
```
A specific installer version can be requested using `FABRIC_INSTALLER_VERSION`.
To use a pre-downloaded Fabric installer, place it in a directory attached into the container, such as the `/data` volume and specify the name of the installer file with `FABRIC_INSTALLER`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER=fabric-installer-0.5.0.32.jar ...
```
To download a Fabric installer from a custom location, such as your own file repository, specify the URL with `FABRIC_INSTALLER_URL`, such as:
```
docker run -d -v /path/on/host:/data ... \
-e FABRIC_INSTALLER_URL=http://HOST/fabric-installer-0.5.0.32.jar ...
```
In order to add mods, you have two options:
### Using the /data volume
This is the easiest way if you are using a persistent `/data` mount.
To do this, you will need to attach the container's `/data` directory
(see "Attaching data directory to host filesystem”).
Then, you can add mods to the `/path/on/host/mods` folder you chose. From the example above,
the `/path/on/host` folder contents look like:
```
/path/on/host
├── mods
│ └── ... INSTALL MODS HERE ...
├── config
│ └── ... CONFIGURE MODS HERE ...
├── ops.json
├── server.properties
├── whitelist.json
└── ...
```
If you add mods while the container is running, you'll need to restart it to pick those
up:
docker stop mc
docker start mc
## Optional plugins, mods, and config attach points
### Optional plugins, mods, and config attach points
There are optional volume paths that can be attached to supply content to be copied into the data area:
@@ -540,9 +655,17 @@ There are optional volume paths that can be attached to supply content to be cop
`/config`
: contents are copied into `/data/config` by default, but can be changed with `COPY_CONFIG_DEST`
If you want old mods/plugins to be removed before the content is brought over from those attach points, then add `-e REMOVE_OLD_MODS=TRUE`. You can fine tune the removal process by specifying the `REMOVE_OLD_MODS_INCLUDE` and `REMOVE_OLD_MODS_EXCLUDE` variables. By default, everything will be removed. You can also specify the `REMOVE_OLD_MODS_DEPTH` (default is 16) variable to only delete files up to a certain level.
For example: `-e REMOVE_OLD_MODS=TRUE -e REMOVE_OLD_MODS_INCLUDE="*.jar" -e REMOVE_OLD_MODS_DEPTH=1` will remove all old jar files that are directly inside the `plugins/` or `mods/` directory.
You can specify the destination of the files that are copied from `/mods` and `/config` by setting the `COPY_MODS_DEST` and `COPY_CONFIG_DEST`, where the default is `/data/mods` and `/data/config`. For example, `-v ./config:/config -e COPY_CONFIG_DEST=/data` will allow you to copy over files like `bukkit.yml` and so on directly into the server directory.
These paths work well if you want to have a common set of modules in a separate location, but still have multiple worlds with different server requirements in either persistent volumes or a downloadable archive.
## Auto-downloading SpigotMC/Bukkit/PaperMC plugins
> For more flexibility with mods/plugins preparation, you can declare directories to use in [the `MODS` variable](#downloadable-modplugin-pack-for-forge-bukkit-and-spigot-servers)
### Auto-downloading SpigotMC/Bukkit/PaperMC plugins
The `SPIGET_RESOURCES` variable can be set with a comma-separated list of SpigotMC resource IDs to automatically download [SpigotMC resources/plugins](https://www.spigotmc.org/resources/) using [the spiget API](https://spiget.org/). Resources that are zip files will be expanded into the plugins directory and resources that are simply jar files will be moved there.
@@ -557,157 +680,65 @@ For example, the following will auto-download the [EssentialsX](https://www.spig
-e SPIGET_RESOURCES=9089,34315
## Replacing variables inside configs
### Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers
Sometimes you have mods or plugins that require configuration information that is only available at runtime.
For example if you need to configure a plugin to connect to a database,
you don't want to include this information in your Git repository or Docker image.
Or maybe you have some runtime information like the server name that needs to be set
in your config files after the container starts.
Like the `WORLD` option above, you can specify the URL or path of a "mod pack"
to download and install into `mods` for Forge or `plugins` for Bukkit/Spigot.
To use this option pass the environment variable `MODPACK`, such as
For those cases there is the option to replace defined variables inside your configs
with environment variables defined at container runtime.
docker run -d -e MODPACK=http://www.example.com/mods/modpack.zip ...
If you set the enviroment variable `REPLACE_ENV_VARIABLES` to `TRUE` the startup script
will go thru all files inside your `/data` volume and replace variables that match your
defined environment variables. Variables that you want to replace need to be wrapped
inside `${YOUR_VARIABLE}` curly brackets and prefixed with a dollar sign. This is the regular
syntax for enviromment variables inside strings or config files.
**NOTE:** The referenced URL 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.
Optionally you can also define a prefix to only match predefined environment variables.
You may also download or copy over individual mods using the `MODS` environment variable. `MODS` contains a comma-separated list of
- URL of a jar file
- container path to a jar file
- container path to a directory containing jar files
`ENV_VARIABLE_PREFIX="CFG_"` <-- this is the default prefix
docker run -d -e MODS=https://www.example.com/mods/mod1.jar,/plugins/common,/plugins/special/mod2.jar ...
If you want use file for value (like when use secrets) you can add suffix `_FILE` to your variable name (in run command).
### Remove old mods/plugins
There are some limitations to what characters you can use.
When the option above is specified (`MODPACK`) you can also instruct script to
delete old mods/plugins prior to installing new ones. This behaviour is desirable
in case you want to upgrade mods/plugins from downloaded zip file.
To use this option pass the environment variable `REMOVE_OLD_MODS="TRUE"`, such as
| Type | Allowed Characters |
| ----- | ------------------- |
| Name | `0-9a-zA-Z_-` |
| Value | `0-9a-zA-Z_-:/=?.+` |
docker run -d -e REMOVE_OLD_MODS="TRUE" -e MODPACK=http://www.example.com/mods/modpack.zip ...
Variables will be replaced in files with the following extensions:
`.yml`, `.yaml`, `.txt`, `.cfg`, `.conf`, `.properties`.
**WARNING:** All content of the `mods` or `plugins` directory will be deleted
before unpacking new content from the MODPACK or MODS.
Specific files can be excluded by listing their name (without path) in the variable `REPLACE_ENV_VARIABLES_EXCLUDES`.
## Working with world data
Paths can be excluded by listing them in the variable `REPLACE_ENV_VARIABLES_EXCLUDE_PATHS`. Path
excludes are recursive. Here is an example:
```
REPLACE_ENV_VARIABLES_EXCLUDE_PATHS="/data/plugins/Essentials/userdata /data/plugins/MyPlugin"
```
### Downloadable world
Here is a full example where we want to replace values inside a `database.yml`.
Instead of mounting the `/data` volume, you can instead specify the URL of a ZIP file containing an archived world. It will be searched for a file `level.dat` and the containing subdirectory moved to the directory named by `$LEVEL`. This means that most of the archived Minecraft worlds downloadable from the Internet will already be in the correct format.
```yml
docker run -d -e WORLD=http://www.example.com/worlds/MySave.zip ...
---
database:
host: ${CFG_DB_HOST}
name: ${CFG_DB_NAME}
password: ${CFG_DB_PASSWORD}
```
**NOTE:** This URL must be accessible from inside the container. Therefore,
you should use an IP address or a globally resolvable FQDN, or else the
name of a linked container.
This is how your `docker-compose.yml` file could look like:
**NOTE:** If the archive contains more than one `level.dat`, then the one to select can be picked with `WORLD_INDEX`, which defaults to 1.
```yml
version: "3"
# Other docker-compose examples in /examples
### Cloning world from a container path
services:
minecraft:
image: itzg/minecraft-server
ports:
- "25565:25565"
volumes:
- "mc:/data"
environment:
EULA: "TRUE"
ENABLE_RCON: "true"
RCON_PASSWORD: "testing"
RCON_PORT: 28016
# enable env variable replacement
REPLACE_ENV_VARIABLES: "TRUE"
# define an optional prefix for your env variables you want to replace
ENV_VARIABLE_PREFIX: "CFG_"
# and here are the actual variables
CFG_DB_HOST: "http://localhost:3306"
CFG_DB_NAME: "minecraft"
CFG_DB_PASSWORD_FILE: "/run/secrets/db_password"
restart: always
rcon:
image: itzg/rcon
ports:
- "4326:4326"
- "4327:4327"
volumes:
- "rcon:/opt/rcon-web-admin/db"
The `WORLD` option can also be used to reference a directory or zip file that will be used as a source to clone or unzip the world directory.
volumes:
mc:
rcon:
secrets:
db_password:
file: ./db_password
```
The content of `db_password`:
ug23u3bg39o-ogADSs
## Running with a custom server JAR
If you would like to run a custom server JAR, set `-e TYPE=CUSTOM` and pass the custom server
JAR via `CUSTOM_SERVER`. It can either be a URL or a container path to an existing JAR file.
If it is a URL, it will only be downloaded into the `/data` directory if it wasn't already. As
such, if you need to upgrade or re-download the JAR, then you will need to stop the container,
remove the file from the container's `/data` directory, and start again.
## Force re-download of the server file
For VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, CURSEFORGE, SPONGEVANILLA server types, set
`$FORCE_REDOWNLOAD` to some value (e.g. 'true) to force a re-download of the server file for
the particular server type. by adding a `-e FORCE_REDOWNLOAD=true` to your command-line.
For example, with PaperSpigot, it would look something like this:
For example, the following would initially clone the world's content
from `/worlds/basic`. Also notice in the example that you can use a
read-only volume attachment to ensure the clone source remains pristine.
```
docker run -d -v /path/on/host:/data \
-e TYPE=PAPER -e FORCE_REDOWNLOAD=true \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
docker run ... -v $HOME/worlds:/worlds:ro -e WORLD=/worlds/basic
```
## Using Docker Compose
Rather than type the server options below, the port mappings above, etc
every time you want to create new Minecraft server, you can now use
[Docker Compose](https://docs.docker.com/compose/). Start with a
`docker-compose.yml` file like the following:
```
minecraft-server:
image: itzg/minecraft-server
ports:
- "25565:25565"
environment:
EULA: "TRUE"
tty: true
stdin_open: true
restart: always
```
and in the same directory as that file run
docker-compose up -d
Now, go play...or adjust the `environment` section to configure
this server instance.
### Overwrite world on start
The world will only be downloaded or copied if it doesn't exist already. Set `FORCE_WORLD_COPY=TRUE` to force overwrite the world on every server start.
## Server configuration
@@ -758,10 +789,11 @@ To whitelist players for your Minecraft server, pass the Minecraft usernames sep
If the `WHITELIST` environment variable is not used, any user can join your Minecraft server if it's publicly accessible.
> NOTE: When `WHITELIST` is used the server property `white-list` will automatically get set to `true`.
> NOTE: When `WHITELIST` is used the server properties `white-list` and `whitelist` will automatically get set to `true`.
> By default, the players in `WHITELIST` are **added** to the final `whitelist.json` file by the Minecraft server. If you set `OVERRIDE_WHITELIST` to "true" then the `whitelist.json` file will be recreated on each server startup.
Alternatively, you can set `ENABLE_WHITELIST=true` to only set the server properties `white-list` and `whitelist` without modifying the whitelist file. In this case the whitelist is solely managed using the `whitelist add` and `whitelist remove` commands.
### Op/Administrator Players
To add more "op" (aka adminstrator) users to your Minecraft server, pass the Minecraft usernames separated by commas via the `OPS` environment variable, such as
@@ -977,71 +1009,17 @@ You can set a link to a custom resource pack and set it's checksum using the `RE
**NOTE:** `:` and `=` must be escaped using `\`. The checksum plain-text hexadecimal.
### World Save Name
### Level / World Save Name
You can either switch between world saves or run multiple containers with different saves by using the `LEVEL` option,
where the default is "world":
docker run -d -e LEVEL=bonus ...
**NOTE:** if running multiple containers be sure to either specify a different `-v` host directory for each
> **NOTE:** if running multiple containers be sure to either specify a different `-v` host directory for each
`LEVEL` in use or don't use `-v` and the container's filesystem will keep things encapsulated.
### Downloadable world
Instead of mounting the `/data` volume, you can instead specify the URL of a ZIP file containing an archived world. It will be searched for a file `level.dat` and the containing subdirectory moved to the directory named by `$LEVEL`. This means that most of the archived Minecraft worlds downloadable from the Internet will already be in the correct format.
docker run -d -e WORLD=http://www.example.com/worlds/MySave.zip ...
**NOTE:** This URL must be accessible from inside the container. Therefore,
you should use an IP address or a globally resolvable FQDN, or else the
name of a linked container.
**NOTE:** If the archive contains more than one `level.dat`, then the one to select can be picked with `WORLD_INDEX`, which defaults to 1.
### Cloning world from a container path
The `WORLD` option can also be used to reference a directory or zip file that will be used as a source to clone or unzip the world directory.
For example, the following would initially clone the world's content
from `/worlds/basic`. Also notice in the example that you can use a
read-only volume attachment to ensure the clone source remains pristine.
```
docker run ... -v $HOME/worlds:/worlds:ro -e WORLD=/worlds/basic
```
### Overwrite world on start
The world will only be downloaded or copied if it doesn't exist already. Set `FORCE_WORLD_COPY=TRUE` to force overwrite the world on every server start.
### Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers
Like the `WORLD` option above, you can specify the URL of a "mod pack"
to download and install into `mods` for Forge or `plugins` for Bukkit/Spigot.
To use this option pass the environment variable `MODPACK`, such as
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
top level of the zip archive. Make sure the jars are compatible with the
particular `TYPE` of server you are running.
You may also download individual mods using the `MODS` environment variable and supplying the URL
to the jar files. Multiple mods/plugins should be comma separated.
docker run -d -e MODS=https://www.example.com/mods/mod1.jar,https://www.example.com/mods/mod2.jar ...
### Remove old mods/plugins
When the option above is specified (`MODPACK`) you can also instruct script to
delete old mods/plugins prior to installing new ones. This behaviour is desirable
in case you want to upgrade mods/plugins from downloaded zip file.
To use this option pass the environment variable `REMOVE_OLD_MODS="TRUE"`, such as
docker run -d -e REMOVE_OLD_MODS="TRUE" -e MODPACK=http://www.example.com/mods/modpack.zip ...
**WARNING:** All content of the `mods` or `plugins` directory will be deleted
before unpacking new content from the MODPACK or MODS.
> **INFO** Refer to the [data directory](#data-directory) section for a visual description of where the `$LEVEL` directory is situated.
### Online mode
@@ -1072,9 +1050,133 @@ Allows users to use flight on your server while in Survival mode, if they have a
| PREVENT_PROXY_CONNECTIONS | prevent-proxy-connections |
| USE_NATIVE_TRANSPORT | use-native-transport |
| ENFORCE_WHITELIST | enforce-whitelist |
| ENABLE_WHITELIST | white-list and whitelist |
## Miscellaneous Options
### Replacing variables inside configs
Sometimes you have mods or plugins that require configuration information that is only available at runtime.
For example if you need to configure a plugin to connect to a database,
you don't want to include this information in your Git repository or Docker image.
Or maybe you have some runtime information like the server name that needs to be set
in your config files after the container starts.
For those cases there is the option to replace defined variables inside your configs
with environment variables defined at container runtime.
If you set the enviroment variable `REPLACE_ENV_VARIABLES` to `TRUE` the startup script
will go thru all files inside your `/data` volume and replace variables that match your
defined environment variables. Variables that you want to replace need to be wrapped
inside `${YOUR_VARIABLE}` curly brackets and prefixed with a dollar sign. This is the regular
syntax for enviromment variables inside strings or config files.
Optionally you can also define a prefix to only match predefined environment variables.
`ENV_VARIABLE_PREFIX="CFG_"` <-- this is the default prefix
If you want use file for value (like when use secrets) you can add suffix `_FILE` to your variable name (in run command).
There are some limitations to what characters you can use.
| Type | Allowed Characters |
| ----- | ------------------- |
| Name | `0-9a-zA-Z_-` |
| Value | `0-9a-zA-Z_-:/=?.+` |
Variables will be replaced in files with the following extensions:
`.yml`, `.yaml`, `.txt`, `.cfg`, `.conf`, `.properties`.
Specific files can be excluded by listing their name (without path) in the variable `REPLACE_ENV_VARIABLES_EXCLUDES`.
Paths can be excluded by listing them in the variable `REPLACE_ENV_VARIABLES_EXCLUDE_PATHS`. Path
excludes are recursive. Here is an example:
```
REPLACE_ENV_VARIABLES_EXCLUDE_PATHS="/data/plugins/Essentials/userdata /data/plugins/MyPlugin"
```
Here is a full example where we want to replace values inside a `database.yml`.
```yml
---
database:
host: ${CFG_DB_HOST}
name: ${CFG_DB_NAME}
password: ${CFG_DB_PASSWORD}
```
This is how your `docker-compose.yml` file could look like:
```yml
version: "3.8"
# Other docker-compose examples in /examples
services:
minecraft:
image: itzg/minecraft-server
ports:
- "25565:25565"
volumes:
- "mc:/data"
environment:
EULA: "TRUE"
ENABLE_RCON: "true"
RCON_PASSWORD: "testing"
RCON_PORT: 28016
# enable env variable replacement
REPLACE_ENV_VARIABLES: "TRUE"
# define an optional prefix for your env variables you want to replace
ENV_VARIABLE_PREFIX: "CFG_"
# and here are the actual variables
CFG_DB_HOST: "http://localhost:3306"
CFG_DB_NAME: "minecraft"
CFG_DB_PASSWORD_FILE: "/run/secrets/db_password"
restart: always
rcon:
image: itzg/rcon
ports:
- "4326:4326"
- "4327:4327"
volumes:
- "rcon:/opt/rcon-web-admin/db"
volumes:
mc:
rcon:
secrets:
db_password:
file: ./db_password
```
The content of `db_password`:
ug23u3bg39o-ogADSs
### Running with a custom server JAR
If you would like to run a custom server JAR, set `-e TYPE=CUSTOM` and pass the custom server
JAR via `CUSTOM_SERVER`. It can either be a URL or a container path to an existing JAR file.
If it is a URL, it will only be downloaded into the `/data` directory if it wasn't already. As
such, if you need to upgrade or re-download the JAR, then you will need to stop the container,
remove the file from the container's `/data` directory, and start again.
### Force re-download of the server file
For VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, CURSEFORGE, SPONGEVANILLA server types, set
`$FORCE_REDOWNLOAD` to some value (e.g. 'true) to force a re-download of the server file for
the particular server type. by adding a `-e FORCE_REDOWNLOAD=true` to your command-line.
For example, with PaperSpigot, it would look something like this:
```
docker run -d -v /path/on/host:/data \
-e TYPE=PAPER -e FORCE_REDOWNLOAD=true \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
```
### Running as alternate user/group ID
By default, the container will switch to user ID 1000 and group ID 1000;
@@ -1111,13 +1213,19 @@ For some cases, if e.g. after removing mods, it could be necessary to startup mi
### Interactive and Color Console
If you would like to attach to the Minecraft server console with color and interactive capabilities, then add
If you would like to `docker attach` to the Minecraft server console with color and interactive capabilities, then add
```
-e EXEC_DIRECTLY=true
```
> **NOTE** this will bypass graceful server shutdown handling when using `docker stop`, so be sure to use `rcon-cli` or console commands to `stop` the server.
> **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.
### OpenJ9 Specific Options
@@ -1195,7 +1303,7 @@ disable that by passing `-e GUI=FALSE`.
### Stop Duration
When the container is signalled to stop, the Minecraft process wrapper will attempt to send a "stop" command via RCON or console and waits for the process to gracefully finish. By defaul it waits 60 seconds, but that duration can be configured by setting the environment variable `STOP_DURATION` to the number of seconds.
When the container is signalled to stop, the Minecraft process wrapper will attempt to send a "stop" command via RCON or console and waits for the process to gracefully finish. By default it waits 60 seconds, but that duration can be configured by setting the environment variable `STOP_DURATION` to the number of seconds.
## Autopause
@@ -1209,7 +1317,7 @@ Of course, even loaded chunks are not ticked when the process is stopped.
**You must greatly increase or disable max-tick-time watchdog functionality.** From the server's point of view, the pausing causes a single tick to take as long as the process is stopped, so the server watchdog might intervene after the process is continued, possibly forcing a container restart. To prevent this, ensure that the `max-tick-time` in the `server.properties` file is set to a very large value or -1 to disable it entirely, which is highly recommended. That can be set with `MAX_TICK_TIME` as described in [the section below](#max-tick-time).
> **NOTE:** Non-vanilla versions might have their own configuration file, you might have to disable their watchdogs separately (e.g. PAPER Servers).
> **NOTE:** Non-vanilla versions might have their own configuration file, you might have to disable their watchdogs separately. For PaperMC servers, you need to send the JVM flag `-Ddisable.watchdog=true`, this can be done with the docker env variable `-e JVM_DD_OPTS=disable.watchdog:true`
On startup the `server.properties` file is checked and, if applicable, a warning is printed to the terminal. When the server is created (no data available in the persistent directory), the properties file is created with the Watchdog disabled.
@@ -1239,9 +1347,7 @@ The following environment variables define the behaviour of auto-pausing:
## Running on RaspberryPi
To run this image on a RaspberryPi 3 B+, 4, or newer, use any of the image tags [list in the Java version section](#running-minecraft-server-on-different-java-version) that specify `armv7` for the architecture, such as
itzg/minecraft-server:multiarch
To run this image on a RaspberryPi 3 B+, 4, or newer, use any of the image tags [list in the Java version section](#running-minecraft-server-on-different-java-version) that specify `armv7` for the architecture, which includes `itzg/minecraft-server:latest`.
> NOTE: you may need to lower the memory allocation, such as `-e MEMORY=750m`

View File

@@ -4,12 +4,11 @@
branches_list=(
'java8'
'java8-multiarch'
'openj9'
'openj9-11'
'adopt11'
'java15'
'java15-openj9'
'multiarch'
'java8-openj9'
'java11'
'java11-openj9'
'java16'
'java16-openj9'
'multiarch-latest'
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -1,4 +1,4 @@
version: '3'
version: '3.8'
services:
minecraft:

View File

@@ -1,4 +1,4 @@
version: '3.2'
version: '3.8'
services:
mc:

View File

@@ -0,0 +1,15 @@
version: "3"
services:
mc:
image: ${IMAGE:-itzg/minecraft-server}
environment:
EULA: "true"
TYPE: FABRIC
ports:
- 25565:25565
volumes:
- fabric:/data
volumes:
fabric: {}

View File

@@ -1,4 +1,4 @@
version: "3.7"
version: "3.8"
services:
mc:

View File

@@ -1,4 +1,4 @@
version: "3.7"
version: "3.8"
services:
mc:

View File

@@ -1,4 +1,4 @@
version: '3.7'
version: '3.8'
services:
mc:

View File

@@ -1,4 +1,4 @@
version: '3'
version: '3.8'
services:
mc:

View File

@@ -1,4 +1,4 @@
version: "3"
version: "3.8"
services:
mc:

View File

@@ -0,0 +1,17 @@
version: "3"
services:
mc:
# Only using IMAGE variable to allow for local testing
image: ${IMAGE:-itzg/minecraft-server}
ports:
- 25565:25565
environment:
EULA: "TRUE"
TYPE: SPIGOT
SPIGET_RESOURCES: 9089,34315,3836
volumes:
- data:/data
volumes:
data: {}

View File

@@ -1,4 +1,4 @@
version: '3'
version: '3.8'
# Forge with Sponge API support. THIS REQUIRES DOWNLOADING SPONGEFORGE.
# Place the SpongeForge jar file in /data/mods. Other Forge mods go here as well.
# Place Sponge mods in /data/mods/plugins. Yes, this is a directory inside the Forge mod directory. Do NOT use /data/plugins.

View File

@@ -1,4 +1,4 @@
version: "3.7"
version: "3.8"
services:
mc:

View File

@@ -1,3 +1,3 @@
Place server [modpacks downloaded from CurseForge](https://www.curseforge.com/minecraft/modpacks) in this directory.
The example [`docker-compose-curseforge.yml`](../docker-compose-curseforge.yml) references a modpack downloaded from <https://www.curseforge.com/minecraft/modpacks/skyfactory-4/files/2787018>.
The example [`docker-compose-curseforge.yml`](../docker-compose-curseforge.yml) references a modpack downloaded from <https://www.curseforge.com/minecraft/modpacks/skyfactory-4/files/3012800>.

View File

@@ -160,16 +160,20 @@ case "${TYPE^^}" in
YATOPIA)
exec ${SCRIPTS:-/}start-deployYatopia "$@"
;;
AIRPLANE)
AIRPLANE)
exec ${SCRIPTS:-/}start-deployAirplane "$@"
;;
CANYON)
exec ${SCRIPTS:-/}start-deployCanyon "$@"
;;
*)
log "Invalid type: '$TYPE'"
log "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FTBA (multiarch-only),"
log " CURSE_INSTANCE, CURSEFORGE, SPONGEVANILLA, TUINITY, PURPUR"
log " CUSTOM, MAGMA, MOHIST, CATSERVER, YATOPIA, AIRPLANE"
log " CUSTOM, MAGMA, MOHIST, CATSERVER, YATOPIA, AIRPLANE, CANYON"
exit 1
;;

View File

@@ -5,22 +5,35 @@ IFS=$'\n\t'
. ${SCRIPTS:-/}start-utils
isDebugging && set -x
JAVA_VER=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1)
if [ "${JAVA_VER}" != "8" ] && [ "${JAVA_VER}" != "11" ]; then
log "ERROR: Airplane server type only supports Java versions 8 and 11"
if [ "${VERSION}" != "LATEST" ] && [ "${VERSION}" != "1.16" ] && [ "${VERSION}" != "1.17" ] && [ "${VERSION}" != "PURPUR" ] && [ "${VERSION}" != "PURPUR-1.16" ] ; then
log "ERROR: Airplane server type only supports VERSION=LATEST, VERSION=1.17, VERSION=1.16, VERSION=PURPUR or VERSION=PURPUR-1.16. Note that these are branches, not #.#.# versions."
exit 1
fi
if [ "${VERSION}" != "LATEST" ]; then
log "ERROR: Airplane server type only supports VERSION=LATEST"
exit 1
: ${AIRPLANE_BUILD:=lastSuccessfulBuild}
if [ "${VERSION}" = "LATEST" ] || [ "${VERSION}" = "1.17" ]; then
AIRPLANE_BRANCH="1.17"
fi
export SERVER=airplane-${VANILLA_VERSION}-jdk${JAVA_VER}.jar
if [ "${VERSION}" = "1.16" ]; then
AIRPLANE_BRANCH="1.16"
fi
if [ ! -f "$SERVER" ] || isTrue "$FORCE_REDOWNLOAD"; then
downloadUrl="https://dl.airplane.gg/latest/Airplane-JDK${JAVA_VER}/launcher-airplane.jar"
if [ "${VERSION}" = "PURPUR" ]; then
AIRPLANE_BRANCH="Purpur-1.17"
fi
if [ "${VERSION}" = "PURPUR-1.16" ]; then
AIRPLANE_BRANCH="Purpur-1.16"
fi
log "Using Airplane-${AIRPLANE_BRANCH} branch"
export SERVER=airplane-${AIRPLANE_BRANCH}-${AIRPLANE_BUILD}.jar
if [ ! -f "$SERVER" ] || isTrue "${FORCE_REDOWNLOAD:-false}"; then
downloadUrl="https://ci.tivy.ca/job/Airplane-${AIRPLANE_BRANCH}/${AIRPLANE_BUILD}/artifact/launcher-airplane.jar"
log "Downloading Airplane from $downloadUrl ..."
curl -fsSL -o "$SERVER" "$downloadUrl"
if [ ! -f "$SERVER" ]; then

View File

@@ -64,7 +64,11 @@ function downloadSpigot {
fi
if [[ -z $downloadUrl ]]; then
downloadUrl="https://cdn.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VANILLA_VERSION}.jar"
if versionLessThan 1.16.5; then
downloadUrl="https://cdn.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VANILLA_VERSION}.jar"
else
downloadUrl="https://download.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VANILLA_VERSION}.jar"
fi
fi
setServerVar

View File

@@ -60,8 +60,8 @@ if ! isTrue ${USE_MODPACK_START_SCRIPT:-true}; then
mkdir -p ${FTB_BASE_DIR}
unzip -o "${FTB_SERVER_MOD}" -d ${FTB_BASE_DIR} | awk '{printf "."} END {print ""}'
SERVER=$(find ${FTB_BASE_DIR} -type f -not -name "forge*installer.jar" -name "forge*.jar")
if [[ -z "$SERVER" ]]; then
serverJar=$(find ${FTB_BASE_DIR} -type f \( -path "*/libraries/*" -o -path "*/mods/*" \) -prune -o -name "forge*.jar" -not -name "forge*installer.jar" -print)
if [[ -z "$serverJar" ]]; then
if [ -f "${FTB_BASE_DIR}/settings.cfg" ]; then
loadForgeVars "${FTB_BASE_DIR}/settings.cfg"
@@ -85,19 +85,19 @@ if ! isTrue ${USE_MODPACK_START_SCRIPT:-true}; then
fi
log "Installing forge server"
(cd $(dirname "${forgeInstallerJar}"); java -jar $(basename "${forgeInstallerJar}") --installServer)
dirOfInstaller=$(dirname "${forgeInstallerJar}")
(cd "${dirOfInstaller}"; java -jar $(basename "${forgeInstallerJar}") --installServer)
fi
echo "${FTB_SERVER_MOD}" > $installMarker
SERVER=$(find ${FTB_BASE_DIR} -type f -not -name "forge*installer.jar" -name "forge*.jar")
fi
export SERVER=$(find ${FTB_BASE_DIR} -type f \( -path "/libraries/*" -o -path "/mods/*" \) -prune -o -name "forge*.jar" -not -name "forge*installer.jar" -maxdepth 2 -print)
if [[ -z "${SERVER}" || ! -f "${SERVER}" ]]; then
log "ERROR unable to locate installed forge server jar"
isDebugging && find ${FTB_BASE_DIR} -name "forge*.jar"
exit 2
fi
export SERVER
export FTB_DIR=$(dirname "${SERVER}")
@@ -110,6 +110,7 @@ entryScriptExpr="
-o -name ServerStartLinux.sh
-o -name LaunchServer.sh
-o -name server-start.sh
-o -name start-server.sh
-o -name startserver.sh
-o -name StartServer.sh
"
@@ -184,7 +185,7 @@ if [[ $(find ${FTB_BASE_DIR} $entryScriptExpr | wc -l) = 0 ]]; then
# Allow up to 2 levels since some modpacks have a top-level directory named
# for the modpack
forgeJar=$(find ${FTB_BASE_DIR} -maxdepth 2 -name 'forge*.jar' -a -not -name 'forge*installer')
forgeJar=$(find ${FTB_BASE_DIR} -type f \( -path "/libraries/*" -o -path "/mods/*" \) -prune -o -name "forge*.jar" -not -name "forge*installer.jar" -maxdepth 2 -print)
if [[ "$forgeJar" ]]; then
export FTB_BASE_DIR=$(dirname "${forgeJar}")
log "No entry script found, so building one for ${forgeJar}"

54
start-deployCanyon Normal file
View File

@@ -0,0 +1,54 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
. ${SCRIPTS:-/}start-utils
isDebugging && set -x
: ${CANYON_BUILD:=lastSuccessfulBuild}
JAVA_VER=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1)
if [ "${JAVA_VER}" != "8" ]; then
log "ERROR: Canyon server type only supports Java version 8"
exit 1
fi
if [ "${VERSION}" != "b1.7.3" ]; then
log "ERROR: Canyon server type only supports VERSION=b1.7.3"
exit 1
fi
canyonJob="https://ci.velocitypowered.com/job/Canyon"
buildRelPath=$(
curl -fsSL "${canyonJob}/${CANYON_BUILD}/api/json" |
jq -r '.artifacts[0].relativePath'
)
buildNumber=$(
curl -fsSL "${canyonJob}/${CANYON_BUILD}/api/json" |
jq -r '.number'
)
baseName=$(basename "${buildRelPath}")
# Add build tag to non-tagged builds for version detection
if [ ${baseName%.*} = 'canyon-server' ]; then
export SERVER=${baseName%.*}_build${buildNumber}.jar
else
export SERVER="${baseName}"
fi
if [ ! -f "$SERVER" ]; then
downloadUrl="${canyonJob}/${CANYON_BUILD}/artifact/${buildRelPath}"
log "Downloading Canyon build ${buildNumber} from $downloadUrl ..."
curl -fsSL -o "$SERVER" "$downloadUrl"
if [ ! -f "$SERVER" ]; then
log "ERROR: failed to download from $downloadUrl (status=$?)"
exit 3
fi
fi
# Normalize on Spigot for later operations
export TYPE=SPIGOT
export SKIP_LOG4J_CONFIG=true
exec ${SCRIPTS:-/}start-spiget "$@"

View File

@@ -52,12 +52,14 @@ fi
isDebugging && cat version.json
forgeVersion=$(jq -r '.targets|unique[] | select(.name == "forge") | .version' version.json)
fabricVersion=$(jq -r '.targets|unique[] | select(.name == "fabric") | .version' version.json)
mcVersion=$(jq -r '.targets|unique[] | select(.name == "minecraft") | .version' version.json)
variants=(
forge-${mcVersion}-${forgeVersion}.jar
forge-${mcVersion}-${forgeVersion}-universal.jar
forge-${mcVersion}-${forgeVersion}-${mcVersion}-universal.jar
fabric-${mcVersion}-${fabricVersion}-server-launch.jar
)
for f in ${variants[@]}; do
if [ -f $f ]; then
@@ -66,7 +68,7 @@ for f in ${variants[@]}; do
fi
done
if ! [ -v SERVER ]; then
log "ERROR unable to locate the installed forge server jar"
log "ERROR unable to locate the installed FTB server jar"
ls *.jar
exit 2
fi

View File

@@ -3,54 +3,43 @@ set -eu
. ${SCRIPTS:-/}start-utils
requireVar VANILLA_VERSION
export TYPE=FABRIC
export SERVER=fabric-server-${VANILLA_VERSION}.jar
FABRIC_INSTALLER=${FABRIC_INSTALLER:-}
FABRIC_INSTALLER_URL=${FABRIC_INSTALLER_URL:-}
FABRIC_INSTALLER_VERSION=${FABRIC_INSTALLER_VERSION:-${FABRICVERSION:-LATEST}}
if [[ -z $FABRIC_INSTALLER && -z $FABRIC_INSTALLER_URL ]]; then
log "Checking Fabric version information."
case $FABRIC_INSTALLER_VERSION in
LATEST)
isDebugging && set -x
if [[ ! -e ${SERVER} ]]; then
: ${FABRIC_INSTALLER:=}
: ${FABRIC_INSTALLER_URL:=}
: ${FABRIC_INSTALLER_VERSION:=${FABRICVERSION:-LATEST}}
if [[ -z $FABRIC_INSTALLER && -z $FABRIC_INSTALLER_URL ]]; then
log "Checking Fabric version information."
if [[ ${FABRIC_INSTALLER_VERSION^^} = LATEST ]]; then
FABRIC_INSTALLER_VERSION=$(maven-metadata-release https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml)
;;
esac
fi
FABRIC_INSTALLER="/tmp/fabric-installer-${FABRIC_INSTALLER_VERSION}.jar"
markerVersion=$FABRIC_INSTALLER_VERSION
FABRIC_INSTALLER="fabric-installer-${FABRIC_INSTALLER_VERSION}.jar"
FABRIC_INSTALLER_URL="https://maven.fabricmc.net/net/fabricmc/fabric-installer/${FABRIC_INSTALLER_VERSION}/fabric-installer-${FABRIC_INSTALLER_VERSION}.jar"
elif [[ -z $FABRIC_INSTALLER ]]; then
FABRIC_INSTALLER="fabric-installer.jar"
elif [[ ! -e $FABRIC_INSTALLER ]]; then
log "ERROR: the given Fabric installer doesn't exist : $FABRIC_INSTALLER"
exit 2
fi
elif [[ -z $FABRIC_INSTALLER ]]; then
FABRIC_INSTALLER="/tmp/fabric-installer.jar"
markerVersion=custom
elif [[ ! -e $FABRIC_INSTALLER ]]; then
log "ERROR: the given Fabric installer doesn't exist : $FABRIC_INSTALLER"
exit 2
fi
installMarker="/data/.fabric-installed-${VANILLA_VERSION}-${markerVersion}"
debug Checking for installMarker ${installMarker}
if [[ ! -e $installMarker ]]; then
if [[ ! -e $FABRIC_INSTALLER ]]; then
if [[ -z $FABRIC_INSTALLER_URL ]]; then
log "Downloading installer version $FABRIC_INSTALLER_VERSION"
downloadUrl="https://maven.fabricmc.net/net/fabricmc/fabric-installer/${FABRIC_INSTALLER_VERSION}/fabric-installer-${FABRIC_INSTALLER_VERSION}.jar"
log "...trying $downloadUrl"
curl -o $FABRIC_INSTALLER -fsSL $downloadUrl
else
log "Downloading $FABRIC_INSTALLER_URL ..."
if ! curl -o $FABRIC_INSTALLER -fsSL $FABRIC_INSTALLER_URL; then
log "Failed to download from given location $FABRIC_INSTALLER_URL"
exit 2
fi
log "Downloading $FABRIC_INSTALLER_URL ..."
if ! curl -o $FABRIC_INSTALLER -fsSL $FABRIC_INSTALLER_URL; then
log "Failed to download from given location $FABRIC_INSTALLER_URL"
exit 2
fi
fi
if isDebugging; then
debug "Installing Fabric ${VANILLA_VERSION} using $FABRIC_INSTALLER"
else
log "Installing Fabric using $FABRIC_INSTALLER"
fi
log "Installing Fabric ${VANILLA_VERSION} using $FABRIC_INSTALLER"
tries=3
set +e
while ((--tries >= 0)); do
@@ -67,13 +56,9 @@ if [[ ! -e $installMarker ]]; then
log "Fabric failed to install after several tries." >&2
exit 10
fi
export SERVER=fabric-server-launch.jar
log "Using server $SERVER"
echo $SERVER > $installMarker
else
export SERVER=$(< $installMarker)
mv fabric-server-launch.jar ${SERVER}
fi
# Contineut to Final Setup
# Continue to Final Setup
exec ${SCRIPTS:-/}start-finalSetupWorld $@

View File

@@ -68,7 +68,7 @@ if [ ! -e $installMarker ]; then
log "Unable to compute URL for $normForgeVersion"
exit 2
fi
downloadUrl=http://files.minecraftforge.net/maven/net/minecraftforge/forge/$fn
downloadUrl=https://maven.minecraftforge.net/net/minecraftforge/forge/$fn
log "...trying $downloadUrl"
if curl -o $FORGE_INSTALLER -fsSL $downloadUrl; then
break

View File

@@ -8,12 +8,12 @@ isDebugging && set -x
requireVar VANILLA_VERSION
: ${MOHIST_BUILD:=lastSuccessfulBuild}
mohistJobs=https://ci.codemc.io/job/Mohist-Community/job/
mohistJobs=https://ci.codemc.io/job/MohistMC/job/
mohistJob=${mohistJobs}Mohist-${VANILLA_VERSION}/
if ! curl -X HEAD -o /dev/null -fsSL "${mohistJob}"; then
log "ERROR: mohist builds do not exist for ${VANILLA_VERSION}"
log " check https://ci.codemc.io/job/Mohist-Community/ for available versions"
log " check https://ci.codemc.io/job/MohistMC/ for available versions"
log " and set VERSION accordingly"
exit 1
fi
@@ -26,7 +26,7 @@ buildRelPath=$(
baseName=$(basename "${buildRelPath}")
if [[ ${baseName} != *-server.jar* ]]; then
log "ERROR: mohist build for ${VANILLA_VERSION} is not a valid server jar, found ${baseName}"
log " check https://ci.codemc.io/job/Mohist-Community/ for available versions"
log " check https://ci.codemc.io/job/MohistMC/ for available versions"
log " and set VERSION accordingly"
exit 1
fi

View File

@@ -10,7 +10,7 @@ isDebugging && set -x
: ${FORCE_REDOWNLOAD:=false}
if [[ ${PURPUR_BUILD} == LATEST ]]; then
PURPUR_BUILD=$(curl -fsSL "https://purpur.pl3x.net/api/v1/purpur/${VANILLA_VERSION}" |
PURPUR_BUILD=$(curl -fsSL "https://api.pl3x.net/v2/purpur/${VANILLA_VERSION}" |
jq -r '.builds.latest' || echo "")
if [[ -z ${PURPUR_BUILD} ]]; then
log "ERROR: Failed to locate a Purpur build for ${VANILLA_VERSION}."
@@ -22,7 +22,7 @@ fi
export SERVER="purpur-${VANILLA_VERSION}-${PURPUR_BUILD}.jar"
if [ ! -f "$SERVER" ] || isTrue "$FORCE_REDOWNLOAD"; then
downloadUrl="https://purpur.pl3x.net/api/v1/purpur/${VANILLA_VERSION}/${PURPUR_BUILD}/download"
downloadUrl="https://api.pl3x.net/v2/purpur/${VANILLA_VERSION}/${PURPUR_BUILD}/download"
log "Downloading Purpur from $downloadUrl ..."
if ! curl -fsSL -o "$SERVER" "$downloadUrl"; then
log "ERROR: failed to download from $downloadUrl (status=$?)"

View File

@@ -3,16 +3,16 @@
. ${SCRIPTS:-/}start-utils
if [ "${VERSION}" != "LATEST" ]; then
log "ERROR: Tunity server type only supports VERSION=LATEST"
log "ERROR: Tuinity server type only supports VERSION=LATEST"
exit 1
fi
: ${TUNITY_BUILD:=lastSuccessfulBuild}
export SERVER=tunity-${VANILLA_VERSION}-${TUNITY_BUILD}.jar
: ${TUINITY_BUILD:=lastSuccessfulBuild}
export SERVER=tuinity-${VANILLA_VERSION}-${TUINITY_BUILD}.jar
if [ ! -f "$SERVER" ] || [ -n "$FORCE_REDOWNLOAD" ]; then
downloadUrl="https://ci.codemc.io/job/Spottedleaf/job/Tuinity/${TUNITY_BUILD}/artifact/tuinity-paperclip.jar"
log "Downloading Tunity (build $TUNITY_BUILD) from $downloadUrl ..."
downloadUrl="https://ci.codemc.io/job/Spottedleaf/job/Tuinity/${TUINITY_BUILD}/artifact/tuinity-paperclip.jar"
log "Downloading Tuinity (build $TUINITY_BUILD) from $downloadUrl ..."
curl -fsSL -o "$SERVER" "$downloadUrl"
if [ ! -f "$SERVER" ]; then
log "ERROR: failed to download from $downloadUrl (status=$?)"

View File

@@ -6,7 +6,7 @@ IFS=$'\n\t'
isDebugging && set -x
: ${VANILLA_VERSION:?}
: ${RELEASE:=stable}
: ${RELEASE:=latest}
: ${FORCE_REDOWNLOAD:=false}
requireEnum RELEASE stable latest

View File

@@ -36,24 +36,28 @@ if [[ "$MODPACK" ]]; then
log "ERROR: failed to download from $downloadUrl"
exit 2
fi
if [ "$TYPE" = "SPIGOT" ]; then
mkdir -p /data/plugins
if ! unzip -o -d /data/plugins /tmp/modpack.zip; then
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
else
mkdir -p /data/mods
if ! unzip -o -d /data/mods /tmp/modpack.zip; then
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
elif [[ "$MODPACK" =~ .*\.zip ]]; then
if ! cp $MODPACK /tmp/modpack.zip; then
log "ERROR: failed to copy from $MODPACK"
exit 2
fi
rm -f /tmp/modpack.zip
else
log "ERROR Invalid URL given for MODPACK: $MODPACK"
log "ERROR Invalid URL or Path given for MODPACK: $MODPACK"
exit 1
fi
if [ "$TYPE" = "SPIGOT" ]; then
mkdir -p /data/plugins
if ! unzip -o -d /data/plugins /tmp/modpack.zip; then
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
else
mkdir -p /data/mods
if ! unzip -o -d /data/mods /tmp/modpack.zip; then
log "ERROR: failed to unzip the modpack from $downloadUrl"
fi
fi
rm -f /tmp/modpack.zip
fi
# If supplied with a URL for a plugin download it.
@@ -87,8 +91,18 @@ if [[ "$MODS" ]]; then
exit 2
fi
fi
elif [[ -f "$i" && "$i" =~ .*\.jar ]]; then
log "Copying plugin located at $i ..."
out_file=$(basename "$i")
if ! cp "$i" "${out_dir}/$out_file"; then
log "ERROR: failed to copy from $i into $out_dir"
exit 2
fi
elif [[ -d "$i" ]]; then
log "Copying plugin jars from $i ..."
cp "$i"/*.jar "${out_dir}"
else
log "ERROR Invalid URL given in MODS: $i"
log "ERROR Invalid URL or path given in MODS: $i"
exit 2
fi
done

View File

@@ -25,16 +25,16 @@ fi
if [ -d /mods ]; then
log "Copying any mods over..."
mkdir -p $COPY_MODS_DEST
rsync -a --out-format="update:%f:Last Modified %M" "${rsyncArgs[@]}" --prune-empty-dirs --update /mods/ $COPY_MODS_DEST
mkdir -p "${COPY_MODS_DEST}"
rsync -a --out-format="update:%f:Last Modified %M" "${rsyncArgs[@]}" --prune-empty-dirs --update /mods/ "${COPY_MODS_DEST}"
fi
: ${COPY_CONFIG_DEST:="/data/config"}
if [ -d /config ]; then
log "Copying any configs from /config to $COPY_CONFIG_DEST"
mkdir -p $COPY_CONFIG_DEST
rsync -a --out-format="update:%f:Last Modified %M" "${rsyncArgs[@]}" --prune-empty-dirs --update /config/ $COPY_CONFIG_DEST
log "Copying any configs from /config to ${COPY_CONFIG_DEST}"
mkdir -p "${COPY_CONFIG_DEST}"
rsync -a --out-format="update:%f:Last Modified %M" "${rsyncArgs[@]}" --prune-empty-dirs --update /config/ "${COPY_CONFIG_DEST}"
fi
exec ${SCRIPTS:-/}start-finalSetupServerProperties $@

View File

@@ -19,7 +19,7 @@ function setServerProp {
sed -i "/^${prop}\s*=/ c ${prop}=${var//\\/\\\\}" "$SERVER_PROPERTIES"
else
log "Adding ${prop} with '${var}' in ${SERVER_PROPERTIES}"
echo "${prop}=${var//\\/\\\\}" >> "$SERVER_PROPERTIES"
echo "${prop}=${var}" >> "$SERVER_PROPERTIES"
fi
else
isDebugging && log "Skip setting ${prop}"
@@ -27,7 +27,7 @@ function setServerProp {
}
function customizeServerProps {
if [ -n "$WHITELIST" ]; then
if [ -n "$WHITELIST" ] || isTrue ${ENABLE_WHITELIST:-false}; then
log "Creating whitelist"
setServerProp "whitelist" "true"
setServerProp "white-list" "true"

View File

@@ -212,6 +212,11 @@ EOF
"${FTB_SERVER_START}"
)
if isTrue ${SETUP_ONLY:=false}; then
echo "SETUP_ONLY: ${finalArgs[@]}"
exit
fi
if isTrue ${DEBUG_EXEC}; then
set -x
fi
@@ -236,6 +241,11 @@ else
"$@" $EXTRA_ARGS
)
if isTrue ${SETUP_ONLY:=false}; then
echo "SETUP_ONLY: java ${finalArgs[@]}"
exit
fi
if isTrue ${DEBUG_EXEC}; then
set -x
fi
@@ -246,3 +256,4 @@ else
exec mc-server-runner ${bootstrapArgs} ${mcServerRunnerArgs} java "${finalArgs[@]}"
fi
fi

View File

@@ -26,21 +26,28 @@ getResourceFromSpiget() {
log "Downloading resource ${resource} ..."
tmpfile="/tmp/${resource}.zip"
url="https://api.spiget.org/v2/resources/${resource}/download"
if ! curl -o "${tmpfile}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${url}"; then
log "ERROR failed to download resource '${resource}' from ${url}"
exit 2
fi
mkdir -p /data/plugins
if containsJars "${tmpfile}"; then
log "Extracting contents of resource ${resource} into plugins"
unzip -o -q -d /data/plugins "${tmpfile}"
rm "${tmpfile}"
if [ -f /data/plugins/.${resource} ]; then
log "Resource '${resource}' already downloaded"
else
log "Moving resource ${resource} into plugins"
mv "${tmpfile}" "/data/plugins/${resource}.jar"
tmpfile="/tmp/${resource}.zip"
url="https://api.spiget.org/v2/resources/${resource}/download"
if ! curl -o "${tmpfile}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${url}"; then
log "ERROR failed to download resource '${resource}' from ${url}"
exit 2
fi
if containsJars "${tmpfile}"; then
log "Extracting contents of resource ${resource} into plugins"
unzip -o -q -d /data/plugins "${tmpfile}"
touch "/data/plugins/.${resource}"
rm "${tmpfile}"
else
log "Moving resource ${resource} into plugins"
mv "${tmpfile}" "/data/plugins/${resource}.jar"
touch "/data/plugins/.${resource}"
fi
fi
}

View File

@@ -177,6 +177,6 @@ eula=${EULA,,}
function removeOldMods {
if [ -d "$1" ]; then
find "$1" -mindepth 1 -maxdepth ${REMOVE_OLD_MODS_DEPTH:-16} -wholename "${REMOVE_OLD_MODS_INCLUDE:-*}" -not -wholename "${REMOVE_OLD_MODS_EXCLUDE}" -delete
find "$1" -mindepth 1 -maxdepth ${REMOVE_OLD_MODS_DEPTH:-16} -wholename "${REMOVE_OLD_MODS_INCLUDE:-*}" -not -wholename "${REMOVE_OLD_MODS_EXCLUDE:-}" -delete
fi
}

View File

@@ -10,6 +10,9 @@ services:
restart: "no"
build:
context: ..
args:
TARGETOS: linux
TARGETARCH: amd64
cache_from:
- itzg/minecraft-server:latest
environment: