diff --git a/README.md b/README.md index a957177..6a20e91 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,12 @@ This is a Next.js application generated with [Create Fumadocs](https://github.com/fuma-nama/fumadocs). -Run development server: +Install dependencies: +```bash +pnpm install +``` +Run development server: ```bash pnpm dev ``` diff --git a/content/docs/common-tasks/admins/allocations.mdx b/content/docs/common-tasks/admins/allocations.mdx new file mode 100644 index 0000000..7d3b3ec --- /dev/null +++ b/content/docs/common-tasks/admins/allocations.mdx @@ -0,0 +1,13 @@ +--- +title: allocations +description: Allocations & ports +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/admins/index.mdx b/content/docs/common-tasks/admins/index.mdx new file mode 100644 index 0000000..49b56df --- /dev/null +++ b/content/docs/common-tasks/admins/index.mdx @@ -0,0 +1,29 @@ +--- +title: Overview - Admin +description: Admin Users Tasks & Abilities +--- + + + + Add user accounts with & without admin permissions + + + Add locations to keep nodes orginzed + + + Add nodes to where servers are located + + + Creating serers & assigning them to a node + + + Creating ports & allocating them to servers + + + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/admins/locations.mdx b/content/docs/common-tasks/admins/locations.mdx new file mode 100644 index 0000000..50c1106 --- /dev/null +++ b/content/docs/common-tasks/admins/locations.mdx @@ -0,0 +1,90 @@ +--- +title: Creating Locations +description: Creating & Configuring locations +--- + +## What Is a Location? + +In Pyrodactyl a Location is a high–level grouping used to classify Nodes by geography, datacenter, or provider. It is purely organizational and does not itself run any workloads. + +## Location vs Node + +- Location: Logical label (no hardware, no allocations). +- Node: Actual machine configuration (daemon, allocations, resource limits) that is assigned to exactly one Location. + +## Creating a Location + +1. Go to Admin Area > Locations. +2. Click Create Location. +3. Provide: + - Short Code: Concise identifier (e.g. us-nyc-1). + - Description (optional but recommended). +4. Save. + +Short Codes should be: +- Lowercase +- Hyphen separated +- Stable (avoid later renames if referenced externally) + +Examples: us-east, us-east-2, eu-fra, ap-sgp, edge-la, aws-usw-1, us.chicago.pyro + +## Assigning Nodes + +When adding or editing a Node select the desired Location. Reassigning a Node later does not affect servers functionally; it only updates grouping. + +## Editing & Renaming + +- You may edit description anytime. +- Renaming the short code is safe internally but may break external automation that relies on the old code--audit before changing. + +## Deleting a Location + +- You must first move or remove all Nodes under it. +- Deletion leaves servers intact (they live under their Nodes) but you cannot delete if any Node still references the Location. + +## Best Practices + +- Keep list small and meaningful (regions/providers, not every rack). +- Use consistent pattern (region-city-number or provider-region). +- Avoid embedding transient info (like temporary offers or hardware specs). +- Document naming scheme for staff. + +## Common Mistakes + +| Mistake | Impact | Fix | +|---------|--------|-----| +| Too many granular Locations | Cluttered UI | Merge into broader regions | +| Using Location to reflect hardware tier | Confusion | Use Node naming / descriptions instead | +| Renaming without notice | Automation breakage | Maintain a mapping or avoid rename | + +## API Notes + +Locations are retrievable and manageable via the administrative API. Create Locations first, then post Nodes referencing the Location ID or short code (depending on endpoint requirements). + +## When to Add Another Location + +Add a new Location only if: +- New geographic region introduced +- New provider with distinct compliance / cost profile +- You need a clear segregation boundary for reporting + +If it is just a new machine in an existing region/provider, add another Node--not a Location. + +## Quick Checklist + +- Does it represent a distinct region or provider? (Yes -> Location) +- Will staff readily understand the code? (Yes -> Good) +- Will it stay relevant for 6+ months? (Yes -> Proceed). + +![Location Homepage](/img/locations-home.png) +![Location Creation Fourm](/img/locations-creation.png) +![Location About Page](/img/locations-about.png) + +After all of that you are done! Your location is made and now you can see it in the main locations page. + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/admins/nodes.mdx b/content/docs/common-tasks/admins/nodes.mdx new file mode 100644 index 0000000..3f2da3b --- /dev/null +++ b/content/docs/common-tasks/admins/nodes.mdx @@ -0,0 +1,186 @@ +--- +title: Creating Nodes +description: Creating and configuring nodes +--- + +Don’t create a Node just to group servers--use naming/filters. If you must, +use Locations for grouping (e.g., bedwars.provider). + +## When to Create a Node + +- When you have new hardware (VPS or Dedicated) to host more servers. +- When you split one dedicated server into multiple virtual machines + (e.g., Proxmox or another hypervisor). + +## What is a Node? + +- A Node represents physical hardware running the Pyrodactyl Elytra + (or Pterodactyl Wings) daemon that hosts servers in containers. +- Nodes define resource pools for CPU, Memory, Disk Space, IPs, and ports. + +## Node vs Location vs Server + +- Location: A grouping label (region/provider). +- Node: Machine + daemon + resource/allocation pool; belongs to one Location. +- Server: A user container consuming a slice of a Node’s resources and allocations. + +Tip: Don’t create a Node just to group servers--use naming/filters. If needed, +use Locations for that. + +## Prerequisites + +- Domain name (optional, but required for SSL/TLS). +- Daemon reachable (firewall open). +- FQDN or IP ready (decide on SSL/reverse proxy). +- SFTP/Docker dependencies installed as needed. + +## Terminology + +- Servers: The game servers you want to run (e.g., Minecraft, TF2). +- VPS/Dedicated: The hardware hosting the game servers. +- Nodes: Internal name to specify which hardware is used. +- Location: The panel label to separate where nodes are physically hosted. + +## Creating a Node + +1. Admin Area > Nodes > Create Node. +2. Fill out the fields and save. +3. Add at least one IP/Port allocation. +4. Assign or create servers for this Node. + +## Core Fields + +- General: Name, Description, Location. +- Connectivity: FQDN/IP, Public Port (daemon, e.g., 8080), SFTP Port (e.g., 2022); + open firewall rules. +- Resource Limits (totals for the Node): Total Memory, Disk, CPU; Over-Allocate % + for memory/disk/CPU. +- Allocation/Ports: Default IP, additional IPs, add port ranges, remove unused ports. +- Daemon Config: Base Path (e.g., /var/lib/pyrodactyl/servers), Behind Proxy, + Maintenance Mode, Backup directory/limits. +- Security/Limits: Upload size, allowed archive extensions, default Docker images list, + reject stale daemon versions. +- Advanced: Task timeout/graceful stop, container network mode, disk check strategy. + +## Editing a Node + +- Safe changes: Description, over-allocation values, add IPs/ports, Docker image list, + upload limits, Maintenance toggle. +- Use caution: FQDN/IP, Public/SFTP ports (requires DNS/firewall updates and service restart), + Base Path (requires data migration). + +## Renaming + +- No runtime impact; may break external automation. Audit scripts first. + +## Resource Strategy + +- Memory/Disk: Reflect usable capacity minus OS; use modest over-allocation. +- CPU: Sum of server CPU limits should respect Total CPU plus over-allocate margin. + Over-allocate lightly for bursty workloads (25–50%); avoid for consistently high usage. + +## Allocation Management + +- Workflow: Add IPs → add port ranges → servers consume ports → remove unused. +- Best practices: + - Keep a 10–15% port buffer. + - Group port ranges by game type. + - Add aliases for multi-provider/NAT setups. + +## Deleting a Node + +- Move or delete all servers first, then clear allocations, then delete the Node. + There is no automatic migration. + +## Migration (High-Level) + +1. Create the new Node and ensure parity (images, versions, ports). +2. Stop the server. +3. Transfer files (rsync/backup/restore). +4. Recreate on the new Node. +5. Validate. +6. Clean old allocations. + +## Monitoring & Health + +- Watch daemon heartbeat. +- Track free allocations and over-allocation pressure (avoid >90% of physical). +- Monitor disk usage and inodes. +- Keep Docker images updated. + +## Common Mistakes (and fixes) + +- Setting Total Memory to full RAM → OOM risk → reserve 5–15% for the OS. +- Excessive over-allocation (e.g., 200%) → performance issues → lower the ratio. +- Missing firewall rules for daemon/SFTP → offline/errors → open and persist rules. +- Mixing prod/test on the same Node → contention → separate or limit. +- Deleting an IP before clearing allocations → stale errors → remove allocations first. +- Skipping Maintenance before major changes → disruptions → enable Maintenance. +- Changing Base Path carelessly → broken paths → plan migration/symlinks. + +## Best Practices + +- Use consistent naming (e.g., node-us-nyc-1); put hardware class in description. +- Maintain a capacity sheet (total vs. allocated). +- Prune unused ports; curate a minimal set of Docker images. +- Use Maintenance Mode for daemon/kernel upgrades. + +## API Notes + +- Admin API: create/list Nodes, manage allocations, update limits, toggle maintenance. +- Typical flow: POST Location → POST Node → POST allocations → POST servers (Node ID). + Validate daemon connection. + +## When to Add Another Node + +- Add when you have a new machine, sustained capacity >80% memory, isolation needs, + or different performance tiers. +- Don’t add a Node just for a single new server or a different Docker image. + +## Quick Checklist + +- Daemon reachable; DNS/SSL/proxy correct; firewall open (daemon/SFTP). +- Resource totals set minus OS; intentional over-allocation. +- IPs added with an adequate port pool. +- Docker images curated; monitoring/logs configured; backup strategy in place. + +## Capacity Review Tips + +- Memory: alert at 75%, plan at 85%. +- Disk: alert at 70%, plan at 80%, emergency at 90%. +- Ports: alert when <10% free. +- CPU: check sustained 15m load vs. core count. + +## Troubleshooting + +- Node offline: check daemon service, TLS/proxy, and connectivity (nc/curl). +- Can’t allocate ports: pool exhausted, IP missing, or port in use/firewalled. +- Start fails (insufficient resources): over-allocation exceeded → adjust or migrate. + +## Glossary + +- Allocation: Reserved IP:Port. +- Over-Allocate: Oversubscribe beyond physical resources. +- Daemon: Background container manager. +- Maintenance Mode: Blocks new actions; running servers continue. + +## Example Naming + +- node-us-east-1, node-eu-fra-2, node-ap-sgp-1, node-edge-la-1, node-aws-usw-1, us.chicago.pyro + +## Scaling + +- Vertical: increase Node resources (after hardware upgrade). +- Horizontal: add another Node in the same Location. +- Geographic: create a new Location and add a Node there. + +## Visual References + +- Nodes homepage, Create Node form, Node detail overview. + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) diff --git a/content/docs/common-tasks/admins/servers.mdx b/content/docs/common-tasks/admins/servers.mdx new file mode 100644 index 0000000..1d03efd --- /dev/null +++ b/content/docs/common-tasks/admins/servers.mdx @@ -0,0 +1,117 @@ +--- +title: Creating Servers +description: How to create and mannge a server +--- + +Creating servers is the fundamental part of using Pyrodactyl. + +After setting up your nodes and seeing a green beating heart, you can continue with setting up servers. + +## What is a Server? + +A server in Pyrodactyl is a containerized application instance that runs on a Node. It consumes a defined amount of resources (CPU, memory, disk, network allocations) from its assigned Node. + +## Prerequisites + +- At least one configured and online Node. +- Available allocations (IP:Port combinations) on the chosen Node. +- A valid Egg for the game or application you wish to run. + +## Creating a Server + +1. **Navigate to the Admin Area:** From your Pyrodactyl panel, go to `Admin Area` > `Servers`. +2. **Click "Create New":** In the top right corner, click the "Create New" button. +3. **Fill out the Server Details:** + + - **Server Name:** A user-friendly name for your server (e.g., "My Minecraft Survival Server"). + - **Server Owner:** Select the user who will own and manage this server. + - **Description (Optional):** A brief description of the server's purpose. + - **Node:** Choose the Node where this server will be deployed. Ensure the Node has sufficient resources and allocations. + - **Allocation:** Select an available IP:Port allocation from the chosen Node. This is how users will connect to your server. + - **Egg:** Select the appropriate Egg for the game or application (e.g., "Minecraft: Java Edition"). + - **Nest:** The Nest associated with the chosen Egg will be automatically selected. + +4. **Configure Resources:** + + - **Memory (MiB):** The maximum amount of RAM the server can use. + - **Swap (MiB):** The amount of swap space available. Set to `-1` for unlimited. + - **Disk Space (MiB):** The maximum amount of disk space the server can use. + - **CPU Limit (%):** The percentage of a single CPU core the server can use (e.g., `100` for one thread, `200` for two cores). + - **IO Weight:** Adjusts the I/O priority for the server (10-1000, default 500). + +5. **Configure Startup Parameters:** + + - **Startup Command:** The command used to start the server. This is usually pre-filled by the Egg. + - **Service Variables:** Additional variables defined by the Egg that can be configured (e.g., server JAR file, difficulty). + +6. **Advanced Settings (Optional):** + + - **Database Limit:** Maximum number of databases the server owner can create. + - **Allocation Limit:** Maximum number of additional allocations the server owner can create. (in the [network tab](/post-install/users/servers/network)) + - **Backup Limit:** Maximum number of backups the server owner can create. + - **OOM Killer:** Enable or disable the Out-Of-Memory killer for this server. + +7. **Click "Create Server":** Once all details are filled, click the button to create the server. + +The server will now be provisioned on the selected Node. You can monitor its status and manage it from the server list. + +## Managing Servers + +Once a server is created, the user that is assigned the server can perform various management tasks: + + Admins can still manage and access servers, they will apear under "other servers" when on the homepage of the panel + + +- **Start/Stop/Restart:** Control the server's power state. +- **Console:** View server logs and send commands. +- **Files:** Access and manage server files via SFTP or the web interface. +- **Databases:** Create and manage MySQL databases for the server. +- **Schedules:** Set up automated tasks (e.g., daily backups, restarts). +- **Network:** Manage additional IP allocations and port forwarding. +- **Subusers:** Grant other users access to manage specific aspects of the server. +- **Settings:** Modify server resource limits, startup parameters, and other configurations. +- **Backups:** Create, restore, and manage server backups. + +## Best Practices + +- **Resource Allocation:** Allocate resources carefully. Over-allocating can lead to resource exhaustion on the Node, while under-allocating can cause server performance issues. +- **Security:** Regularly update server software and use strong passwords for SFTP and database access. +- **Backups:** Implement a regular backup strategy to prevent data loss. +- **Monitoring:** Keep an eye on server resource usage and logs to identify and resolve issues proactively. +- **Eggs:** Ensure you are using up-to-date and well-maintained Eggs for your applications. + +## Common Issues + +| Issue | Cause | Solution | +|-------|-------|----------| +| Server won't start | Insufficient resources on Node | Check Node capacity and reduce server limits or add resources | +| Port binding errors | Allocation already in use or bind IP incorrect | Use `0.0.0.0` as bind address, verify port is free on Node | +| Out of Memory crashes | Memory limit too low for application | Increase memory allocation or enable swap | +| Server stuck in "Installing" | Egg installation script failed | Check server logs, verify Egg is up-to-date | +| Cannot connect to server | Firewall blocking ports or wrong allocation | Verify Node firewall rules allow the server's port | +| SFTP connection fails | Wrong SFTP port or Node unreachable | Verify Node's SFTP port (default 2022) is open and correct | +| Slow file uploads | Upload size limit too restrictive | Increase Node's upload size limit in settings | +| Database creation fails | Database limit reached | Increase database limit or remove unused databases | +| Startup command errors | Invalid variables or missing files | Review Egg configuration and service variables | +| Backup fails | Insufficient disk space or backup limit reached | Free up disk space or increase backup limit | + +### Troubleshooting Tips + +- **Check Server Logs:** Most issues and their situations are in the server logs themselves. +- **Verify Node Status:** Ensure the Node has a green heartbeat and correct resources. +- **Review Egg Configuration:** Ensure the Egg is compatible with the application version you're trying to use. +- **Resource Monitoring:** Use Node metrics to find resource bottlenecks (CPU, RAM, disk I/O). + +### When to Contact Support + +If you've verified all settings and the issue persists: +- Check the [Common Issues](/common-issues/bind-issues) section for detailed troubleshooting guides. +- Review [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) for similar issues. +- Gather server logs, Node status, and error messages before seeking help. + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) diff --git a/content/docs/common-tasks/admins/users.mdx b/content/docs/common-tasks/admins/users.mdx new file mode 100644 index 0000000..9ecf43e --- /dev/null +++ b/content/docs/common-tasks/admins/users.mdx @@ -0,0 +1,13 @@ +--- +title: Adding Users +description: Making a user account for your panel +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/index.mdx b/content/docs/common-tasks/index.mdx new file mode 100644 index 0000000..c0c48bd --- /dev/null +++ b/content/docs/common-tasks/index.mdx @@ -0,0 +1,15 @@ +--- +title: Post Installation +description: Post-installation configuration and setup guides. +--- + +# Post Installation + +This section covers post-installation tasks and configuration. + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/account/index.mdx b/content/docs/common-tasks/users/account/index.mdx new file mode 100644 index 0000000..78d01c4 --- /dev/null +++ b/content/docs/common-tasks/users/account/index.mdx @@ -0,0 +1,13 @@ +--- +title: User accounts +description: Account pages, setting up MFA & SSH keys +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/index.mdx b/content/docs/common-tasks/users/index.mdx new file mode 100644 index 0000000..31313a8 --- /dev/null +++ b/content/docs/common-tasks/users/index.mdx @@ -0,0 +1,13 @@ +--- +title: Overview - The user +description: An overview of what the user can do and where things are as a logged in user. +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/servers/activity.mdx b/content/docs/common-tasks/users/servers/activity.mdx new file mode 100644 index 0000000..52090fc --- /dev/null +++ b/content/docs/common-tasks/users/servers/activity.mdx @@ -0,0 +1,13 @@ +--- +title: Activity in the server +description: Everything you need to know about the Activity section in the panel +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/servers/databases.mdx b/content/docs/common-tasks/users/servers/databases.mdx new file mode 100644 index 0000000..c523a17 --- /dev/null +++ b/content/docs/common-tasks/users/servers/databases.mdx @@ -0,0 +1,13 @@ +--- +title: Server Databases +description: Everything you need to know about Database section in the panel +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/servers/network.mdx b/content/docs/common-tasks/users/servers/network.mdx new file mode 100644 index 0000000..4a3994f --- /dev/null +++ b/content/docs/common-tasks/users/servers/network.mdx @@ -0,0 +1,13 @@ +--- +title: Server Network +description: Everything you need to know about the Network section in the panel +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/servers/scedules.mdx b/content/docs/common-tasks/users/servers/scedules.mdx new file mode 100644 index 0000000..f3c21d7 --- /dev/null +++ b/content/docs/common-tasks/users/servers/scedules.mdx @@ -0,0 +1,13 @@ +--- +title: Scedules +description: Everything you need to know about the Scedules section in the panel +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/servers/settings.mdx b/content/docs/common-tasks/users/servers/settings.mdx new file mode 100644 index 0000000..f05f392 --- /dev/null +++ b/content/docs/common-tasks/users/servers/settings.mdx @@ -0,0 +1,13 @@ +--- +title: Server Settings +description: Everything you need to know about the Settings section in the panel +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/servers/software.mdx b/content/docs/common-tasks/users/servers/software.mdx new file mode 100644 index 0000000..9b548f3 --- /dev/null +++ b/content/docs/common-tasks/users/servers/software.mdx @@ -0,0 +1,13 @@ +--- +title: Server Software +description: Everything you need to know about the Activity Software in the panel +--- + +text + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/common-tasks/users/servers/subusers.mdx b/content/docs/common-tasks/users/servers/subusers.mdx new file mode 100644 index 0000000..8c953e0 --- /dev/null +++ b/content/docs/common-tasks/users/servers/subusers.mdx @@ -0,0 +1,11 @@ +--- +title: Sub-users +description: Everything you need to know about the Sub-users section in the panel +--- + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Pyrodactyl GitHub](https://github.com/pyrohost/pyrodactyl) +- [Pterodactyl Documentation](https://pterodactyl.io/) +- [Pyrodactyl Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) \ No newline at end of file diff --git a/content/docs/elytra/configuration.mdx b/content/docs/elytra/configuration.mdx new file mode 100644 index 0000000..333b429 --- /dev/null +++ b/content/docs/elytra/configuration.mdx @@ -0,0 +1,6 @@ +--- +title: Configuration +description: description +--- + +# Coming Soon \ No newline at end of file diff --git a/content/docs/elytra/index.mdx b/content/docs/elytra/index.mdx new file mode 100644 index 0000000..53fe36c --- /dev/null +++ b/content/docs/elytra/index.mdx @@ -0,0 +1,27 @@ +--- +title: Elytra Documentation +description: A maintained fork of Pterodactyl Wings, developed and supported by Pyro Inc. +--- + + +This list is small, but planned to expand in the future. + + +Key Features and Changes: + +- Deduplicated Backups + + Deduplication is the procecss of only storing a piece of data once. + In the same way git works, we use an open source program called [Rustic](https://github.com/rustic-rs/rustic) + to ensure your backups are both Encrypted, and as small as possible, all while still maintaining their integrity. + + + + + +--- + + +Have something you want to see added to Elytra? +Make an issue on our [Github!](https://github.com/pyrohost/elytra/issues/new) + diff --git a/content/docs/elytra/installation.mdx b/content/docs/elytra/installation.mdx new file mode 100644 index 0000000..50dc82d --- /dev/null +++ b/content/docs/elytra/installation.mdx @@ -0,0 +1,284 @@ +--- +title: Installing Elytra +description: How to install and setup Elytra on Linux +--- + + +## Supported Operating Systems + + +There is a very high chance it will work on more than these. These are the ones that are +known working and officially supported though. + + +|OS|Version| +|---|---| +|Fedora| 40-42| +|Ubuntu| 24.04| +|Debian| 13| +|Rocky | 10| +|RHEL | 10| +|Arch| 2025.10.1| + +## Prerequisites + +- curl +- tar +- docker +- [rustic](https://github.com/rustic-rs/rustic/releases/latest) + + +### Installing Prequisites + + + +```bash +sudo dnf update +sudo dnf install curl tar +sudo dnf -y install dnf-plugins-core +sudo dnf-3 config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo + +sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + + +```bash +sudo apt-get update +sudo apt-get install curl tar ca-certificates +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update + +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + + +```bash +sudo apt-get update +sudo apt-get install curl tar ca-certificates +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update + +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + + +```bash +sudo dnf update +sudo dnf install curl tar +sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo +sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + + +```bash +sudo yum update +sudo yum install curl tar +sudo dnf -y install dnf-plugins-core +sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo +sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + + +```bash +sudo pacman -Syu +sudo pacman -S curl tar docker +``` + + + +Now, enable the docker engine service to start on boot +```bash +sudo systemctl enable --now docker +``` + +## Installing Elytra +Now we need to install elytra. This will be the program communicating with your Pyrodactyl Panel. + +### Download Executable + + + + ```bash + curl -o /usr/local/bin/elytra https://github.com/pyrohost/elytra/releases/download/latest/elytra_linux_amd64 + ``` + + + ```bash + curl -o /usr/local/bin/elytra https://github.com/pyrohost/elytra/releases/download/latest/elytra_linux_arm64 + ``` + + + + +### Installing Rustic + +Rustic is not required to run Elytra. You do however lose out on Deduplicated and encrypted backups. +The Pyrodactyl team heavily recommends you install it. + + +To install rustic, you have the choice of building from source, or downloading the latest pre-built binary. +The quickest way is to use the pre-built binaries. + + + +```bash + mkdir -p /tmp/rustic-install + curl -L https://github.com/rustic-rs/rustic/releases/download/v0.10.0/rustic-v0.10.0-x86_64-unknown-linux-musl.tar.gz | sudo tar -zx -C /usr/local/bin + sudo mv /tmp/rustic-install/rustic /usr/local/bin/ +``` + + +```bash + mkdir -p /tmp/rustic-install + curl -L https://github.com/rustic-rs/rustic/releases/download/v0.10.0/rustic-v0.10.0-aarch64-unknown-linux-musl.tar.gz | sudo tar -zx -C /usr/local/bin + sudo mv /tmp/rustic-install/rustic /usr/local/bin/ +``` + + + + + +### Setting up Systemd Task for Elytra + +```bash +sudo nano /etc/systemd/system/elytra.service +``` +and paste + +```systemd +[Unit] +Description=Pyrodactyl Elytra Daemon +After=docker.service +Requires=docker.service +PartOf=docker.service + +[Service] +User=root +WorkingDirectory=/etc/elytra +LimitNOFILE=4096 +PIDFile=/var/run/elytra/daemon.pid +ExecStart=/usr/local/bin/elytra +Restart=on-failure +StartLimitInterval=180 +StartLimitBurst=30 +RestartSec=5s + +[Install] +WantedBy=multi-user.target +``` + +Now save and exit that file. + + +## Setup Elytra +To setup Elytra, you must first get your config. This is done by first, adding a new node in your Pyrodactyl Panel. + +### Setup your Elytra + First thing you need to do, is to get to your admin panel. + This is located at `https:///admin` + +### Setting up Your Location + + after visiting this page, you should see a menu on the left side of the screen called `Locations` + Click on that to make your first location + + +![Location View](/img/SearchForLocations.png) + + +Once on this page, click "Create New" in the top right corner +Name it whatever you want. This name doesn't matter that much. + +### Create Your Node + +Once your Location is created. Click on Nodes right beneath the locations button. + +![Node View](/img/SearchForNodes.png) + + +Click "Create New" + +and you will be prompted with a screen with lots of buttons and input fields. +The only values you will need to change are + +- Name +Give it a unique name that you can identify this node by + +- Public FQDN +This address should be The address that people will use when connecting to your node. +not panel to node +If your panel is https secured is has to be a domain name, and vise versa, if it's http, it has to be +an ip address. + +- Total Memory +How much memory your Server has + This is not a hard value. The panel will only get mad at you, not stop you! + +- Memory Over-Allocation +How much percent over your Total Memory you want to show up as "Available" + +- Total Disk Space +How much disk space you have to use + This is not a hard value. The panel will only get mad at you, not stop you! + +- Disk Over-Allocation +How much percent over your Total Disk you want to show up as "Available" + + If your going to run Elytra behind a proxy Set Behind proxy to true + + + +Click Create on your node, and it might take a second. But then it should load into the nodes page. + +--- + +### Configuring Elytra + +Click the `Configuration` Button located at the top of the page + +![Elytra Config](/img/ElytraConfig.png) + + +Rather than anything complex, you can press the auto deploy button on the side of the page, +and copy the command that pops out which should look a little something like this + +```bash +cd /etc/elytra && sudo elytra configure --panel-url http://panel.pyrodactyl.dev --token pyro_XWsMcVoJkoMCWn9COtSsUTlbRSevBbLJ5HEMKZQjnN5 --node 1 +``` + + +### Test your service. + +If you want to run Elytra just to test it. You can do that by running this command anywhere on your host + +```bash + elytra +``` + +Once you've got your stuff working. your free to go + +--- + + +### Enable Elytra Service + +```bash + sudo systemctl enable --now elytra +``` + diff --git a/content/docs/elytra/meta.json b/content/docs/elytra/meta.json new file mode 100644 index 0000000..9cc5bd6 --- /dev/null +++ b/content/docs/elytra/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Elytra", + "description": "Docs for the Elytra Server Daemon", + "icon": "elytra", + "root": true +} diff --git a/content/docs/automated.mdx b/content/docs/pyrodactyl/automated.mdx similarity index 100% rename from content/docs/automated.mdx rename to content/docs/pyrodactyl/automated.mdx diff --git a/content/docs/changelog.mdx b/content/docs/pyrodactyl/changelog.mdx similarity index 100% rename from content/docs/changelog.mdx rename to content/docs/pyrodactyl/changelog.mdx diff --git a/content/docs/common-issues/bind-issues.mdx b/content/docs/pyrodactyl/common-issues/bind-issues.mdx similarity index 100% rename from content/docs/common-issues/bind-issues.mdx rename to content/docs/pyrodactyl/common-issues/bind-issues.mdx diff --git a/content/docs/common-issues/domain.mdx b/content/docs/pyrodactyl/common-issues/domain.mdx similarity index 95% rename from content/docs/common-issues/domain.mdx rename to content/docs/pyrodactyl/common-issues/domain.mdx index 97b5cc2..1abcb7f 100644 --- a/content/docs/common-issues/domain.mdx +++ b/content/docs/pyrodactyl/common-issues/domain.mdx @@ -14,7 +14,7 @@ Most domain connection failures are caused by missing or misconfigured DNS serve ## Step 1: Check Docker DNS Configuration -On your PyroDactyl host, open the Docker daemon configuration file located at: +On your PyroDactyl host, open the Docker daemon configuration file located at: `/etc/docker/daemon.json` ``` diff --git a/content/docs/index.mdx b/content/docs/pyrodactyl/index.mdx similarity index 93% rename from content/docs/index.mdx rename to content/docs/pyrodactyl/index.mdx index e0caffe..7ff7ce4 100644 --- a/content/docs/index.mdx +++ b/content/docs/pyrodactyl/index.mdx @@ -9,12 +9,12 @@ description: The Pterodactyl-based game server panel that's faster, smaller, saf Pyrodactyl is under development and pre-release. Some UI elements may appear - broken, and there might be some bugs. + broken, and there might be some bugs. You can report bugs by joining our [Discord](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support)] For Pyrodactyl-specific issues, join our Discord community at - [discord.gg/FGWKZT5dxv](https://discord.gg/FGWKZT5dxv) for support. + [discord.gg/FGWKZT5dxv](https://discord.com/invite/FGWKZT5dxv?utm_campaign=pyrodactyl_support) for support. Pyrodactyl is the Pterodactyl-based game server management panel that focuses on performance enhancements, a reimagined, accessible interface, and top-tier developer experience. Builds faster, compiles smaller: Pyrodactyl is the world's best Pterodactyl. diff --git a/content/docs/installation/community-install-guides.mdx b/content/docs/pyrodactyl/installation/community-install-guides.mdx similarity index 100% rename from content/docs/installation/community-install-guides.mdx rename to content/docs/pyrodactyl/installation/community-install-guides.mdx diff --git a/content/docs/installation/fresh-installation.mdx b/content/docs/pyrodactyl/installation/fresh-installation.mdx similarity index 81% rename from content/docs/installation/fresh-installation.mdx rename to content/docs/pyrodactyl/installation/fresh-installation.mdx index 67d7ea5..7becac4 100644 --- a/content/docs/installation/fresh-installation.mdx +++ b/content/docs/pyrodactyl/installation/fresh-installation.mdx @@ -6,7 +6,7 @@ description: A comprehensive guide for setting up Pyrodactyl using Docker This comprehensive guide walks you through setting up Pyrodactyl using Docker, from scratch to a fully functional system. - The guide for migration has moved to a [new page](/docs/migrations). + The migration guide has moved to a [new dedicated page](/docs/migrations). @@ -38,6 +38,10 @@ This comprehensive guide walks you through setting up Pyrodactyl using Docker, f 1. In terminal, cd into the directory, and run the following command to start the panel: + + If you want to use Let's Encrypt for SSL, add the `LE_EMAIL` variable to the `x-common` section under the panel service in your `docker-compose.yml` file. After adding it, run `docker compose down`, delete the `/srv/pterodactyl/nginx` directory, and then run `docker compose up -d` to regenerate the SSL configuration. + + ```bash docker compose up -d ``` @@ -101,6 +105,13 @@ In addition to the Pyrodactyl panel, you'll need Pterodactyl Wings as a backend ## Post-Installation Steps + + Enabling swap for Docker is optional but recommended if you're hosting for others or want to prevent Out of Memory (OOM) errors. + First, check if swap is needed by running docker info and looking for the warning "WARNING: No swap limit support." If you need to enable swap, open `/etc/default/grub` as root, find the line starting with `GRUB_CMDLINE_LINUX_DEFAULT`, + and ensure it includes swapaccount=1 (note: this line may have other OS-specific parameters, should look something like `GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1 net.ifnames=0"`). After making changes, run `sudo update-grub` with a swift `sudo reboot` after. + + + ### Email Configuration For user password reset emails, etc, you'll need an SMTP server. For this, you can use: diff --git a/content/docs/installation/hosting-providers/dokploy.mdx b/content/docs/pyrodactyl/installation/hosting-providers/dokploy.mdx similarity index 100% rename from content/docs/installation/hosting-providers/dokploy.mdx rename to content/docs/pyrodactyl/installation/hosting-providers/dokploy.mdx diff --git a/content/docs/installation/index.mdx b/content/docs/pyrodactyl/installation/index.mdx similarity index 100% rename from content/docs/installation/index.mdx rename to content/docs/pyrodactyl/installation/index.mdx diff --git a/content/docs/local-development/docker.mdx b/content/docs/pyrodactyl/local-development/docker.mdx similarity index 100% rename from content/docs/local-development/docker.mdx rename to content/docs/pyrodactyl/local-development/docker.mdx diff --git a/content/docs/local-development/index.mdx b/content/docs/pyrodactyl/local-development/index.mdx similarity index 100% rename from content/docs/local-development/index.mdx rename to content/docs/pyrodactyl/local-development/index.mdx diff --git a/content/docs/local-development/vagrant.mdx b/content/docs/pyrodactyl/local-development/vagrant.mdx similarity index 100% rename from content/docs/local-development/vagrant.mdx rename to content/docs/pyrodactyl/local-development/vagrant.mdx diff --git a/content/docs/meta.json b/content/docs/pyrodactyl/meta.json similarity index 100% rename from content/docs/meta.json rename to content/docs/pyrodactyl/meta.json diff --git a/content/docs/migrations/docker.mdx b/content/docs/pyrodactyl/migrations/docker.mdx similarity index 100% rename from content/docs/migrations/docker.mdx rename to content/docs/pyrodactyl/migrations/docker.mdx diff --git a/content/docs/migrations/index.mdx b/content/docs/pyrodactyl/migrations/index.mdx similarity index 100% rename from content/docs/migrations/index.mdx rename to content/docs/pyrodactyl/migrations/index.mdx diff --git a/content/docs/migrations/native-to-docker.mdx b/content/docs/pyrodactyl/migrations/native-to-docker.mdx similarity index 100% rename from content/docs/migrations/native-to-docker.mdx rename to content/docs/pyrodactyl/migrations/native-to-docker.mdx diff --git a/content/docs/migrations/native-to-native.mdx b/content/docs/pyrodactyl/migrations/native-to-native.mdx similarity index 100% rename from content/docs/migrations/native-to-native.mdx rename to content/docs/pyrodactyl/migrations/native-to-native.mdx diff --git a/content/docs/migrations/native-update.mdx b/content/docs/pyrodactyl/migrations/native-update.mdx similarity index 100% rename from content/docs/migrations/native-update.mdx rename to content/docs/pyrodactyl/migrations/native-update.mdx diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..9af3c7d --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,5 @@ +onlyBuiltDependencies: + - '@tailwindcss/oxide' + - esbuild + - sharp + - workerd diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..946b0a0 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..e87822a --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/public/img/locations-about.png b/public/img/locations-about.png new file mode 100644 index 0000000..ceb1478 Binary files /dev/null and b/public/img/locations-about.png differ diff --git a/public/img/locations-creation.png b/public/img/locations-creation.png new file mode 100644 index 0000000..6a8ad09 Binary files /dev/null and b/public/img/locations-creation.png differ diff --git a/public/img/locations-home.png b/public/img/locations-home.png new file mode 100644 index 0000000..feb55db Binary files /dev/null and b/public/img/locations-home.png differ diff --git a/src/app/(home)/page.tsx b/src/app/(home)/page.tsx index 2782fff..da6da97 100644 --- a/src/app/(home)/page.tsx +++ b/src/app/(home)/page.tsx @@ -128,7 +128,6 @@ const Page = () => {
-
45 sec

Build times comparison

{buildTimes.map((item) => (
diff --git a/src/app/docs/[[...slug]]/page.tsx b/src/app/docs/[[...slug]]/page.tsx index 7de03b2..0d9c3f5 100644 --- a/src/app/docs/[[...slug]]/page.tsx +++ b/src/app/docs/[[...slug]]/page.tsx @@ -2,6 +2,7 @@ import { notFound } from 'next/navigation'; import type { Metadata } from 'next'; import { DocsPage, DocsBody, DocsTitle, DocsDescription } from 'fumadocs-ui/page'; import { Tab, Tabs } from 'fumadocs-ui/components/tabs'; +import { Callout } from 'fumadocs-ui/components/callout'; import { Card, Cards } from 'fumadocs-ui/components/card'; import defaultMdxComponents, { createRelativeLink } from 'fumadocs-ui/mdx'; import { source } from '@/lib/source'; @@ -47,6 +48,7 @@ export default async function Page({ params }: PageParams) { a: createRelativeLink(source, page), Tabs, Tab, + Callout, Card, Cards }} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index ecf7969..2736f56 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,11 +3,18 @@ import { RootProvider } from 'fumadocs-ui/provider'; import SearchDialog from '@/components/search'; import { Inter } from 'next/font/google'; import type { ReactNode } from 'react'; +import type { Metadata } from 'next'; const inter = Inter({ subsets: ['latin'], }); +export const metadata: Metadata = { + icons: { + icon: '/favicon.svg', + }, +}; + export default function Layout({ children }: { children: ReactNode }) { return ( diff --git a/src/components/ui/PyroButton.tsx b/src/components/ui/PyroButton.tsx index f2cf823..3399d59 100644 --- a/src/components/ui/PyroButton.tsx +++ b/src/components/ui/PyroButton.tsx @@ -33,8 +33,8 @@ const button = cva( variant: { primary: ["bg-brand", "text-white", "hover:bg-brand/80"], secondary: ["bg-black dark:bg-white", "text-white dark:text-black", "hover:bg-black/80 dark:hover:bg-white/80"], - tertiary: ["bg-[#ffffff33]", "text-white", "hover:bg-[#ffffff55]"], - quaternary: ["bg-transparent", "text-white", "hover:bg-black/80", "border-[#ffffff33]", "hover:border-[#ffffff55]"], + tertiary: ["bg-black/10 dark:bg-[#ffffff33]", "text-black dark:text-white", "hover:bg-black/20 dark:hover:bg-[#ffffff55]"], + quaternary: ["bg-transparent", "text-black dark:text-white", "hover:bg-black/10 dark:hover:bg-black/80", "border-black/20 dark:border-[#ffffff33]", "hover:border-black/30 dark:hover:border-[#ffffff55]"], }, size: { ghost: [],