134 lines
6.1 KiB
Markdown
134 lines
6.1 KiB
Markdown
# docker-allthemods10
|
|
|
|
A Docker image that runs an **[All the Mods 10](https://www.curseforge.com/minecraft/modpacks/all-the-mods-10)** (ATM10) dedicated Minecraft server on [NeoForge](https://neoforged.net/).
|
|
|
|
No Minecraft or modpack files are shipped in the image. On first start the
|
|
container downloads the pinned ATM10 server files from CurseForge and runs the
|
|
NeoForge installer; subsequent starts boot the already-installed server. The
|
|
first run can take a while as the installer completes — watch the logs.
|
|
|
|
- **Modpack:** All the Mods 10, server version `5.5`
|
|
- **Loader:** NeoForge `21.1.219` (Minecraft 1.21.1)
|
|
- **Base image:** `eclipse-temurin:21-jdk`
|
|
|
|
## Requirements
|
|
|
|
- Docker (or any OCI runtime / Kubernetes — see [`k8s_example.md`](k8s_example.md))
|
|
- A persistent volume mounted at `/data`
|
|
- TCP port `25565` published
|
|
- `EULA=true` — you must accept the [Minecraft EULA](https://aka.ms/MinecraftEULA) to run a server
|
|
|
|
## Quick start
|
|
|
|
```sh
|
|
# Build the image
|
|
docker build -t allthemods10 .
|
|
|
|
# Run it
|
|
docker run -d \
|
|
--name atm10 \
|
|
-p 25565:25565 \
|
|
-v atm10-data:/data \
|
|
-e EULA=true \
|
|
-e MOTD="All the Mods 10 Server" \
|
|
-e MAX_PLAYERS=10 \
|
|
allthemods10
|
|
```
|
|
|
|
The server installs into the `/data` volume on first boot. Give it a few
|
|
minutes and watch `docker logs -f atm10` until the world is ready.
|
|
|
|
## Configuration
|
|
|
|
All configuration is via environment variables. Only `EULA` is required.
|
|
|
|
| Variable | Default | Description |
|
|
|--------------------|---------------------------------|-------------|
|
|
| `EULA` | `false` | Set to `true` to accept the Minecraft EULA. The server will not start otherwise. |
|
|
| `JVM_OPTS` | `-Xms2048m -Xmx4096m` (example) | JVM flags. Each space-separated token is appended to `user_jvm_args.txt`. |
|
|
| `MOTD` | `A Minecraft Server` | Server message of the day. |
|
|
| `MAX_PLAYERS` | `20` | Maximum concurrent players. |
|
|
| `ALLOW_FLIGHT` | `false` | `true`/`false` — allow flight. |
|
|
| `ONLINE_MODE` | `true` | `true`/`false` — authenticate players against Mojang. |
|
|
| `ENABLE_WHITELIST` | `false` | `true`/`false` — enforce the whitelist. |
|
|
| `WHITELIST_USERS` | _(empty)_ | Comma-separated Minecraft usernames to add to the whitelist. |
|
|
| `OP_USERS` | _(empty)_ | Comma-separated Minecraft usernames to grant operator (level 4). |
|
|
| `RCON_PASSWORD` | _(empty)_ | If set, enables RCON on the server and uses this password. |
|
|
| `RCON_PORT` | `25575` | RCON listen port (only used when `RCON_PASSWORD` is set). |
|
|
|
|
`WHITELIST_USERS` and `OP_USERS` are resolved to UUIDs at startup via
|
|
[playerdb.co](https://playerdb.co/) and merged into `whitelist.json` /
|
|
`ops.json` idempotently, so the same name is never added twice.
|
|
|
|
### Permissions
|
|
|
|
The server process runs as **uid `99` / gid `100`**, which matches the default
|
|
`nobody:users` ownership on [Unraid](https://unraid.net). On other hosts you may
|
|
need to `chown 99:100` the `/data` volume (the Kubernetes example does this with
|
|
an init container).
|
|
|
|
### Resetting / upgrading
|
|
|
|
If an install is incomplete or you want to force a re-download, delete the
|
|
`Server-Files-<version>.zip` file in `/data`; the next start will re-run the
|
|
install/upgrade.
|
|
|
|
## Optional: RCON order fulfillment daemon
|
|
|
|
`fulfillment.py` is an optional companion daemon that delivers in-game items via
|
|
RCON in response to confirmed orders from an external shop API (for example, a
|
|
donation/store integration). It is **disabled by default** and only starts when
|
|
all three of these are set:
|
|
|
|
- `SHOP_API_URL` — base URL of the shop API
|
|
- `SHOP_API_KEY` — API key
|
|
- `RCON_PASSWORD` — so the daemon can talk to the server over RCON
|
|
|
|
When enabled it polls the shop API for pending orders, delivers the configured
|
|
item kits to online players via RCON, and marks orders fulfilled. The item kits
|
|
(`ITEM_COMMANDS`) and poll/startup timing are defined at the top of
|
|
`fulfillment.py`; edit them to match your own shop and items. Additional
|
|
variables: `RCON_HOST` (default `127.0.0.1`), `FULFILLMENT_POLL_INTERVAL`
|
|
(default `30`s), `FULFILLMENT_STARTUP_DELAY` (default `90`s).
|
|
|
|
If you do not run a shop, you can ignore this file entirely — leave the three
|
|
variables unset and the server runs normally.
|
|
|
|
## Kubernetes
|
|
|
|
A community-contributed StatefulSet/Service manifest is in
|
|
[`k8s_example.md`](k8s_example.md). It is provided as a starting point and is
|
|
not an officially supported deployment method.
|
|
|
|
## Continuous integration
|
|
|
|
- `.github/workflows/docker-hub.yml` — builds and pushes the image to Docker Hub
|
|
on pushes to `main`/`develop` (expects `DOCKERHUB_USERNAME` / `DOCKERHUB_TOKEN`
|
|
secrets).
|
|
- `.github/workflows/update-mod.yml` — a daily job that checks CurseForge for a
|
|
newer server build and opens an update commit (expects a `CURSEFORGE_API_KEY`).
|
|
- `.forgejo/workflows/gitleaks.yml` — runs gitleaks secret scanning (Forgejo/Gitea
|
|
Actions; safe to delete if unused).
|
|
|
|
## Contributing
|
|
|
|
Issues and pull requests are welcome. Please keep the image lean — modpack
|
|
content is downloaded at runtime, not vendored — and avoid committing secrets
|
|
(a gitleaks workflow guards against this).
|
|
|
|
## License & attribution
|
|
|
|
This repository contains only the **Docker packaging** (entrypoint scripts and
|
|
CI workflows) for the All the Mods 10 server. It ships no Minecraft or modpack
|
|
files.
|
|
|
|
It is a fork of [`W3LFARe/docker-allthemods10`](https://github.com/W3LFARe/docker-allthemods10),
|
|
which in turn derives from [`Goobaroo/docker-allthemods9`](https://github.com/Goobaroo/docker-allthemods9).
|
|
The packaging is provided **as-is**, under the same terms as those upstream
|
|
projects.
|
|
|
|
Minecraft, NeoForge, the All the Mods 10 modpack, and the individual mods it
|
|
bundles are each subject to their own licenses and terms — including the
|
|
[Mojang/Minecraft EULA](https://aka.ms/MinecraftEULA) and the All the Mods
|
|
team's distribution terms. You are responsible for complying with them when you
|
|
run this server.
|