Compare commits

...

237 Commits

Author SHA1 Message Date
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
bb8c7756c7 Auto-merging via docker-versions-create 2021-04-28 16:54:26 -05:00
Krzysztof Zdulski
3261fbd7e9 Support FTP servers for file downloads (#850) 2021-04-28 16:44:39 -05:00
Geoff Bourne
7164d2b885 Fixed REMOVE_OLD_MODS when directories not present
#851
2021-04-28 16:29:47 -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
0c860ade12 Auto-merging via docker-versions-create 2021-04-26 08:22:56 -05:00
Geoff Bourne
cfb2739cd9 Normalized on TYPE=CURSEFORGE for server properties logic, etc
#843
2021-04-26 08:19:50 -05:00
Geoff Bourne
b1bb3f38f3 Allowed combining of REMOVE_OLD_MODS and SPIGET_RESOURCES with /plugins mount
#834
2021-04-24 14:06:31 -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
a99f7a494b Auto-merging via docker-versions-create 2021-04-24 13:44:29 -05:00
Geoff Bourne
65b3997e72 Fixed locating of CF modpack server jar when not using server script
#842
2021-04-24 13:41:18 -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
3e9308d315 Auto-merging via docker-versions-create 2021-04-23 21:05:23 -05:00
Geoff Bourne
5f48a4e5e5 Update FTB/CF handling of SERVER_PROPERTIES to allow spaces
#843
2021-04-23 21:01:50 -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
b731eaaffb Auto-merging via docker-versions-create 2021-04-18 13:32:03 -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
cbf9577a24 Auto-merging via docker-versions-create 2021-04-11 10:11:28 -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
9ccfca5061 Merged latest from master 2021-04-08 19:24:14 -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
9690832247 Auto-merging via docker-versions-create 2021-04-01 16:39:46 -05:00
Geoff Bourne
a5aec72837 Added git
#819
2021-04-01 16:29:06 -05:00
Geoff Bourne
60a68963a8 Added git
#819
2021-04-01 16:28:50 -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
6ae431b2f0 Merge branch 'master' into java15 2021-03-06 16:25:21 -06:00
Geoff Bourne
44769b6001 Shifted PATH-fix earlier in startup 2021-03-06 16:06:43 -06:00
Geoff Bourne
ebabfeb669 Shifted PATH-fix earlier in startup 2021-03-06 16:05:01 -06:00
Geoff Bourne
4186cfd91c Auto-merging via docker-versions-create 2021-02-27 20:56:01 -06:00
Geoff Bourne
457e9b53c7 Auto-merging via docker-versions-create 2021-02-27 20:55:30 -06:00
Geoff Bourne
21572d3547 Ensure FTBA version.json is readable
#784
2021-02-27 17:03:37 -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
b176be942d Fix PATH to include java when needed 2021-02-10 14:52:16 -06:00
Geoff Bourne
a2ab0d75ed Fix PATH to include java when needed 2021-02-10 14:46:09 -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
51c5902db0 Merge from master
CONFLICT (content): Merge conflict in start-configuration
2021-02-10 14:06:10 -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
090e624ebc Auto-merging via docker-versions-create
CONFLICT (content): Merge conflict in Dockerfile
2021-02-07 18:20:35 -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
c8dc751b82 Auto-merging docker-versions-create.sh
CONFLICT (content): Merge conflict in Dockerfile
2021-02-07 09:15:01 -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
7c862df92a Merge branch 'master' into java15 2021-02-06 15:12:45 -06:00
Geoff Bourne
e49c1c2f01 Merge branch 'master' into java15 2021-02-06 15:11:34 -06:00
Geoff Bourne
57390b02ca Merge branch 'master' into java15 2021-02-06 14:53:02 -06:00
Geoff Bourne
f06e9f5ede Merge branch 'master' into multiarch 2021-02-06 14:52:35 -06:00
Geoff Bourne
a698248dff ci: Based on adoptopenjdk:15-jre 2021-02-06 14:50:43 -06:00
Geoff Bourne
b8ef6eba3f Auto-merging via docker-versions-create 2021-01-29 21:07:29 -06:00
Geoff Bourne
8d3ca813ed Auto-merging via docker-versions-create 2021-01-29 21:07:00 -06:00
Geoff Bourne
cc5fe0859a Auto-merging via docker-versions-create 2021-01-12 17:28:33 -06:00
Geoff Bourne
e97a00e61d Auto-merging via docker-versions-create 2021-01-12 17:28:11 -06:00
Geoff Bourne
8f15aac6fc Merge branch 'multiarch' into multiarch-latest 2021-01-12 17:06:00 -06:00
Michael Kirsch
b519c43e16 fix multiarch autopause daemon (#722) 2021-01-12 16:05:12 -06:00
Geoff Bourne
84ce3b4b47 Merge branch 'multiarch' into multiarch-latest 2021-01-09 14:07:31 -06:00
Geoff Bourne
02c8393bc6 ci: Added opencontainers labels 2021-01-09 14:07:05 -06:00
Geoff Bourne
b07c43a32f Merge branch 'multiarch' into multiarch-latest 2021-01-09 12:31:20 -06:00
Geoff Bourne
9469291731 ci: Switched multiarch build caching to github actions 2021-01-09 12:28:27 -06:00
Geoff Bourne
ce1b337f7f Auto-merging via docker-versions-create 2021-01-09 11:25:38 -06:00
Geoff Bourne
c29baf446d Auto-merging via docker-versions-create 2021-01-09 11:24:53 -06:00
Geoff Bourne
ee8e1b9322 Merged latest from master 2021-01-06 22:16:40 -06:00
Geoff Bourne
f9b8db0715 Merged master 2021-01-06 22:14:46 -06:00
Geoff Bourne
20bd5c4c36 Merge branch 'multiarch' into multiarch-latest 2020-12-31 13:19:34 -06:00
ErstBlack
ffb50cfe28 Fixing AUTOPAUSE on Raspberry Pi 4s (#708)
* Replacing killall with pkill and ps -a to ps -ax

* Adding net-tools and removing -q from pkill

* Missed the resume.sh

* Christ there's a lot of ps calls

* Adding -x to health.sh, replacing killall with pkill in sudoers-mv, and replacing su-exec with gosu in knockd-config.cfg

Co-authored-by: sean.sullivan.ctr@progeny.net <sean.sullivan.ctr@progeny.net>
2020-12-31 13:15:44 -06:00
Geoff Bourne
de082d0fb2 Merge branch 'multiarch' into multiarch-latest 2020-12-28 11:44:41 -06:00
Geoff Bourne
51e6d5dfbd Added install of sudo
For #699
2020-12-28 11:42:54 -06:00
Geoff Bourne
3cc5cdbc06 Auto-merging via docker-versions-create 2020-12-27 22:08:29 -06:00
Geoff Bourne
842c69fd80 Auto-merging via docker-versions-create 2020-12-27 22:08:02 -06:00
Andrew Lambeth
c458823014 ignore duplicate entries in the targets array of version.json (#698) 2020-12-26 14:44:37 -06:00
Geoff Bourne
b69ec47b18 Auto-merging via docker-versions-create 2020-12-19 08:26:49 -06:00
Geoff Bourne
32abf1614f Auto-merging via docker-versions-create 2020-12-19 08:26:24 -06:00
Geoff Bourne
51fc8e824d Auto-merging via docker-versions-create 2020-12-15 14:00:33 -06:00
Geoff Bourne
a916cc8320 Auto-merging via docker-versions-create 2020-12-15 14:00:27 -06:00
Geoff Bourne
aff9031284 Merge branch 'multiarch' into multiarch-latest 2020-11-26 08:46:26 -06:00
Geoff Bourne
01130757d6 Reverting FTBA debug change 2020-11-26 08:45:51 -06:00
Geoff Bourne
397d080da2 Merge branch 'multiarch' into multiarch-latest 2020-11-25 21:36:48 -06:00
Geoff Bourne
f97b3bf82e Added error handling of FTB installer download
For #645
2020-11-25 21:36:22 -06:00
Geoff Bourne
cb5d052829 Merge branch 'multiarch' into multiarch-latest
# Conflicts:
#	.github/workflows/build-multiarch.yml
2020-11-25 16:09:23 -06:00
Geoff Bourne
b7bcd252d3 ci: Fixed tag extraction 2020-11-25 16:06:01 -06:00
Geoff Bourne
0908d21bed Merged from master 2020-11-25 16:01:42 -06:00
Geoff Bourne
aa43926da2 Merged from master 2020-11-25 15:59:43 -06:00
Marc Doughty
4d878985d4 Remove distro-provided JRE (#659)
We don't need Java 8 from Ubuntu, we have 15 from AdoptOpenJDK.
2020-11-03 06:33:19 -06:00
Geoff Bourne
34c45ec883 Switched to latest Docker buildx github action 2020-10-31 14:59:28 -05:00
Geoff Bourne
72d7d4a65e Switched to latest Docker buildx github action 2020-10-31 14:48:51 -05:00
Geoff Bourne
cb0add3b90 Added github action match for multiarch-latest branch 2020-10-31 13:38:44 -05:00
Marc Doughty
71a48ce10f Convert to AdoptOpenJDK (#658) 2020-10-31 13:36:47 -05:00
Geoff Bourne
9bacaa11d8 Auto-merging via docker-versions-create 2020-08-09 13:07:53 -05:00
Geoff Bourne
c7c4c7497a docs: Added test multiarch build instruction 2020-07-26 13:51:16 -05:00
Geoff Bourne
e442baab31 Added writing of eula file after FTBA modpack is installed (#550) 2020-07-26 13:50:57 -05:00
Geoff Bourne
8101c8b51c Merge branch 'master' into multiarch
Renamed to start-deployFTBA

# Conflicts:
#	start-configuration
#	start-deployCF
2020-07-26 13:47:17 -05:00
Geoff Bourne
eba1ef6ab9 Auto-merging via docker-versions-create
# Conflicts:
#	start-deployFTB
#	start-minecraftFinalSetup
2020-07-26 08:35:13 -05:00
Geoff Bourne
6462e1580c Removed improperly merged apk call 2020-07-18 19:29:49 -05:00
Geoff Bourne
8b5552bb62 Auto-merging via docker-versions-create 2020-07-18 18:41:10 -05:00
Geoff Bourne
3ca514f2b2 Auto-merging via docker-versions-create 2020-07-11 13:14:10 -05:00
Geoff Bourne
c07f899870 Auto-merging via docker-versions-create
# Conflicts:
#	start-deployFTB
2020-07-10 17:13:05 -05:00
Geoff Bourne
e527fd9551 Auto-merging via docker-versions-create 2020-07-04 14:58:40 -05:00
Geoff Bourne
047a477f7b Auto-merging via docker-versions-create 2020-06-20 15:45:29 -05:00
Geoff Bourne
78cb05adda ci: added multiarch tags to triggers 2020-06-19 15:03:29 -05:00
Geoff Bourne
8493252645 Auto-merging via docker-versions-create
# Conflicts:
#	Dockerfile
#	README.md
#	start
#	start-configuration
#	start-deployFTB
2020-06-19 15:01:28 -05:00
Geoff Bourne
aa42633ab2 Added support for FTB application modpacks via modpacks.ch
For #524
2020-05-31 18:18:54 -05:00
Geoff Bourne
9ec336283f Updated to support multiarch/BuiltKit builds 2020-05-21 20:48:54 -05:00
Geoff Bourne
bbdb2c9b36 Auto-merging via docker-versions-create 2020-05-20 08:15:50 -05:00
Geoff Bourne
48e09f42fc Changed base ubuntu to 18.04 2020-05-14 20:09:12 -05:00
Geoff Bourne
ec7d182d38 Avoid touch since rpi mounts default to noatime 2020-05-14 15:21:51 -05:00
Geoff Bourne
9c7c95cf4f Pinned Java version at 11 2020-05-03 11:51:56 -05:00
Geoff Bourne
e32ffd1819 Auto-merging via docker-versions-create 2020-05-02 09:34:58 -05:00
Geoff Bourne
095c6ad099 Auto-merging via docker-versions-create 2020-04-25 12:11:39 -05:00
Geoff Bourne
14342c9632 Auto-merging via docker-versions-create
# Conflicts:
#	Dockerfile
2020-04-17 21:32:03 -05:00
Geoff Bourne
f6df4d6694 Auto-merging via docker-versions-create
# Conflicts:
#	.circleci/config.yml
2020-04-11 08:56:29 -05:00
Geoff Bourne
0406e89c2a Auto-merging via docker-versions-create 2020-04-10 11:09:12 -05:00
Geoff Bourne
5ef21e1ddf Auto-merging via docker-versions-create 2020-04-03 13:31:53 -05:00
Geoff Bourne
414d5bd8ac Auto-merging via docker-versions-create 2020-04-03 13:29:03 -05:00
Geoff Bourne
15ccf03b28 Auto-merging via docker-versions-create 2020-04-02 17:47:52 -05:00
Geoff Bourne
828a48998f Auto-merging via docker-versions-create 2020-03-30 08:32:11 -05:00
Geoff Bourne
4b590e03ff Auto-merging via docker-versions-create 2020-03-26 20:54:25 -05:00
Geoff Bourne
0db8780ad9 Changed base image to arm32v7/adoptopenjdk 2020-03-25 21:05:16 -05:00
Geoff Bourne
5b744176df Merge remote-tracking branch 'origin/master' into multiarch 2020-03-25 20:08:47 -05:00
Geoff Bourne
20b15e0330 Merge remote-tracking branch 'origin/master' into multiarch
# Conflicts:
#	Dockerfile
2020-02-06 16:59:59 -06:00
Geoff Bourne
818539e3de Switched base image to adoptopenjdk (debian) 2020-02-05 21:33:08 -06:00
Geoff Bourne
f48741f65c Try BuildKit via regular setup_remote_docker 2020-02-05 08:21:52 -06:00
Geoff Bourne
e9e5af849f Use docker executor 2020-02-04 20:14:32 -06:00
Geoff Bourne
22d68f5c7c Enable use-remote-docker 2020-02-04 20:13:02 -06:00
Geoff Bourne
690598da60 Try BuildKit/multiarch support on CircleCI 2020-02-04 20:10:45 -06:00
41 changed files with 759 additions and 466 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,61 @@ 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:
runs-on: ubuntu-20.04
env:
CACHE_NAME: master
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
type=edge,branch=master
flavor: |
latest=false
- 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-${{ env.CACHE_NAME }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-
${{ runner.os }}-buildx-${{ env.CACHE_NAME }}-
${{ 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 +66,17 @@ jobs:
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2.5.0
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 }}
labels: ${{ steps.meta.outputs.labels }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

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

@@ -0,0 +1,20 @@
name: Generate README table of contents
on:
push:
branches:
- master
paths:
- README.md
jobs:
generate:
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: |
@@ -31,9 +29,11 @@ jobs:
needs:
- test
runs-on: ubuntu-20.04
env:
CACHE_NAME: master
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2.3.4
- name: Prepare
id: prep
@@ -59,12 +59,12 @@ jobs:
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-${{ env.CACHE_NAME }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-${{ steps.prep.outputs.cache_version }}-
${{ runner.os }}-buildx-${{ env.CACHE_NAME }}-
${{ runner.os }}-buildx-
- name: Login to DockerHub
@@ -75,7 +75,7 @@ jobs:
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2.5.0
with:
context: .
file: ./Dockerfile

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

11
BUILDING.md Normal file
View File

@@ -0,0 +1,11 @@
Ensure buildx/BuildKit support is enabled and run:
```shell script
docker buildx build --platform=linux/arm64 --platform=linux/arm/v7 --platform=linux/amd64 --tag itzg/minecraft-server:multiarch --push .
```
To build for local testing, use:
```shell script
docker buildx build --platform=linux/amd64 --tag mc-multiarch --load .
```

View File

@@ -1,29 +1,29 @@
FROM adoptopenjdk/openjdk11:alpine-jre
FROM adoptopenjdk:16-openj9
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
RUN apk add --no-cache -U \
openssl \
imagemagick \
lsof \
su-exec \
shadow \
bash \
curl iputils wget \
git \
jq \
mysql-client \
tzdata \
rsync \
nano \
sudo \
knock \
ttf-dejavu
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install -y \
imagemagick \
gosu \
sudo \
net-tools \
curl wget \
git \
jq \
dos2unix \
mysql-client \
tzdata \
rsync \
nano \
unzip \
knockd \
ttf-dejavu \
&& apt-get clean
RUN addgroup -g 1000 minecraft \
&& adduser -Ss /bin/false -u 1000 -G minecraft -h /home/minecraft minecraft \
&& mkdir -m 777 /data \
&& chown minecraft:minecraft /data /home/minecraft
RUN addgroup --gid 1000 minecraft \
&& adduser --system --shell /bin/false --uid 1000 --ingroup minecraft --home /data minecraft
COPY files/sudoers* /etc/sudoers.d
@@ -31,9 +31,9 @@ EXPOSE 25565 25575
# hook into docker BuildKit --platform support
# see https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
ARG TARGETOS=linux
ARG TARGETARCH=amd64
ARG TARGETVARIANT=""
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG EASY_ADD_VER=0.7.1
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
@@ -69,7 +69,7 @@ WORKDIR /data
STOPSIGNAL SIGTERM
ENV UID=1000 GID=1000 \
JVM_XX_OPTS="-XX:+UseG1GC" MEMORY="1G" \
MEMORY="1G" \
TYPE=VANILLA VERSION=LATEST \
ENABLE_RCON=true RCON_PORT=25575 RCON_PASSWORD=minecraft \
SERVER_PORT=25565 ONLINE_MODE=TRUE SERVER_NAME="Dedicated Server" \
@@ -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

697
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)
* [World Save Name](#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: Sun May 23 17:29:02 UTC 2021 -->
<!--te-->
## Looking for a Bedrock Dedicated Server
For Minecraft clients running on consoles, mobile, or native Windows, you'll need to
@@ -101,7 +212,7 @@ When attached in this way you can stop the server, edit the configuration under
With Docker Compose, setting up a host attached directory is even easier since relative paths can be configured. For example, with the following `docker-compose.yml` Docker will automatically create/attach the relative directory `minecraft-data` to the container.
```yaml
version: "3"
version: "3.8"
services:
mc:
@@ -163,15 +274,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 +322,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 +335,46 @@ 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.8"
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.
## 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 +382,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 +414,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 +436,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,7 +444,7 @@ 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.
@@ -331,7 +458,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 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".
@@ -344,7 +471,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 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 +484,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 +493,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 +505,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 +513,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 +641,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 +656,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 +681,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
@@ -987,62 +1019,6 @@ where the default is "world":
**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.
### Online mode
By default, server checks connecting players against Minecraft's account database. If you want to create an offline server or your server is not connected to the internet, you can disable the server to try connecting to minecraft.net to authenticate players with environment variable `ONLINE_MODE`, like this
@@ -1075,6 +1051,129 @@ Allows users to use flight on your server while in Survival mode, if they have a
## 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;
@@ -1239,9 +1338,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'
)

0
docs/.gitkeep Normal file
View File

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

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

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

@@ -5,15 +5,15 @@ current_uptime() {
}
java_running() {
[[ $( ps -a -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]]
[[ $( ps -ax -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]]
}
java_process_exists() {
[[ -n "$(ps -a -o comm | grep 'java')" ]]
[[ -n "$(ps -ax -o comm | grep 'java')" ]]
}
rcon_client_exists() {
[[ -n "$(ps -a -o comm | grep 'rcon-cli')" ]]
[[ -n "$(ps -ax -o comm | grep 'rcon-cli')" ]]
}
mc_server_listening() {

View File

@@ -3,10 +3,10 @@
[unpauseMCServer-server]
sequence = 25565
seq_timeout = 1
command = /sbin/su-exec minecraft:minecraft /autopause/resume.sh
command = /usr/sbin/gosu minecraft:minecraft /autopause/resume.sh
tcpflags = syn
[unpauseMCServer-rcon]
sequence = 25575
seq_timeout = 1
command = /sbin/su-exec minecraft:minecraft /autopause/resume.sh
command = /usr/sbin/gosu minecraft:minecraft /autopause/resume.sh
tcpflags = syn

View File

@@ -2,7 +2,7 @@
. /start-utils
if [[ $( ps -a -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]] ; then
if [[ $( ps -ax -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]] ; then
# save world
rcon-cli save-all >/dev/null

View File

@@ -2,7 +2,7 @@
. /start-utils
if [[ $( ps -a -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^T.*$ ]] ; then
if [[ $( ps -ax -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^T.*$ ]] ; then
logAutopauseAction "Knocked, resuming Java process"
pkill -CONT java
fi

View File

@@ -5,7 +5,7 @@
if isTrue "${DISABLE_HEALTHCHECK}"; then
echo "Healthcheck disabled"
exit 0
elif isTrue "${ENABLE_AUTOPAUSE}" && [[ "$( ps -a -o stat,comm | grep 'java' | awk '{ print $1 }')" =~ ^T.*$ ]]; then
elif isTrue "${ENABLE_AUTOPAUSE}" && [[ "$( ps -ax -o stat,comm | grep 'java' | awk '{ print $1 }')" =~ ^T.*$ ]]; then
echo "Java process suspended by Autopause function"
exit 0
else

2
start
View File

@@ -40,7 +40,7 @@ if ! isTrue "${SKIP_SUDO:-false}" && [ $(id -u) = 0 ]; then
echo 'hosts: files dns' > /etc/nsswitch.conf
fi
exec su-exec ${runAsUser}:${runAsGroup} ${SCRIPTS:-/}start-configuration $@
exec gosu ${runAsUser}:${runAsGroup} ${SCRIPTS:-/}start-configuration $@
else
exec ${SCRIPTS:-/}start-configuration $@
fi

View File

@@ -13,6 +13,8 @@ shopt -s nullglob
#umask 002
export HOME=/data
log "Running as uid=$(id -u) gid=$(id -g) with /data as '$(ls -lnd /data)'"
if [ ! -e /data/eula.txt ]; then
if ! isTrue "$EULA"; then
log ""
@@ -28,15 +30,6 @@ if [ ! -e /data/eula.txt ]; then
fi
log "Running as uid=$(id -u) gid=$(id -g) with /data as '$(ls -lnd /data)'"
if ! touch /data/.verify_access; then
log "ERROR: /data doesn't seem to be writable. Please make sure attached directory is writable by uid=$(id -u)"
exit 2
fi
rm /data/.verify_access || true
if [[ $PROXY ]]; then
export http_proxy="$PROXY"
export https_proxy="$PROXY"
@@ -118,6 +111,10 @@ case "${TYPE^^}" in
exec ${SCRIPTS:-/}start-deployFabric "$@"
;;
FTBA)
exec ${SCRIPTS:-/}start-deployFTBA "$@"
;;
FTB|CURSEFORGE)
log "**********************************************************************"
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
@@ -163,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

@@ -27,7 +27,7 @@ isDebugging && set -x
export FTB_BASE_DIR
legacyJavaFixerUrl=https://ftb.forgecdn.net/FTB2/maven/net/minecraftforge/lex/legacyjavafixer/1.0/legacyjavafixer-1.0.jar
export TYPE=FEED-THE-BEAST
export TYPE=CURSEFORGE
FTB_SERVER_MOD=${FTB_SERVER_MOD:-$CF_SERVER_MOD}
@@ -60,7 +60,7 @@ 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 ""}'
serverJar=$(find ${FTB_BASE_DIR} -path "*/libraries/*" -prune -type f -o -not -name "forge*installer.jar" -name "forge*.jar")
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
@@ -85,13 +85,14 @@ 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
fi
export SERVER=$(find ${FTB_BASE_DIR} -path "*/libraries/*" -prune -type f -o -not -name "forge*installer.jar" -name "forge*.jar")
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"
@@ -109,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
"
@@ -183,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 "$@"

75
start-deployFTBA Normal file
View File

@@ -0,0 +1,75 @@
#!/bin/bash
ftbInstallMarker=".ftb-installed"
. ${SCRIPTS:-/}start-utils
isDebugging && set -x
set -e
if ! [[ -v FTB_MODPACK_ID ]]; then
log "ERROR FTB_MODPACK_ID is required with TYPE=FTB"
exit 1
fi
if ! [[ ${FTB_MODPACK_ID} =~ [0-9]+ ]]; then
log "ERROR FTB_MODPACK_ID needs to be numeric"
exit 1
fi
if ! [[ -v FTB_MODPACK_VERSION_ID ]]; then
if ! FTB_MODPACK_VERSION_ID=$(curl -fsSL https://api.modpacks.ch/public/modpack/${FTB_MODPACK_ID} | jq -r '.versions | sort_by(.updated)[-1].id'); then
log "ERROR unable to resolve latest modpack version ID for modpack ${FTB_MODPACK_ID}"
exit 1
fi
elif ! [[ ${FTB_MODPACK_VERSION_ID} =~ [0-9]+ ]]; then
log "ERROR FTB_MODPACK_VERSION_ID needs to be numeric"
exit 1
fi
if ! [ -f "${ftbInstallMarker}" ] || [ $(cat "${ftbInstallMarker}") != "${FTB_MODPACK_ID}=${FTB_MODPACK_VERSION_ID}" ]; then
ftbInstaller=/data/ftb-installer
if ! [[ -f "${ftbInstaller}" ]]; then
log "Downloading FTB installer"
curl -fsSL https://api.modpacks.ch/public/modpack/1/1/server/linux -o "${ftbInstaller}"
chmod +x "${ftbInstaller}"
fi
rm -rf forge*jar mods config libraries defaultconfigs changelogs
log "Installing modpack ID ${FTB_MODPACK_ID}, version ID ${FTB_MODPACK_VERSION_ID}"
${ftbInstaller} ${FTB_MODPACK_ID} ${FTB_MODPACK_VERSION_ID} --noscript --auto
rm -f forge*installer.jar
echo "${FTB_MODPACK_ID}=${FTB_MODPACK_VERSION_ID}" > ${ftbInstallMarker}
writeEula
# some modpacks result in --w----r-- permissions
chmod a+r version.json
else
log "FTB modpack ID ${FTB_MODPACK_ID}, version ID ${FTB_MODPACK_VERSION_ID} is ready to go"
fi
isDebugging && cat version.json
forgeVersion=$(jq -r '.targets|unique[] | select(.name == "forge") | .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
)
for f in ${variants[@]}; do
if [ -f $f ]; then
export SERVER=$f
break
fi
done
if ! [ -v SERVER ]; then
log "ERROR unable to locate the installed forge server jar"
ls *.jar
exit 2
fi
# 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

@@ -11,21 +11,9 @@ fi
CURSE_URL_BASE=${CURSE_URL_BASE:-https://minecraft.curseforge.com/projects}
# Remove old mods/plugins
if isTrue ${REMOVE_OLD_MODS}; then
remove_mods_dest="/data/mods"
case ${TYPE} in
SPIGOT|BUKKIT|PAPER)
remove_mods_dest="/data/plugins"
;;
esac
# only try to remove existing mods dir
if [ -d "$remove_mods_dest" ]; then
log "Removing old mods in $remove_mods_dest..."
find $remove_mods_dest -mindepth 1 -maxdepth ${REMOVE_OLD_MODS_DEPTH:-16} -wholename "${REMOVE_OLD_MODS_INCLUDE:-*}" -not -wholename "${REMOVE_OLD_MODS_EXCLUDE}" -delete
else
log "Directory $remove_mods_dest does not exist; removing nothing."
fi
if isTrue ${REMOVE_OLD_MODS:-false}; then
removeOldMods /data/mods
removeOldMods /data/plugins
fi
# If supplied with a URL for a modpack (simple zip of jars), download it and unpack
@@ -37,35 +25,39 @@ if [[ "$MODPACK" ]]; then
downloadUrl=$(curl -Ls -o /dev/null -w %{effective_url} $MODPACK)
if ! [[ $downloadUrl == *.zip ]]; then
log "ERROR Invalid URL given for MODPACK: $downloadUrl resolved from $MODPACK"
log " Must be HTTP or HTTPS and a ZIP file"
log " Must be HTTP, HTTPS or FTP and a ZIP file"
exit 1
fi
fi
log "Downloading mod/plugin pack via HTTP"
log "Downloading mod/plugin pack"
log " from $downloadUrl ..."
if ! curl -sSL -o /tmp/modpack.zip "$downloadUrl"; 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.
@@ -99,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

@@ -181,8 +181,8 @@ function customizeServerProps {
}
# Deploy server.properties file
if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then
export SERVER_PROPERTIES=${FTB_DIR}/server.properties
if [[ ${TYPE} == "CURSEFORGE" ]]; then
export SERVER_PROPERTIES="${FTB_DIR}/server.properties"
log "detected FTB, changing properties path to ${SERVER_PROPERTIES}"
fi
@@ -214,7 +214,7 @@ fi
if isDebugging; then
log "DEBUG Dumping server.properties"
cat /data/server.properties
cat "${SERVER_PROPERTIES}"
fi
exec ${SCRIPTS:-/}start-finalSetupEnvVariables $@

View File

@@ -7,7 +7,7 @@ isDebugging && set -x
: ${LEVEL:=world}
export LEVEL
if [ $TYPE = "FEED-THE-BEAST" ]; then
if [ $TYPE = "CURSEFORGE" ]; then
worldDest=$FTB_DIR/$LEVEL
else
worldDest=/data/$LEVEL

View File

@@ -180,7 +180,7 @@ if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
exec mc-server-runner ${mcServerRunnerArgs} \
--cf-instance-file "${CURSE_INSTANCE_JSON}" \
java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar _SERVERJAR_ "$@" $EXTRA_ARGS
elif [[ ${TYPE} == "FEED-THE-BEAST" && "${SERVER}" ]]; then
elif [[ ${TYPE} == "CURSEFORGE" && "${SERVER}" ]]; then
copyFilesForCurseForge
cd "${FTB_DIR}"
@@ -189,7 +189,7 @@ elif [[ ${TYPE} == "FEED-THE-BEAST" && "${SERVER}" ]]; then
set -x
fi
exec mc-server-runner ${bootstrapArgs} ${mcServerRunnerArgs} java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar $(basename "${SERVER}") "$@" $EXTRA_ARGS
elif [[ ${TYPE} == "FEED-THE-BEAST" ]]; then
elif [[ ${TYPE} == "CURSEFORGE" ]]; then
mcServerRunnerArgs="${mcServerRunnerArgs} --shell bash"
copyFilesForCurseForge
@@ -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

@@ -16,7 +16,7 @@ containsJars() {
if [[ $line =~ $pat ]]; then
return 0
fi
done <<< $(unzip -l "$file")
done <<<$(unzip -l "$file")
return 1
}
@@ -46,10 +46,14 @@ getResourceFromSpiget() {
}
if [[ ${SPIGET_RESOURCES} ]]; then
if isTrue ${REMOVE_OLD_MODS:-false}; then
removeOldMods /data/plugins
REMOVE_OLD_MODS=false
fi
log "Getting plugins via Spiget"
IFS=',' read -r -a resources <<< "${SPIGET_RESOURCES}"
for resource in "${resources[@]}"
do
IFS=',' read -r -a resources <<<"${SPIGET_RESOURCES}"
for resource in "${resources[@]}"; do
getResourceFromSpiget "${resource}"
done
fi

View File

@@ -11,7 +11,7 @@ function join_by() {
function isURL() {
local value=$1
if [[ ${value:0:8} == "https://" || ${value:0:7} == "http://" ]]; then
if [[ ${value:0:8} == "https://" || ${value:0:7} == "http://" || ${value:0:6} == "ftp://" ]]; then
return 0
else
return 1
@@ -174,3 +174,9 @@ eula=${EULA,,}
exit 2
fi
}
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
fi
}

View File

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