Deploying Foundry VTT on a WISP/Pterodactyl Panel
Step-by-step guide to installing and configuring Foundry VTT using a Pterodactyl or WISP panel egg, including startup variables and Timed URL activation.
Overview
Pterodactyl and WISP panels manage Foundry VTT through a pre-built "egg" — a JSON configuration that defines how the server is installed, started, and configured. This guide covers the standard Foundry egg variables, the Timed URL activation flow, and important paths inside the container.
Getting the Foundry Egg
The official community egg is available from:
- pterodactyleggs.com (search "Foundry VTT")
- github.com/pelican-eggs (open-source Pelican/Pterodactyl eggs repository)
Import the egg JSON through your panel's Admin → Nests → Import Egg interface.
Container File Layout
Inside the container, Foundry uses the following paths:
/home/container/
main.mjs ← Foundry application entry point
public/ ← static assets
resources/ ← application resources
data/ ← user data directory (worlds, modules, config)
Config/
options.json
admin.txt
Data/
worlds/
systems/
modules/
Logs/
The data/ subdirectory is your persistent data volume. Application files are reinstalled from the Timed URL on each server reinstall. Never delete data/.
Startup Variables
The egg exposes these key variables. Configure them in the panel's Startup tab for your server:
| Variable | Description | Example |
|---|---|---|
FOUNDRY_PORT |
TCP port Foundry listens on | 30000 |
FOUNDRY_DATA_PATH |
Path to data directory inside container | /home/container/data |
FOUNDRY_TIMED_URL |
Time-limited download/activation URL from foundryvtt.com | (generated per-install) |
NODE_VERSION |
Node.js version to install | 24 (for Foundry v14) |
Startup Command
The egg's startup command is typically:
node main.mjs --dataPath=/home/container/data --port={{FOUNDRY_PORT}}
Do not modify this unless you understand the implications. The --dataPath and --port flags override any values in options.json.
First-Time Installation
1. Generate a Timed URL:
- Log in at foundryvtt.com
- Go to your account profile → Purchased Licenses
- Find the "Node.js" section and click "Generate Timed URL"
- Copy the URL — it expires in approximately one hour
2. Set egg variables:
In your panel, navigate to your server → Startup tab and set:
FOUNDRY_TIMED_URLto the URL you just generatedNODE_VERSIONto the required version for your Foundry release (e.g.,24for v14)FOUNDRY_PORTto the port allocated for your serverFOUNDRY_DATA_PATHto/home/container/data
3. Reinstall the server:
In the panel, go to Settings → Reinstall. This triggers the egg's install script, which uses the Timed URL to download and set up Foundry.
4. Start the server:
Use the Start button. Watch the console output for:
Foundry Virtual Tabletop - Server started and listening on port 30000
5. Activate the license:
Open a browser and navigate to http://<server-ip>:<port>. If the egg handled activation automatically via the Timed URL, you may land directly on the Setup menu. If the license screen appears, enter your license key manually. See Activating Your Foundry VTT License.
Node.js Version Management
The egg installs Node.js at the version specified by NODE_VERSION. When upgrading Foundry to a new major version that requires a newer Node.js:
- Update the
NODE_VERSIONvariable in the Startup tab - Generate a new Timed URL
- Update
FOUNDRY_TIMED_URL - Reinstall the server (application files only —
data/is preserved)
Backups in Panel Environments
Use the panel's built-in backup feature for container snapshots, or configure the panel's schedule feature to run:
tar -czf /tmp/foundry-data-$(date +%Y%m%d).tar.gz /home/container/data/