What are Mounts?
A mount creates a bind mount from the host filesystem into server containers. Fromapp/Models/Mount.php:56-63:
Mount Properties
- Name: Unique identifier for the mount
- Description: What the mount contains
- Source: Path on the host system
- Target: Path inside the container
- Read Only: Whether users can write to the mount
- User Mountable: Whether users can mount/unmount themselves
Creating a Mount
Configure Mount Details
Basic Information
- Name: Unique name (e.g.,
shared-maps,plugin-library) - Description: What this mount provides
Set Paths
Mount Paths
- Source: Host path (e.g.,
/mnt/shared/maps) - Target: Container path (e.g.,
/home/container/maps)
Configure Permissions
Access Settings
- Read Only: Check if users should not be able to write
- User Mountable: Allow users to mount this themselves
Path Restrictions
Certain paths are blacklisted for security (fromapp/Models/Mount.php:87-98):
Invalid Source Paths
Invalid Target Paths
Assigning Mounts to Nodes
Mounts must be assigned to nodes before they can be used:
From
app/Http/Controllers/Admin/MountController.php:132-144:
Only nodes with this mount assigned will have the directory available in containers.
Assigning Mounts to Eggs
Mounts can be restricted to specific eggs:
From
app/Http/Controllers/Admin/MountController.php:113-127:
Why Assign to Eggs?
Assigning mounts to specific eggs ensures:- Only relevant servers get the mount
- Better security and isolation
- Cleaner server configurations
- Map mounts only for Source Engine eggs
- Plugin directories only for Minecraft eggs
- Asset libraries only for specific game types
Mount Relationships
Mounts use many-to-many relationships:Eggs Relationship
Fromapp/Models/Mount.php:105-108:
Nodes Relationship
Fromapp/Models/Mount.php:115-118:
Servers Relationship
Fromapp/Models/Mount.php:125-128:
User Mountable Option
Whenuser_mountable is enabled:
- Users can see the mount in their server settings
- Users can toggle the mount on/off for their servers
- Useful for optional content (maps, plugins)
- Only admins can assign the mount
- Automatically mounted on applicable servers
- Users cannot remove it
Node Configuration
When a mount is assigned to a node, it’s added to the Wings configuration. Fromapp/Models/Node.php:165:
Common Use Cases
Shared Map Repository
Use Case: Share a collection of maps across all Source Engine servers- CS:GO, TF2, Garry’s Mod eggs
- All nodes hosting Source servers
Plugin Library
Use Case: Provide a library of plugins users can access- Paper, Spigot, Bukkit eggs
- All Minecraft nodes
Shared Configuration
Use Case: Enforce consistent configuration filesMod Repository
Use Case: Provide mods for users to installSecurity Considerations
Read-Only Mounts
Always use read-only mounts unless write access is required:- Prevents users from modifying shared content
- Protects against malicious file modifications
- Ensures consistency across servers
Path Validation
Be careful with mount paths:- Never mount sensitive system directories
- Avoid mounting directories with write access to critical files
- Use specific paths, not broad directories
User Mountable Security
Only make mounts user-mountable if:- The content is safe for all users
- Read-only access is enforced
- The mount doesn’t contain sensitive data
Managing Existing Mounts
Viewing Mounts
The mounts index page shows:- Mount name and description
- Source and target paths
- Number of assigned nodes
- Number of assigned eggs
- Number of servers using the mount
Editing a Mount
Removing Nodes or Eggs
To remove a node or egg assignment:- Navigate to the mount
- Click the X next to the node or egg
- Confirm removal
app/Http/Controllers/Admin/MountController.php:149-163:
Deleting a Mount
From
app/Http/Controllers/Admin/MountController.php:103-108:
Troubleshooting
Mount Not Available
Problem: Mount doesn’t appear in server settings Solutions:- Verify mount is assigned to the server’s egg
- Check mount is assigned to the server’s node
- Ensure
user_mountableis enabled (if user-facing) - Restart Wings on the node
Permission Denied
Problem: Servers can’t access mounted files Solutions:- Check source directory exists on the node
- Verify directory permissions (should be readable by Wings)
- Check SELinux/AppArmor policies
- Ensure Docker can access the path
Files Not Syncing
Problem: Changes to source aren’t visible in containers Solutions:- Verify the mount is active (check server settings)
- Restart the server container
- Check Wings logs for mount errors
- Ensure source path is correct
Best Practices
- Use Read-Only: Default to read-only mounts for security
- Specific Paths: Mount specific directories, not entire drives
- Document Mounts: Clearly describe what each mount provides
- Test First: Test mounts on a development server before production
- Consistent Paths: Use the same source paths across all nodes
- Regular Audits: Review mounts periodically for security
- Backup Sources: Keep backups of important mounted directories
Next Steps
Nests & Eggs
Learn about assigning mounts to eggs
Node Management
Understand node configuration for mounts
