- PHP 96.8%
- Blade 2.8%
- Python 0.3%
- JavaScript 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013JgGX8Te2UcvjAXUdAch7g |
||
| dist | ||
| ezservercreate | ||
| scripts | ||
| tests | ||
| .gitignore | ||
| CLAUDE.md | ||
| composer.json | ||
| composer.lock | ||
| HANDOFF.md | ||
| INSTRUCTIONS.TXT | ||
| phpunit.xml.dist | ||
| placeholder.txt | ||
| README.md | ||
| RED_TEAM_FINDINGS.MD | ||
| update.json | ||
EZ Server Create
A plugin for the Pelican game server panel that creates servers for a Minecraft network in one step and configures every proxy involved.
What it does
The network runs a Gate proxy in lite mode in front of several Velocity proxies, and each
Velocity proxy has Purpur servers behind it. Adding a server normally means creating it in
the panel and then editing Gate's config.yml, the proxy's velocity.toml and the new
server's own config files by hand. The plugin does all of that.
It adds a green plus button with small sparkles next to the regular create button on the admin server list. The page behind it has one tab per server type:
- Velocity creates a new proxy, binds it to a free port, turns on modern player info forwarding (needed by the Purpur servers behind it) and adds a Gate route for its domains.
- Proxied Purpur creates a Purpur server behind an existing proxy, accepts the EULA, runs it once to generate its configs, sets up Velocity modern forwarding, registers it in the proxy and adds its domains to Gate. Domains are optional here: a server without domains (a minigame server, for example) gets no forced hosts and no Gate hosts, and players reach it only through the proxy.
- Proxied Limbo creates a PicoLimbo server behind an existing proxy, binds it to its port,
sets up modern forwarding with the proxy's secret in
server.tomland registers it in the proxy. Domains are optional and work as for Purpur servers. Limbo servers use the PicoLimbo egg's own image.
Every tab also chooses the node, the owner and the port; Velocity and Purpur also choose the docker image. The owner is the current user unless another user is selected; the owner of a Purpur or Limbo server can read the proxy's forwarding secret, so another owner must be allowed to update the proxy. The port defaults to the next free port in the configured range; a port that belongs to another server, is still used by a Gate route or proxy entry, or is requested by another creation in progress is refused. The docker image defaults to the egg image for the Java version the server needs; another egg image can be picked from the list, or any image typed in. New servers must run on the node of the Gate server, because Gate reaches them through that node's Docker bridge.
A Purpur server can be added to the proxy's try list. The page then shows the current try list with the new server highlighted in green, and the entries can be dragged into order. If someone edits the try list by hand before the server is registered, the hand-edited order is kept and the new server is placed next to the neighbours chosen on the page.
Proxied Purpur and Proxied Limbo servers are running when the creation finishes. Two boxes below the Create button control that, and both are ticked by default. "Restart proxy" restarts the proxy after the new server is registered, so the proxy loads the new entry; this disconnects every player on that proxy. When it is unticked, the plugin asks the proxy to reload its config instead. "Start server" starts the new server at the end. Both boxes keep the user's choice for later visits, in every browser.
Editing servers
The plugin remembers which servers it manages. In the admin server list, those servers get a green "EZ Edit" pencil next to Pelican's edit button. The EZ Edit page changes the name, owner, docker image, port, domains and, for Purpur and Limbo servers, the external ID and the proxy. Under the port, external ID and domains there is an "Update existing references" box: when it is ticked, the Gate and proxy config files that use the old value are changed too; when it is not, only the panel value changes and the page keeps warning that references still use the old value until they are updated. The page also warns when the live config files no longer match what EZ tracks, for example after a hand edit.
For a Velocity proxy, Domains lists every host Gate routes to it, including hosts that servers behind the proxy use; the line under the field names those servers. Removing such a host only removes it from Gate: the server keeps its forced host, and its EZ Edit page warns that Gate no longer routes it. Hosts of servers behind the proxy that are not in Domains are listed under "Unused domains", and an arrow moves a host back.
Moving a Purpur or Limbo server to another proxy registers it there with its forced hosts, removes it
from the old proxy, moves its hosts between the proxies' Gate routes and switches the forwarding secret
(paper-global.yml for Purpur, server.toml for Limbo). Port
changes and moves need a stopped server; a "Start afterwards" toggle next to Save decides whether it
starts again. A finished edit can be undone from its progress page as long as nothing changed since.
The EZ Edit page also has a "Delete server" button. Unlike Undo, which only removes what one create operation added, Delete acts on the server's current state: it removes its Gate hosts and its entry in the proxy (never a host or forced host something else still needs), stops the server, deletes it and stops tracking it. It works on a server that has since been edited, moved or overtaken. A Velocity proxy that still has servers of this network registered behind it cannot be deleted; move or delete them first. It refuses if the server changed since the button was pressed, for example a finished edit in another tab.
Overtaking servers set up by hand
Velocity, Purpur and PicoLimbo servers that EZ does not manage yet get a grey "Overtake" button. It
explains what overtaking means and leads to a setup page that shows what EZ found in the live Gate and
proxy configs, what it would change and what stops it. Overtake only adds what is missing (panel
external ID, EULA, online-mode, Velocity forwarding, Limbo forwarding in server.toml, proxy
registration, forced hosts, Gate hosts); it never removes hosts,
renames proxy entries or moves servers. Nothing changes before Save. If a step fails, the plugin rolls
back right away: it restores every file it changed, as long as nobody changed that file since, resets
the panel external ID and stops managing the server.
How config files are changed
Config files on this network are also edited by hand. The plugin never rewrites a whole file. It reads the live file, changes only the lines it needs, checks that the result parses and contains exactly the intended change, keeps a copy of the original, and then writes it back. If a file has a shape the plugin does not understand, it stops and reports the problem instead of guessing.
Progress, retries and undo
Creating a server takes a few minutes because the server is installed and started once. The page after "Create" lists every step with its result and updates itself. If a step fails, the reason is shown and the step can be retried once the problem is fixed; finished steps are not repeated. An operation can also be undone: the plugin removes the domains and proxy entries it added, puts the try list back into its old order when nobody changed it since, stops the server and deletes it. Undo only removes what the operation itself added, and only while the server it created still exists. A proxy that still has servers behind it cannot be undone. An operation that stops making progress, for example because the queue worker is down, can be marked as failed after 30 minutes and then retried or undone.
Settings
The plugin settings on the plugin page choose the Gate server, the default node, the Velocity,
Purpur and PicoLimbo eggs, the address containers use to reach each other (Docker bridge gateway, default
172.18.0.1), the port range for new servers, resource limits and timeouts. Empty choices are
detected automatically when the panel has exactly one matching node, egg or Gate server. Egg names
must match exactly, for example "PicoLimbo" or "PicoLimbo (Debian)". Each server type needs its own
egg; the settings refuse to use one egg for two types.
Requirements
- Pelican panel 1.0.0-beta38 or newer with a queue worker kept running by supervisord or systemd. After a plugin update the plugin asks the workers to restart so they load the new code.
- A Gate server with lite mode enabled, Velocity and Purpur eggs on the panel. The Proxied Limbo tab also needs a PicoLimbo egg.
Installation and updates
Import the plugin zip from the admin plugin page and press Install. The plugin has an update URL, so new versions show up on the plugin page and can be installed with one click.
Permissions
The EZ button and page are only available to signed-in users who may create servers; guests are sent to the login page. Creating a Purpur or Limbo server also requires permission to update the proxy and the Gate server, because their files are changed. Restarting the proxy after a creation also requires permission to restart, stop and start it. The undo buttons are only offered to users who may make every change the undo makes. Servers can only be given to users the creator may manage (admins who are not root admins cannot pick root admins).
Development
The plugin lives in ezservercreate/. Unit tests live in tests/ and run with PHPUnit
inside Docker:
docker run --rm -u $(id -u):$(id -g) -v "$PWD":/app -w /app ezsc-php:8.4 vendor/bin/phpunit
Changelog
- 2026-09-13 14:35 CEST —
071621c— First version of the README. - 2026-09-13 15:03 CEST —
2fd5958— Progress, retries and undo section. - 2026-09-13 16:16 CEST —
857cbf0— Changelog entries with time and commit hash. - 2026-09-13 16:49 CEST —
caf1e89— Undo only removes what the operation added; stalled operations; queue worker requirement. - 2026-09-13 17:24 CEST —
0ab4933— Velocity tab enables modern player info forwarding. - 2026-09-13 19:36 CEST —
e4af84f— Sparkles button, node/owner/port/image fields, try list order, owner rule, guests redirected to login. - 2026-09-13 20:08 CEST —
cdc4516— Plus with sparkles button; domains optional for Proxied Purpur servers. - 2026-09-13 20:23 CEST —
2606c5e— EZ Edit and Overtake buttons in the admin server list (first B3 increment). - 2026-09-13 20:31 CEST —
4a33b94— EZ Edit and Overtake paragraph. - 2026-09-13 21:31 CEST —
821e9f3— Editing and Overtake sections. - 2026-09-13 22:58 CEST —
528fd9c— Proxied Limbo tab, Limbo editing, moves and Overtake, PicoLimbo egg setting. - 2026-09-14 14:41 CEST —
e5619ad— Settings: exact egg names, one egg per server type. - 2026-09-15 11:16 CEST —
7df61a2— "Restart proxy" and "Start server" boxes, restart permission. - 2026-09-15 11:29 CEST —
375a82e— Limbo domains, undo button permissions. - 2026-09-15 11:42 CEST —
1027bc4— Velocity domains with hosts of servers behind the proxy, "Unused domains". - 2026-09-16 14:48 CEST —
3499fba— "Delete server" button on EZ Edit (backlog 17.1).