Compare commits

...

5 Commits

Author SHA1 Message Date
Muhammad Tamir
f327da93fc Add Minecraft Server JVM Flags 2025-11-23 18:11:41 +07:00
Muhammad Tamir
33379f1ba7 Minecraft Server Config Files 2025-11-23 16:32:00 +07:00
Muhammad Tamir
b54ca14a1e Create pterodactyl-docs.md 2025-11-20 13:30:44 +07:00
Muhammad Tamir
07c2220f81 SpigotMC API (1.21.6) 2025-11-19 18:12:40 +07:00
Muhammad Tamir
eab97c1e21 Update README.md 2025-11-16 21:25:43 +07:00
14 changed files with 1547 additions and 0 deletions

View File

@@ -1,2 +1,50 @@
# OpenWebUI-RAG
This repository contains resources, scripts, and outputs related to **OpenWebUI** with RAG (Retrieval-Augmented Generation) support.
> ⚠️ **Content Notice:** If you see material here that you own and want it removed, please **DM me on Discord: NekoMonci**. I will remove it promptly.
---
## About
OpenWebUI-RAG is designed to:
- Integrate knowledge bases into **OpenWebUI** for enhanced question answering.
- Allow dynamic loading of `.md` or `.mdx` documents as RAG sources.
- Support multiple LLM providers for retrieval-based generation.
This repository is part of my ongoing development projects under **YueMi-Development**.
---
## Usage
1. Clone the repository:
```bash
git clone https://git.yuemi.org/YueMi-Development/OpenWebUI-RAG.git
```
2. Add your knowledge base files (.md or .mdx) into the designated folder.
3. Configure your .env or CLI parameters for your LLM provider (OpenAI, Gemini, Anthropic).
4. Start the OpenWebUI server with RAG enabled.
---
## Contributing
Contributions are welcome! You can help improve this project by submitting Pull Requests:
- Fork the repository
- Create a new branch for your feature or fix
- Make your changes and test them
- Submit a Pull Request to the main repository
Please ensure your contributions are compatible with AGPL-3.0 licensing.
---
## License
This projects code is licensed under AGPL-3.0. Any included content that originates from external sources remains the property of the respective owners.
---
## Contact
- Discord: NekoMonci (for removal requests or questions)

View File

@@ -0,0 +1,46 @@
### Chunk Garbage Collection Period
If `chunk-gc.period-in-ticks >= 600`
Chunks stay loaded too long, increasing memory usage.
**Recommended:** 400
---
### Monster Spawn Tick Rate
If `ticks-per.monster-spawns = 1`
Monsters try to spawn every tick → CPU pressure.
**Recommended:** 4
---
### Monster Spawn Limits
If `spawn-limits.monsters >= 70`
Too many hostile entities active → TPS drops.
**Recommended:** 15
---
### Water Ambient Spawn Limits
If `spawn-limits.water-ambient >= 20`
Excessive fish/small water mobs impact performance.
**Recommended:** 5
---
### Ambient Spawn Limits
If `spawn-limits.ambient >= 15`
Bats and small mobs waste processing.
**Recommended:** 1
---
### Animal Spawn Limits
If `spawn-limits.animals >= 10`
Livestock growth creates ticking load.
**Recommended:** 5
---
### Water Animal Spawn Limits
If `spawn-limits.water-animals >= 15`
Too many dolphins/turtles → pathfinding stress.
**Recommended:** 5

View File

@@ -0,0 +1,74 @@
```markdown
# JVM Tuning: Optimized G1GC for Minecraft
## Introduction
After extensive research and testing, a set of Garbage Collection flags optimized for Minecraft using the G1GC collector has been developed. These flags ensure consistent server performance with minimal garbage collection spikes, making servers more reliable and stable in terms of TPS (Ticks Per Second).
## Recommended JVM Startup Flags
Use the following flags for Minecraft 1.15 and Java 8+:
```shell
java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paperclip.jar nogui
```
- **Note:** Adjust `Xmx` and `Xms` according to your available memory. Do not use all allocated memory to avoid OOM errors.
## Memory Recommendations
- **Minimum Memory:** 6-10GB
- **Memory Usage:** Leave room for the operating system by not using the full allocated memory.
- **For Memory > 12GB:** Adjust the following:
- `-XX:G1NewSizePercent=40`
- `-XX:G1MaxNewSizePercent=50`
- `-XX:G1HeapRegionSize=16M`
- `-XX:G1ReservePercent=15`
- `-XX:InitiatingHeapOccupancyPercent=20`
## Recommended Server Software
Switch to **Paper**, an optimized version of Spigot:
- Benefits: Performance improvements, bug and exploit fixes, new features, and enhanced API.
## Java GC Logging
- **Java 8-10:**
```shell
-Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1M
```
- **Java 11+:**
```shell
-Xlog:gc*:logs/gc.log:time,uptime:filecount=5,filesize=1M
```
## Technical Explanation of the Flags
- **-Xms matching -Xmx:** Ensure the server can use the entire `-Xmx` memory allocation.
- **G1NewSizePercent & G1MaxNewSizePercent:** Allocate a larger portion of memory to the New Generation for better performance.
- **G1MixedGCLiveThresholdPercent:** Set to 90 to reclaim old generation garbage quickly.
- **G1ReservePercent:** Increase to 20 to prevent memory allocation issues.
- **MaxTenuringThreshold:** Set to 1 to prevent transient data from moving to old generation.
- **SurvivorRatio:** Set to 32 to free up more regions for Eden.
- **AlwaysPreTouch:** Ensures memory is contiguous at start-up.
- **DisableExplicitGC:** Prevents plugins from triggering full garbage collections.
- **MaxGCPauseMillis:** Controls pause time during collections for minimal TPS impact.
- **ParallelRefProcEnabled:** Uses multiple threads for weak reference checking.
## Changelog
- **5/2/2020:** Added `+PerfDisableSharedMem`, adjusted `MixedGCTarget` to 4.
- **4/25/2020:** Removed `OmitStackTraces`.
- **4/5/2020:** Major refactor of flag suggestions.
- **10/4/2018:** Removed `AggressiveOpts` and `InitiatingHeapOccupancyPercent`.
- **8/18/2018:** Adjusted `MixedGCLiveThreshold` to 35.
## About Aikar
Daniel Ennis (Aikar) is a Senior Software Engineer and Entrepreneur, passionate about development and community building. He is the founder of Starlis LLC and operates Empire Minecraft.
---
**Copyright © 2007-2025 Aikar's Thoughts - All rights reserved**
```

View File

@@ -0,0 +1,103 @@
## Compatibility
My flags are only compatible and tested with:
- Java 24+,
- GraalVM JVM,
- Linux,
- Minecraft 1.20+
> [!TIP]
> Using MeowIce's Flags with [Leaf](https://github.com/Winds-Studio/Leaf) as server software can boost more performance !
# TL;DR: The flags
## G1GC version (for server below 32GB allocated heap)
> [!NOTE]
> This is recommended for servers allocated below 32GB RAM with basic resource usage. Balanced between memory usage and performance.
`--add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:G1HeapWastePercent=5 -XX:MaxTenuringThreshold=1 -XX:+PerfDisableSharedMem -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=3 -XX:+AlwaysActAsServerClassMachine -XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2M -XX:+UseLargePages -XX:+EagerJVMCI -XX:+UseStringDeduplication -XX:+UseAES -XX:+UseAESIntrinsics -XX:+UseFMA -XX:+UseLoopPredicate -XX:+RangeCheckElimination -XX:+OptimizeStringConcat -XX:+UseCompressedOops -XX:+UseThreadPriorities -XX:+OmitStackTraceInFastThrow -XX:+RewriteBytecodes -XX:+RewriteFrequentPairs -XX:+UseFPUForSpilling -XX:+UseFastStosb -XX:+UseNewLongLShift -XX:+UseVectorCmov -XX:+UseXMMForArrayCopy -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+UseXmmLoadAndClearUpper -XX:+UseXmmRegToRegMoveAll -XX:+EliminateLocks -XX:+DoEscapeAnalysis -XX:+AlignVector -XX:+OptimizeFill -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseCopySignIntrinsic -XX:+UseVectorStubs -XX:UseAVX=2 -XX:UseSSE=4 -XX:+UseFastJNIAccessors -XX:+UseInlineCaches -XX:+SegmentedCodeCache -Djdk.nio.maxCachedBufferSize=262144 -Djdk.graal.UsePriorityInlining=true -Djdk.graal.Vectorization=true -Djdk.graal.OptDuplication=true -Djdk.graal.DetectInvertedLoopsAsCounted=true -Djdk.graal.LoopInversion=true -Djdk.graal.VectorizeHashes=true -Djdk.graal.EnterprisePartialUnroll=true -Djdk.graal.VectorizeSIMD=true -Djdk.graal.StripMineNonCountedLoops=true -Djdk.graal.SpeculativeGuardMovement=true -Djdk.graal.TuneInlinerExploration=1 -Djdk.graal.LoopRotation=true -Djdk.graal.CompilerConfiguration=enterprise
`
## ZGC version (for server with 32GB+ allocated heap)
> [!NOTE]
> This is recommended for servers with more than 32GB of allocated memory and many CPU cores, allowing for minimizing the delay between each GC run with a larger heap size in an intensive environment.
> [!WARNING]
> Only use this if you have more than 10 CPU cores; using ZGC on systems with fewer than 8 cores may cause a significant performance impact !
`--add-modules=jdk.incubator.vector -XX:+UseZGC -XX:-ZProactive -XX:SoftMaxHeapSize=$((Memory - 2048))M -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:+PerfDisableSharedMem -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=1 -XX:+AlwaysActAsServerClassMachine -XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2M -XX:+UseLargePages -XX:+EagerJVMCI -XX:+UseStringDeduplication -XX:+UseAES -XX:+UseAESIntrinsics -XX:+UseFMA -XX:+UseLoopPredicate -XX:+RangeCheckElimination -XX:+OptimizeStringConcat -XX:+UseCompressedOops -XX:+UseThreadPriorities -XX:+OmitStackTraceInFastThrow -XX:+RewriteBytecodes -XX:+RewriteFrequentPairs -XX:+UseFPUForSpilling -XX:+UseFastStosb -XX:+UseNewLongLShift -XX:+UseVectorCmov -XX:+UseXMMForArrayCopy -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+UseXmmLoadAndClearUpper -XX:+UseXmmRegToRegMoveAll -XX:+EliminateLocks -XX:+DoEscapeAnalysis -XX:+AlignVector -XX:+OptimizeFill -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseCopySignIntrinsic -XX:+UseVectorStubs -XX:UseAVX=2 -XX:UseSSE=4 -XX:+UseFastJNIAccessors -XX:+UseInlineCaches -XX:+SegmentedCodeCache -Djdk.nio.maxCachedBufferSize=262144 -Djdk.graal.UsePriorityInlining=true -Djdk.graal.Vectorization=true -Djdk.graal.OptDuplication=true -Djdk.graal.DetectInvertedLoopsAsCounted=true -Djdk.graal.LoopInversion=true -Djdk.graal.VectorizeHashes=true -Djdk.graal.EnterprisePartialUnroll=true -Djdk.graal.VectorizeSIMD=true -Djdk.graal.StripMineNonCountedLoops=true -Djdk.graal.SpeculativeGuardMovement=true -Djdk.graal.TuneInlinerExploration=1 -Djdk.graal.LoopRotation=true -Djdk.graal.CompilerConfiguration=enterprise`
# What is MeowIce's Flags ?
MeowIce's Flags aimed to blend Aikar's Flags optimization with new JVM features to further boost the overall performance, while allowing it to use advanced CPU instructions to accelerate some workloads.
> [!NOTE]
> Hey don't forget to leave a star !
> <img width="756" height="157" alt="image" src="https://github.com/user-attachments/assets/4db8d2e9-e2fa-448e-9a52-7af7a6c7369a" />
# Why would I have to... switch ?
Almost 99% of Minecraft servers use Aikar's Flags, and it is recommended by many people (some use nothing !). But why use other flags ?
The answer is: We have now developed to Minecraft 1.21.x and Java 24 (at the time of writing this), and Aikar's Flags **was written mainly to optimize Minecraft's Garbage Collector** and Java version at that time (Java 8 and Java 11, around 2018 - 2020). Later Java versions (from Java 17 and above) have added many optimization options for the JVM. So I wrote a separate flag to support these optimizations and integrate new features of Java 17+ while still keeping Aikar's flags mainly to optimize GC. <ins>There's no risk in trying my flags !</ins>
# Why GraalVM but not AdoptiumJDK or OpenJDK ?
GraalVM with better JIT performance and more aggressive optimizations compared to traditional `HotSpot C2` found in many JDKs (including OpenJDK and AdoptiumJDK (aka. Eclipse Temurin)). This change makes inlining, loop unrolling, escape analysis, and vectorization work better while maintaining lower CPU usage.
Furthermore, the GraalVM compiler compiles plugins and server code faster and smarter, adapting to actual usage and environment on the fly.
> [!TIP]
> GraalVM allows you to inspect memory usage and trace down naughty plugins using VisualVM !
# Flags explanation
- `--add-modules=jdk.incubator.vector` Enables advanced vector computation capabilities for Pufferfish/Purpur 1.18+. Useful for optimizing chunk loading and rendering.
- ` -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=28 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:G1HeapWastePercent=5 -XX:MaxTenuringThreshold=1 -XX:+PerfDisableSharedMem -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1RSetUpdatingPauseTimePercent=0` These are very generic G1GC flags, based on [Aikar's Flags](https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/).
- `-XX:+UseNUMA` Enables NUMA or (Non Uniform Memory Access) for supported architecture.
- `-XX:-DontCompileHugeMethods` Allows the JVM to compile larger methods to optimize performance.
- `-XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000` Sets the maximum number of nodes for the compiler's intermediate representation.
- `-XX:ReservedCodeCacheSize=400M` Sets the cache size for compiled codes. This will ensure the JIT have enough space for compiling.
- `-XX:NonNMethodCodeHeapSize=12M` Sets the code heap size for non-method codes.
- `-XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M` Same as above but for profiled and non profiled methods.
- `-XX:NmethodSweepActivity=1` Helps managing code cache more efficiently by keeping "cold" code in the cache for a longer time. There is no risk of "filling up" the code cache either, as cold code is more aggressively removed as it fills up.
## Advanced Performance Tuning
- `-XX:+UseFastUnorderedTimeStamps` This option enables the usage of fast unordered timestamps for time-related operations in the JVM.
- `-XX:+UseCriticalJavaThreadPriority` This option assigns a higher priority to critical Java threads, which can improve responsiveness and reduce latency in critical parts of the application.
- `-XX:AllocatePrefetchStyle=3` This will instruct JVM to use code style 3 for faster memory allocation. A value of 3 enables the most aggressive prefetching. More aggressive prefetching is generally useful on newer CPUs with large caches.
- `-XX:+AlwaysActAsServerClassMachine` Forces the JVM to act as if it's running on a server-class machine.
- `-XX:+UseTransparentHugePages` As it name said.
- `-XX:LargePageSizeInBytes=2M` Size of huge (large) pages.
- `-XX:+UseLargePages` Enables the usage of large pages for the JVM's memory allocation. Large pages can improve performance by reducing Translation Lookaside Buffer misses.
- `-XX:+EagerJVMCI` Enables the JVM Compiler Interface as early as needed, especially with GraalVM.
- `-XX:+UseStringDeduplication` Reduces memory ussage by deduping identical strings. Might reduce frequent GCs.
- `-XX:+UseAES -XX:+UseAESIntrinsics` Enables Hardware accelerated Advanced Encryption Standart intrinsics.
- `-XX:+UseFMA` Enables Fused Multiply Add instructions.
- `-XX:+UseLoopPredicate` Enables loop predicate optimization.
- `-XX:+RangeCheckElimination` Enables the elimination of range checks.
- `-XX:+OptimizeStringConcat` Enables optimization of string concatenation in the JVM, which can lead to improved performance when working with string concatenation operations.
- `-XX:+UseCompressedOops` Enables the use of compressed object pointers (Oops) which reduces memory usage on 64-bit systems.
- `-XX:+UseThreadPriorities` Enables the use of thread priorities.
- `-XX:+OmitStackTraceInFastThrow` Omits the stack trace for exceptions that are frequently thrown.
- `-XX:+RewriteBytecodes -XX:+RewriteFrequentPairs` Improves performance by actively rewriting byte codes and its pairs.
- `-XX:+UseFPUForSpilling` Provides a faster temporary storage for spills, so when we need just a few additional spill slots, we can avoid tripping to L1 cache-backed stack for this.
- `-XX:+UseFastStosb` Enables support for fast string operations.
- `-XX:+UseNewLongLShift` Use optimized bitwise shift left.
- `-XX:+UseVectorCmov` This option enables the usage of vectorized compare and move (cmov) instructions for better performance on CPUs that support these instructions.
- `-XX:+UseXMMForArrayCopy -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+UseXmmRegToRegMoveAll` Uses XMM registers for Array Copy, int2double, int2float, register2register move operations
- `-XX:+UseXmmLoadAndClearUpper` Same as above but to load and clear upper registers.
- `-XX:+EliminateLocks` Improves single-threaded performance.
- `-XX:+DoEscapeAnalysis` Escape analysis is a technique by which the Java Hotspot Server Compiler can analyze the scope of a new object's uses and decide whether to allocate it on the Java heap.
- `-XX:+AlignVector` Aligns vectors for optimization.
- `-XX:+OptimizeFill` Enables optimization of memory fill operations.
- `-XX:+EnableVectorSupport` Its name suggested.
- `-XX:+UseCharacterCompareIntrinsics` Enables intrinsification of java.lang.Character functions.
- `-XX:+UseCopySignIntrinsic` Enables intrinsification of Math.copySign.
- `-XX:+UseVectorStubs` Optimizes vector operations.
- `-XX:UseAVX=2 -XX:UseSSE=4` Enable supported AVX, SSE instructions set on x86/x64 compatible CPUs.
- `-XX:+UseFastJNIAccessors` Use optimized versions of GetField.
- `-XX:+UseInlineCaches` Use Inline Caches for virtual calls
- `-XX:+SegmentedCodeCache` Enables the segmented code cache, which improves code cache management.
## GraalVM Compiler Specific Flags
- `-Djdk.nio.maxCachedBufferSize=262144` Sets the maximum size for cached direct buffers.
- `-Djdk.graal.UsePriorityInlining=true` Enables priority inlining in the Graal compiler.
- `-Djdk.graal.Vectorization=true` Enables vectorization in the Graal compiler.
- `-Djdk.graal.OptDuplication=true` Enables optimization duplication in the Graal compiler.
- `-Djdk.graal.DetectInvertedLoopsAsCounted=true` Enables detection of inverted loops as counted loops.
- `-Djdk.graal.LoopInversion=true` Enables loop inversion in the Graal compiler.
- `-Djdk.graal.VectorizeHashes=true` Enables vectorization of hash computations.
- `-Djdk.graal.VectorizeSIMD=true` Enables SIMD (Single Instruction - Multiple Data) vectorization.
- `-Djdk.graal.StripMineNonCountedLoops=true` Enables strip mining of non-counted loops.
- `-Djdk.graal.SpeculativeGuardMovement=true` Enables speculative guard movement in the Graal compiler.
- `-Djdk.graal.TuneInlinerExploration=1` Tunes the inliner exploration parameter in the Graal compiler.
- `-Djdk.graal.LoopRotation=true` Enables loop rotation in the Graal compiler.
- `-Djdk.graal.UseCountedLoopSafepoints=true` Enables safepoint insertion in counted loops.
- `-Djdk.graal.EnterprisePartialUnroll=true` Enables partial unrolling optimizations in enterprise mode.
- `-Djdk.graal.CompilerConfiguration=enterprise` Enables Enterprise mode optimizations in the Graal compiler.

View File

@@ -0,0 +1,168 @@
### Max Auto Save Chunks Per Tick
If `max-auto-save-chunks-per-tick >= 24`
Too many chunks saving per tick causes stutters.
**Recommended:** 6
---
### Optimize Explosions
If `optimize-explosions = false`
Explosion physics consume unnecessary CPU.
**Recommended:** Enable
---
### Mob Spawner Tick Rate
If `mob-spawner tick-rate = 1`
Spawner updates every tick → heavy load.
**Recommended:** 2
---
### Disable Chest Cat Detection
If `disable-chest-cat-detection = false`
Cats constantly check for chests → wasted processing.
**Recommended:** Enable
---
### Container Update Tick Rate
If `container-update = 1`
Containers (hoppers, chests) tick too frequently.
**Recommended:** 3
---
### Grass Spread Tick Rate
If `grass-spread = 1`
Grass updates too often in large areas.
**Recommended:** 4
---
## Despawn Ranges
### Ambient Mobs (bats etc.)
Soft ≥ 32 or Hard ≥ 128 is too far.
**Recommended:** Soft 28 / Hard 96
---
### Axolotls
Soft ≥ 32 or Hard ≥ 128 wastes pathfinding cycles.
**Recommended:** Soft 28 / Hard 96
---
### Creatures (passive mobs)
Soft ≥ 32 or Hard ≥ 128 → excess ticking.
**Recommended:** Soft 28 / Hard 96
---
### Misc Entities
Soft ≥ 32 or Hard ≥ 128 → extra tracking.
**Recommended:** Soft 28 / Hard 96
---
### Monsters
Soft ≥ 32 or Hard ≥ 128 keeps mobs active far away.
**Recommended:** Soft 28 / Hard 96
---
### Underground Water Creatures
Soft ≥ 32 or Hard ≥ 128 → intensive underwater AI.
**Recommended:** Soft 28 / Hard 96
---
### Water Ambient
Soft ≥ 32 or Hard ≥ 128 → too many small water mobs.
**Recommended:** Soft 28 / Hard 96
---
### Water Creatures (dolphins, turtles)
Soft ≥ 32 or Hard ≥ 128 causes pathfinding stress.
**Recommended:** Soft 28 / Hard 96
---
### Hopper Move Event
If `disable-move-event = false`
Hoppers trigger events constantly → lag.
**Recommended:** Enable
---
### Arrow Despawn (Non-Player)
If `non-player-arrow-despawn-rate = -1`
Arrows never despawn → entity buildup.
**Recommended:** 60
---
### Arrow Despawn (Creative Mode)
If `creative-arrow-despawn-rate = -1`
Infinite arrows remain in world.
**Recommended:** 60
---
### Prevent Moving into Unloaded Chunks
If `prevent-moving-into-unloaded-chunks = false`
Players can glitch into unfinished terrain → lag spikes.
**Recommended:** Enable
---
### Redstone Implementation
If `redstone-implementation != ALTERNATE_CURRENT`
Vanilla redstone is less efficient.
**Recommended:** Set to `ALTERNATE_CURRENT`
---
### Fix Climbing Bypassing Cramming Rule
If `fix-climbing-bypassing-cramming-rule = false`
Entities bypass cramming and cause mob stacks.
**Recommended:** Enable
---
### Armor Stand Collision Lookups
If `armor-stands.do-collision-entity-lookups = true`
Armor stands trigger expensive collision searches.
**Recommended:** Disable
---
### Armor Stand Tick (with certain plugins)
If animated plugins exist (PetBlocks, BlockBalls, ArmorStandTools)
Armor stands tick constantly.
**Recommended:** Disable
---
### Per-Player Mob Spawns
If `per-player-mob-spawns = false`
One player can hog mob cap → uneven performance.
**Recommended:** Enable
---
### Alt Item Despawn Rate
If `alt-item-despawn-rate.enabled = false`
All dropped items stay too long by default.
**Recommended:** Enable
---
## Entity-Per-Chunk Save Limits
If any of below = -1 (unlimited):
Experience Orbs, Snowballs, Ender Pearls, Arrows
Entity spam can corrupt chunks and harm TPS.
**Recommended:** 16 each

View File

@@ -0,0 +1,79 @@
### ❌ Plugins to Avoid or Replace
These plugins often duplicate server-side optimizations already handled by Paper/Purpur or they introduce new performance issues.
---
#### ClearLag / NoMobLag / ServerBooster / AntiLag
Plugins that claim to magically reduce lag usually **cause more lag** by forcing large cleanup ticks and interrupting natural game logic.
**Recommendation:** Remove them.
---
#### LagAssist
Useful **only** for analytics and prevention insights.
Disable all “performance optimization” and “lag removal” modules.
**Recommendation:** Keep minimal or remove.
---
#### BookLimiter
Paper already patches book-related crash exploits.
**Recommendation:** Remove.
---
#### LimitPillagers / VillagerOptimiser
Obsolete for **Minecraft 1.15+** due to internal AI and spawn behavior improvements.
**Recommendation:** Remove.
---
#### All Mob Stacking Plugins
(StackMob, Stacker, MobStacker, WildStacker)
Mob stacking increases CPU load, reduces AI batching, and introduces dupe bugs.
**Recommendation:** Remove.
---
#### FastAsyncWorldEdit (FAWE)
Can corrupt chunks and break block updates in complex edits.
**Recommendation:** Replace with **WorldEdit**.
---
#### IllegalStack / ExploitFixer
Paper already patches most duplication and crash exploits.
**Recommendation:** Remove.
---
#### EntityTrackerFixer
Paper includes modern tracking optimizations natively.
**Recommendation:** Remove.
---
#### Orebfuscator
Paper already offers **anti-Xray** systems.
**Recommendation:** Remove.
---
#### GroupManager / PermissionsEx / bPermissions
Heavily outdated permission systems.
**Recommendation:** Replace with **LuckPerms**.
---
### PhantomSMP
Phantom behavior control exists in Paper:
`phantoms-only-attack-insomniacs = true`
Regardless of the current setting — plugin is unnecessary.
**Recommendation:** Remove.
---
#### PacketLimiter
Duplicate of Paper network protection systems.
**Recommendation:** Remove.

View File

@@ -0,0 +1,18 @@
### 🔌 Plugin Redundancy (Remove if using Purpur)
#### SilkSpawners
Purpur already provides spawner mining and pickup support.
**Recommended:** Remove this plugin.
---
#### MineableSpawners
Functionality overlaps entirely with Purpurs built-in spawner mechanics.
**Recommended:** Remove this plugin.
---
#### VillagerLobotomizatornator
Purpur includes optimized villager lobotomization features.
Enable: `villager.lobotomize.enabled` in `purpur.yml`
**Recommended:** Remove plugin.

View File

@@ -0,0 +1,13 @@
### 📌 Pufferfish Configuration
#### Projectile: Max Loads Per Projectile
If set to **9 or higher**
Excessive projectile physics can increase entity workload.
**Recommended:** 8
---
#### DAB Feature Disabled
If `dab.enabled = false`
Disabling DAB removes optimizations that reduce block updates.
**Recommended:** Enable in `pufferfish.yml`

View File

@@ -0,0 +1,43 @@
### Alternate Keepalive
If `use-alternate-keepalive = false` and no TCPShield installed
Server keepalive may behave poorly and cause disconnect issues.
**Recommended:** Enable in purpur.yml
If `use-alternate-keepalive = true` and TCPShield is installed
TCPShield compatibility issues may occur.
**Recommended:** Disable in purpur.yml
---
### Useless Entity Packet Filtering
If `dont-send-useless-entity-packets = false`
Server still sends unnecessary packets → wasted bandwidth.
**Recommended:** Enable in purpur.yml
---
### Villager Brain Ticks
If `villager.brain-ticks = 1`
Villager AI becomes too active, increasing CPU load.
**Recommended:** 4
---
### Villager Iron Golem Spawn Radius
If `spawn-iron-golem.radius = 0`
May trigger excessive golem spawning and pathfinding load.
**Recommended:** 5
---
### Zombies Aggressive Toward Villagers When Lagging
If `aggressive-towards-villager-when-lagging = true`
Adds extra logic during TPS drops → counterproductive.
**Recommended:** Disable
---
### Player Teleport Outside World Border
If `teleport-if-outside-border = false`
Players stuck outside border can cause ticking issues.
**Recommended:** Enable

View File

@@ -0,0 +1,11 @@
### Network Compression Threshold
If `network-compression-threshold <= 256` and `bungeecord = false`
Low compression threshold increases bandwidth usage and CPU load.
**Recommended:** 512
---
### Simulation Distance
If `simulation-distance >= 9`
Large simulation radius causes heavy ticking load on server threads.
**Recommended:** 5 or lower

View File

@@ -0,0 +1,125 @@
## 📘 Spigot Optimization Knowledge Base
### Entity Activation Range — Animals
If `entity-activation-range.animals >= 32`
This range is too high and wastes server performance.
**Recommended:** 16
---
### Entity Activation Range — Monsters
If `entity-activation-range.monsters >= 32`
Monster ticking costs rise significantly.
**Recommended:** 16
---
### Entity Activation Range — Misc
If `entity-activation-range.misc >= 16`
Unnecessary processing for miscellaneous entities.
**Recommended:** 12
---
### Entity Activation Range — Water
If `entity-activation-range.water >= 16`
Water mobs cause extra chunk activity.
**Recommended:** 12
---
### Entity Activation Range — Villagers
If `entity-activation-range.villagers >= 32`
Villagers wake up far chunks → lag.
**Recommended:** 16
---
### Tick Inactive Villagers
If `tick-inactive-villagers = true`
Villagers continue logic even when inactive.
**Recommended:** Disable
---
### Wake Up Inactive — Villagers For
If `villagers-max-per-tick >= 1 AND villagers-for >= 100`
Villagers waking too often stresses CPU.
**Recommended:** 20
---
### Wake Up Inactive — Flying Monsters For
If `flying-monsters-max-per-tick >= 1 AND flying-monsters-for >= 100`
Causes ticking of distant mobs.
**Recommended:** 60
---
### Wake Up Inactive — Villagers Max Per Tick
If `villagers-max-per-tick >= 4`
Too many villagers regain full AI at once.
**Recommended:** 1
---
### Wake Up Inactive — Animals For
If `animals-max-per-tick >= 1 AND animals-for >= 100`
Animal inactive chunks wake too often.
**Recommended:** 40
---
### Wake Up Inactive — Monsters Max Per Tick
If `monsters-max-per-tick >= 8`
Large spikes in AI processing.
**Recommended:** 4
---
### Wake Up Inactive — Flying Monsters Max Per Tick
If `flying-monsters-max-per-tick >= 8`
Causes unstable performance in caves/sky.
**Recommended:** 1
---
### Wake Up Inactive — Animals Max Per Tick
If `animals-max-per-tick >= 4`
More entity AI waking per tick = CPU waste.
**Recommended:** 2
---
### Wake Up Inactive — Monsters For
If `monsters-max-per-tick >= 1 AND monsters-for >= 100`
Monsters activate too frequently.
**Recommended:** 60
---
### Arrow Despawn Rate
If `arrow-despawn-rate >= 1200`
Arrows remain too long → memory clutter.
**Recommended:** 300
---
### Merge Radius — Items
If `merge-radius.item <= 2.5`
Item clutter increases unnecessary entity load.
**Recommended:** 4.0
---
### Merge Radius — XP Orbs
If `merge-radius.exp <= 3.0`
XP entities pile up and cause lag.
**Recommended:** 6.0
---
### Max Entity Collisions
If `max-entity-collisions >= 8`
Mass collisions slow physics operations.
**Recommended:** 2

View File

@@ -0,0 +1,43 @@
### 🧱 Spawner Optimization
#### Spawner Particles Enabled
If **true**
Particles from spawners add unnecessary client render load.
**Recommended:** Disable
#### Max Nearby Entities High
If **greater than 6**
Too many mobs spawn per spawner, increasing tick pressure.
**Recommended:** 6 or lower
---
### 👹 Mob Performance Settings
#### Entity Collisions Enabled
If **true**
Physical mob collisions significantly increase entity calculations.
**Recommended:** Disable
#### Optimize Mobs Disabled
If **false**
Skipping optimization wastes server performance.
**Recommended:** Enable
---
### 🌍 Regionized Chunk Ticking
#### Regionized Chunk Ticking Enabled
If **true**
Still experimental and known to introduce instability.
**Recommended:** Keep disabled
---
### ⚙ System Optimization
#### Virtual Threads Disabled
If **false**
Virtual threads improve async handling (Java 21+ runtime strongly recommended).
**Recommended:** Enable

View File

@@ -0,0 +1,776 @@
```markdown
# Pterodactyl Knowledge Base
## Table of Contents
- [Introduction](#introduction)
- [About Pterodactyl](#about-pterodactyl)
- [Key Features](#key-features)
- [Installation Guides](#installation-guides)
- [Panel Installation](#panel-installation)
- [Wings Installation](#wings-installation)
- [Webserver Configuration](#webserver-configuration)
- [Community Guides and Tutorials](#community-guides-and-tutorials)
- [Creating a New Node](#creating-a-new-node)
- [Creating a Custom Docker Image](#creating-a-custom-docker-image)
- [Creating a Custom Egg](#creating-a-custom-egg)
- [Operating System Specific Installations](#operating-system-specific-installations)
- [Enterprise Linux 8 and Fedora Server 40](#enterprise-linux-8-and-fedora-server-40)
- [Debian 11, 12 & 13](#debian-11-12-13)
- [CentOS 7](#centos-7)
- [Advanced Configurations](#advanced-configurations)
- [Using Mounts](#using-mounts)
- [Upgrading PHP](#upgrading-php)
- [Development and Customization](#development-and-customization)
- [Building Wings](#building-wings)
- [Building Panel Assets](#building-panel-assets)
- [Legacy Upgrades](#legacy-upgrades)
- [Kernel Modifications](#kernel-modifications)
## Introduction
Welcome to the Pterodactyl Knowledge Base. This document provides structured information on installing, configuring, and using Pterodactyl, a game server management panel.
## About Pterodactyl
**Pterodactyl®** is a free, open-source game server management panel built with PHP, React, and Go. It runs all game servers in isolated Docker containers for security, providing a user-friendly interface.
## Key Features
- **Security First**: Uses bcrypt hashing, AES-256-CBC encryption, and HTTPS support.
- **Modern Tooling**: Built on a modern stack with best design practices.
- **Docker to the Core**: Runs all servers in isolated Docker containers.
- **Free & Open Source**: Fully open source under a MIT license.
- **User Friendly**: Intuitive interface for easy management.
- **Scalable**: Suitable for hosting companies and personal use.
## Installation Guides
### Panel Installation
- **Current Version**: 1.11
- **Getting Started**: Includes webserver configuration, additional configuration, updating, and troubleshooting.
### Wings Installation
- **Current Version**: 1.11
- **Installation**: Instructions for installing, upgrading, and migrating to Wings.
### Webserver Configuration
- Prepare SSL certificates before configuring NGINX or Apache.
- Use Caddy for automatic SSL management if needed.
- Specific configurations provided for NGINX and Apache.
## Community Guides and Tutorials
### Creating a New Node
- **Location Information Required**: Name, description, location, FQDN, SSL communication, server directory, memory, and disk space allocations.
- **Installation**: Install the Daemon and configure the node.
### Creating a Custom Docker Image
- **Dockerfile Creation**: Use Alpine Linux, install dependencies, create a container user, and set the work directory and entrypoint.
- **Entrypoint Script**: Modify startup commands and run the server.
### Creating a Custom Egg
- **Service Creation**: Create new options, configure process management, stop commands, log storage, and configuration files.
- **Variables**: Define specific variables and permissions for users.
## Operating System Specific Installations
### Enterprise Linux 8 and Fedora Server 40
- **Dependencies**: Install Docker and configure firewall.
- **Wings Installation**: Follow official documentation.
### Debian 11, 12 & 13
- **Dependencies**: Install PHP, MariaDB, Redis, and other necessary packages.
- **Installation**: Follow official documentation for further steps.
### CentOS 7
- **Dependencies**: Install Docker, configure SELinux, and set up the firewall.
- **Panel Installation**: Follow official documentation for further steps.
## Advanced Configurations
### Using Mounts
- **Configuration**: Specify mountable directories in the Wings configuration.
- **Panel Setup**: Configure mounts in the admin panel for server use.
### Upgrading PHP
- **Version Requirements**: Reference table for PHP versions by panel version.
- **Installation**: Commands to add repositories and install PHP 8.3.
## Development and Customization
### Building Wings
- **Build Requirements**: Requires Go programming knowledge.
- **Process**: Compile Wings and install the binary.
### Building Panel Assets
- **Dependencies**: NodeJS and Yarn required.
- **Build Process**: Rebuild the Panel frontend using Yarn.
## Legacy Upgrades
- **Version Transition**: Guide for upgrading from 0.7.X to 1.3.x.
- **Maintenance Mode**: Enter maintenance mode before upgrading dependencies.
## Kernel Modifications
- **Update Process**: Install new kernels and update GRUB.
- **Verification**: Confirm kernel installation and set default boot.
For more detailed information and additional sections, please refer to the official Pterodactyl documentation and community guides.
```
```markdown
# Pterodactyl Knowledge Base
This structured knowledge base provides detailed instructions and information for installing, configuring, and troubleshooting Pterodactyl Panel and related components.
## Table of Contents
- [Installation](#installation)
- [Download Files](#download-files)
- [Installation Process](#installation-process)
- [Environment Configuration](#environment-configuration)
- [Queue Listeners](#queue-listeners)
- [Enterprise Linux 8 and Fedora Server 40](#enterprise-linux-8-and-fedora-server-40)
- [Install Dependencies](#install-dependencies)
- [PHP Configuration](#php-configuration)
- [Additional Configuration](#additional-configuration)
- [Backups](#backups)
- [Reverse Proxy Setup](#reverse-proxy-setup)
- [reCAPTCHA](#recaptcha)
- [Telemetry](#telemetry)
- [Updating the Panel](#updating-the-panel)
- [Panel Version Requirements](#panel-version-requirements)
- [Manual Upgrade](#manual-upgrade)
- [Standalone SFTP Server](#standalone-sftp-server)
- [Webserver Configuration](#webserver-configuration)
- [Community Standards](#community-standards)
- [Terminology](#terminology)
- [Migrating to Wings](#migrating-to-wings)
- [Troubleshooting](#troubleshooting)
- [About](#about)
- [Core Project Team](#core-project-team)
- [Sponsors](#sponsors)
- [License](#license)
- [Creating SSL Certificates](#creating-ssl-certificates)
## Installation
### Download Files
1. **Create Directory**: Create a directory for the panel and navigate to it.
```bash
mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
```
2. **Download Panel Files**: Use `curl` to download the panel files and set permissions.
```bash
curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
tar -xzvf panel.tar.gz
chmod -R 755 storage/* bootstrap/cache/
```
### Installation Process
1. **Database Setup**: Create a database and user with the necessary permissions.
```sql
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'yourPassword';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1' WITH GRANT OPTION;
```
2. **Install Core Dependencies**: Copy environment settings and install dependencies.
```bash
cp .env.example .env
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader
```
3. **Generate Encryption Key**: Generate a new encryption key.
```bash
php artisan key:generate --force
```
4. **Environment Setup**: Configure sessions, caching, and email sending.
```bash
php artisan p:environment:setup
php artisan p:environment:database
php artisan p:environment:mail
```
5. **Database Migration**: Set up the database tables.
```bash
php artisan migrate --seed --force
```
6. **Create Admin User**: Create an administrative user.
```bash
php artisan p:user:make
```
7. **Set File Permissions**: Set the correct permissions for the webserver.
```bash
chown -R www-data:www-data /var/www/pterodactyl/*
```
### Queue Listeners
- **Crontab Configuration**: Add a cronjob for processing tasks.
```bash
* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
```
- **Queue Worker**: Create a systemd worker for the queue process.
## Enterprise Linux 8 and Fedora Server 40
### Install Dependencies
1. **Update System**:
```bash
sudo dnf update -y
```
2. **Install Repositories**:
```bash
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
```
3. **Enable PHP 8.3**:
```bash
sudo dnf module reset php
sudo dnf module enable php:remi-8.3 -y
```
4. **Install Dependencies**:
```bash
sudo dnf install -y php php-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} mariadb mariadb-server nginx redis zip unzip tar
```
5. **Enable Services**:
```bash
sudo systemctl enable --now mariadb nginx redis
```
6. **Firewall Configuration**:
```bash
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
```
### PHP Configuration
- **Create PHP-FPM Configuration**:
```ini
[pterodactyl]
user = nginx
group = nginx
listen = /var/run/php-fpm/pterodactyl.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0750
pm = ondemand
pm.max_children = 9
pm.process_idle_timeout = 10s
pm.max_requests = 200
```
- **Start PHP-FPM**:
```bash
sudo systemctl enable --now php-fpm
```
## Additional Configuration
### Backups
- **Local Backups**: Set the backup driver in `.env`.
```env
APP_BACKUP_DRIVER=wings
```
- **S3 Backups**: Configure S3 settings in `.env`.
```env
APP_BACKUP_DRIVER=s3
AWS_DEFAULT_REGION=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_BACKUPS_BUCKET=
AWS_ENDPOINT=
```
### Reverse Proxy Setup
- **Modify `.env` for Proxies**:
```env
TRUSTED_PROXIES=127.0.0.1
```
- **NGINX Configuration**:
```nginx
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
```
### reCAPTCHA
- **Configuring reCAPTCHA**: Generate and apply your own keys in the admin panel.
- **Disable reCAPTCHA**: Use the admin panel to disable reCAPTCHA if necessary.
### Telemetry
- **How It Works**: Telemetry collects anonymous usage data to help improve the software.
- **Enabling/Disabling Telemetry**:
```env
PTERODACTYL_TELEMETRY_ENABLED=true
```
## Updating the Panel
### Panel Version Requirements
- Ensure your Wings version matches the Panel version. Supported PHP versions vary by Panel version.
### Manual Upgrade
1. **Enter Maintenance Mode**:
```bash
php artisan down
```
2. **Download Update**:
```bash
curl -L https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz | tar -xzv
```
3. **Update Dependencies**:
```bash
composer install --no-dev --optimize-autoloader
```
4. **Clear Cache**:
```bash
php artisan view:clear
php artisan config:clear
```
5. **Database Updates**:
```bash
php artisan migrate --seed --force
```
6. **Set Permissions**:
```bash
chown -R www-data:www-data /var/www/pterodactyl/*
```
7. **Restart Queue Workers**:
```bash
php artisan queue:restart
```
8. **Exit Maintenance Mode**:
```bash
php artisan up
```
## Standalone SFTP Server
- **Disable Daemon's SFTP**: Modify your Daemon's `core.json`.
```json
"sftp": {
"enabled": false
}
```
- **Download and Start Standalone Server**:
```bash
curl -Lo sftp-server https://github.com/pterodactyl/sftp-server/releases/download/v1.0.5/sftp-server
chmod +x sftp-server
./sftp-server
```
## Webserver Configuration
- **Remove Default Configuration**: Remove default NGINX configuration.
```bash
rm /etc/nginx/sites-enabled/default
```
- **Create NGINX Configuration File**: Replace `<domain>` with your domain.
```nginx
server {
listen 80;
server_name <domain>;
return 301 https://$server_name$request_uri;
}
```
- **Enable Configuration**: Symlink and restart NGINX.
```bash
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
sudo systemctl restart nginx
```
## Community Standards
- **Be Mature**: Maintain maturity and respect in all interactions.
- **Limit Drama**: Avoid negative discussions about others.
- **Be Patient**: Understand that support is community-driven and voluntary.
- **Commercial Services**: Avoid discussing paid services unless noted.
## Terminology
- **Panel**: The Pterodactyl Panel itself.
- **Node**: A machine running an instance of Wings.
- **Wings**: Service interfacing with Docker and the Panel.
- **Server**: A running instance created by the panel.
- **Docker**: Platform for running containerized applications.
- **Nest/Egg**: Configuration for specific games or services.
## Migrating to Wings
1. **Install Wings**:
```bash
mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64
chmod u+x /usr/local/bin/wings
```
2. **Copy Configuration File**: Create `config.yml` in `/etc/pterodactyl`.
3. **Remove Old Daemon**:
```bash
systemctl stop wings
rm -rf /srv/daemon
apt -y remove nodejs
```
4. **Daemonize Wings**: Update `wings.service` and start Wings.
```systemd
[Unit]
Description=Pterodactyl Wings Daemon
After=docker.service
[Service]
User=root
WorkingDirectory=/etc/pterodactyl
ExecStart=/usr/local/bin/wings
[Install]
WantedBy=multi-user.target
```
## Troubleshooting
### Reading Error Logs
- **Retrieve Logs**:
```bash
tail -n 100 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log
```
- **Understand Errors**: Focus on the human-readable exception line.
### Cannot Connect to Server Errors
- **Check Wings Status**:
```bash
systemctl status wings
```
- **Browser Console Check**: Use developer tools to inspect errors.
### Invalid MAC Exception
- **Restore `APP_KEY`**: Ensure original `APP_KEY` is restored from `.env`.
### SELinux Issues
- **Allow Redis**:
```bash
audit2allow -a -M redis_t
semodule -i redis_t.pp
```
- **Allow HTTP Port**:
```bash
audit2allow -a -M http_port_t
semodule -i http_port_t.pp
```
## About
### Core Project Team
- **Dane Everitt**: Founder & Former Project Maintainer
- **Matthew Penner**: Project Maintainer
- **Stepan Fedotov**: WHMCS Module Maintainer
- **Michael Parker**: Egg Developer, Docker Integration
### Sponsors
- **Aussie Server Hosts**: High Performance Server Hosting
- **CodeNode LLC**: Affordable hosting with dedicated IPs
- **BisectHosting**: Reliable server hosting since 2012
- **MineStrator**: Highend French hosting company
- **HostEZ**: US & EU Hosting with DDoS Protection
### License
- **MIT License**: Code released under the MIT License.
## Creating SSL Certificates
1. **Install Certbot**:
```bash
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
```
2. **Generate Certificate**:
```bash
certbot certonly --nginx -d example.com
```
3. **Auto Renewal**:
```bash
0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"
```
4. **Troubleshooting**: Renew certificates and restart services if expired.
```bash
certbot renew
systemctl restart nginx
```
```
```markdown
# Knowledge Base
## Reconfiguring Caddy to Use Cloudflare DNS
### Steps to Create an API Token
1. Under **Zone Resources**, select your DNS zone.
2. Click "Continue to summary".
3. Review the API token summary and click "Create Token".
4. Copy the API token to the clipboard.
### Configuring Caddy
- Create an environment variable file (e.g., `.env`) at `/etc/caddy/.secrets.env`.
- Store the Cloudflare API token:
```env
CLOUDFLARE_API_TOKEN=<your cloudflare api token>
```
- Set permissions to 0600 for security:
```bash
chown caddy:caddy /etc/caddy/.secrets.env
chmod 0600 /etc/caddy/.secrets.env
```
- Modify the systemd unit file at `/etc/systemd/system/caddy.service`:
```ini
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --envfile /etc/caddy/.secrets.env --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
```
- Add a TLS block to your Caddyfile at `/etc/caddy/Caddyfile`:
```caddyfile
<domain> {
# ...
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
}
```
## Installing Wings | Pterodactyl
### Overview
- Wings is the next-generation server control plane from Pterodactyl.
### Supported Systems
- **Ubuntu**: 20.04, 22.04, 24.04
- **RHEL / Rocky Linux / AlmaLinux**: 8, 9
- **Debian**: 11, 12, 13
- **Windows**: Not supported
### System Requirements
- Requires Linux capable of running Docker containers.
- KVM is guaranteed to work.
- Check virtualization with `systemd-detect-virt`.
### Installing Docker
- Quick install:
```bash
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
```
- Ensure Docker starts on boot:
```bash
sudo systemctl enable --now docker
```
### Setting Up Swap
- For kernels 6.1 or newer, swap is enabled by default.
- Enable swap:
```bash
GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"
sudo update-grub
sudo reboot
```
### Installing Wings
- Create directory structure and download Wings:
```bash
sudo mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
sudo chmod u+x /usr/local/bin/wings
```
### Configure and Start Wings
- Create a node on the Panel and configure with `config.yml`.
- Start Wings in debug mode:
```bash
sudo wings --debug
```
### Daemonizing Wings
- Create `wings.service` in `/etc/systemd/system`:
```ini
[Unit]
Description=Pterodactyl Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
User=root
WorkingDirectory=/etc/pterodactyl
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target
```
- Enable and start Wings:
```bash
sudo systemctl enable --now wings
```
### Node Allocations
- Create allocations via Nodes > Allocation.
- Avoid using 127.0.0.1 for allocations.
## Introduction to Pterodactyl
### Overview
- Pterodactyl is an open-source game server management panel.
- Built with PHP, React, and Go.
- Uses Docker containers for game server isolation.
### Supported Games
- Minecraft, Rust, Terraria, Team Fortress 2, and more.
- Community-supported games include Factorio, FiveM, and others.
### Responsible Disclosure
- Open-source and open to security audits.
- Report concerns to [email protected].
## Upgrading Wings
### Overview
- Upgrading Wings is simple and quick.
### Version Requirements
- Panel and Wings versions must match.
### Steps to Upgrade
1. Stop Wings:
```bash
systemctl stop wings
```
2. Download the updated binary:
```bash
curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
chmod u+x /usr/local/bin/wings
```
3. Restart Wings:
```bash
systemctl restart wings
```
## Setting up MySQL for Pterodactyl
### Creating a Database for Pterodactyl
- Login to MySQL:
```bash
mysql -u root -p
```
- Create a user and database:
```sql
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'somePassword';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1';
```
### Creating a Database Host for Nodes
- Create a MySQL user with permissions:
```sql
CREATE USER 'pterodactyluser'@'127.0.0.1' IDENTIFIED BY 'somepassword';
GRANT ALL PRIVILEGES ON *.* TO 'pterodactyluser'@'127.0.0.1' WITH GRANT OPTION;
```
- Allow external database access by modifying `my.cnf`:
```ini
[mysqld]
bind-address=0.0.0.0
```
## Additional Configuration for Pterodactyl
### Private Registries
- Authenticate against private Docker registries.
### Custom Network Interfaces
- Change network interface for containers.
### Enabling Cloudflare Proxy
- Adjust Wings port for Cloudflare proxy.
### Container PID Limit
- Set the limit for active processes in a container.
### Throttles and Limits
- Customize throttle settings for server output.
### Installer Limits
- Define resource limits for installer containers.
### Other Values
- Configure miscellaneous settings such as debug mode and timeout.
```