No description
  • PHP 96.8%
  • Blade 2.8%
  • Python 0.3%
  • JavaScript 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
TecnicoYT 8737a54916 Bump version to 0.15.1
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013JgGX8Te2UcvjAXUdAch7g
2026-09-16 17:38:29 +02:00
dist Bump version to 0.15.1 2026-09-16 17:38:29 +02:00
ezservercreate Bump version to 0.15.1 2026-09-16 17:38:29 +02:00
scripts Instant feedback on the edit and create pages (0.10.7) 2026-09-14 20:38:14 +02:00
tests Backlog 17.1: delete button on EZ Edit (0.15.0) 2026-09-16 14:43:53 +02:00
.gitignore Add tested surgical config editors for Gate, Velocity, Paper and properties files 2026-09-13 14:35:26 +02:00
CLAUDE.md Docs: runtime layout for the delete feature, changelog entries 2026-09-16 15:08:26 +02:00
composer.json Add tested surgical config editors for Gate, Velocity, Paper and properties files 2026-09-13 14:35:26 +02:00
composer.lock Add tested surgical config editors for Gate, Velocity, Paper and properties files 2026-09-13 14:35:26 +02:00
HANDOFF.md HANDOFF: security review results, canRetry fix, and 0.15.0 release recorded 2026-09-16 15:31:59 +02:00
INSTRUCTIONS.TXT initial commit 2 2026-09-13 13:45:40 +02:00
phpunit.xml.dist Add tested surgical config editors for Gate, Velocity, Paper and properties files 2026-09-13 14:35:26 +02:00
placeholder.txt initial commit 2026-09-13 12:57:00 +02:00
README.md Docs: runtime layout for the delete feature, changelog entries 2026-09-16 15:08:26 +02:00
RED_TEAM_FINDINGS.MD Add changelog entries for a443a70 2026-09-16 11:54:45 +02:00
update.json Bump version to 0.15.1 2026-09-16 17:38:29 +02:00

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.toml and 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).