Pterodactyl Panel + Wings
Complete game server management panel with Wings daemon for container orchestration.
Overview
Pterodactyl Panel is a modern, open-source game server management platform built with PHP and designed to simplify the deployment and administration of game servers. Originally created to manage Minecraft servers, Pterodactyl has evolved into a comprehensive solution supporting dozens of game types including Rust, CS:GO, Garry's Mod, ARK, and many others. The panel provides a clean web interface for server creation, file management, console access, and user permissions, while Wings serves as the daemon that handles the actual container orchestration and server lifecycle management.
This stack combines Pterodactyl Panel with Wings daemon, creating a complete game server hosting platform where the panel handles the web interface and API while Wings manages Docker containers running the actual game servers. MariaDB stores all panel data including users, servers, and configurations, while Redis provides high-performance caching for sessions and queues. NGINX serves the panel's web interface and handles SSL termination, creating a production-ready game server management platform that can scale from single servers to multi-node deployments.
This configuration is ideal for game server hosting companies, community administrators running multiple servers, and homelab enthusiasts who want professional-grade game server management. The combination provides enterprise-level features like resource limiting, automated backups, scheduled tasks, and multi-user access control, making it valuable for anyone moving beyond basic game server hosting to a managed platform approach.
Key Features
- Multi-game server support with pre-configured eggs for Minecraft, Rust, CS:GO, ARK, and 50+ other games
- Wings daemon integration for Docker-based game server containers with automatic resource management
- Web-based file manager with syntax highlighting for configuration files and real-time editing
- SFTP access on port 2022 for secure file transfers and automated deployment scripts
- Redis-powered session management and queue processing for improved panel responsiveness
- MariaDB backend with optimized queries for handling thousands of servers and users
- Real-time server console access through WebSocket connections with command history
- Comprehensive API for automation, billing system integration, and custom management tools
Common Use Cases
- 1Game server hosting providers offering managed Minecraft, Rust, or Source engine servers
- 2Gaming communities managing multiple dedicated servers with different games and configurations
- 3Educational institutions providing game development environments for students
- 4Homelab administrators centralizing game server management for friends and family
- 5Development teams testing multiplayer games across different server configurations
- 6Tournament organizers needing rapid deployment and teardown of competitive game servers
- 7Modded game server communities requiring complex configuration management and file sharing
Prerequisites
- Docker host with minimum 4GB RAM (8GB+ recommended for multiple game servers)
- Port access for 80/443 (panel), 8080 (Wings API), 2022 (SFTP), and game server ports
- Domain name or static IP for proper SSL certificate configuration and Wings communication
- Basic understanding of game server configuration files and networking concepts
- Docker socket access for Wings container management and game server orchestration
- Environment variables configured for DB_PASSWORD and MYSQL_ROOT_PASSWORD before deployment
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 panel: 3 image: ghcr.io/pterodactyl/panel:latest4 environment: 5 - APP_URL=http://localhost6 - APP_TIMEZONE=UTC7 - APP_SERVICE_AUTHOR=admin@example.com8 - DB_HOST=mariadb9 - DB_PORT=330610 - DB_DATABASE=panel11 - DB_USERNAME=pterodactyl12 - DB_PASSWORD=${DB_PASSWORD}13 - CACHE_DRIVER=redis14 - SESSION_DRIVER=redis15 - QUEUE_DRIVER=redis16 - REDIS_HOST=redis17 volumes: 18 - panel-var:/app/var19 - panel-nginx:/etc/nginx/http.d20 - panel-logs:/app/storage/logs21 ports: 22 - "80:80"23 - "443:443"24 depends_on: 25 - mariadb26 - redis27 networks: 28 - pterodactyl-network29 restart: unless-stopped3031 mariadb: 32 image: mariadb:10.1133 environment: 34 - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}35 - MYSQL_DATABASE=panel36 - MYSQL_USER=pterodactyl37 - MYSQL_PASSWORD=${DB_PASSWORD}38 volumes: 39 - mariadb-data:/var/lib/mysql40 networks: 41 - pterodactyl-network42 restart: unless-stopped4344 redis: 45 image: redis:alpine46 volumes: 47 - redis-data:/data48 networks: 49 - pterodactyl-network50 restart: unless-stopped5152 wings: 53 image: ghcr.io/pterodactyl/wings:latest54 environment: 55 - TZ=UTC56 volumes: 57 - /var/run/docker.sock:/var/run/docker.sock58 - /var/lib/docker/containers:/var/lib/docker/containers59 - wings-config:/etc/pterodactyl60 - wings-data:/var/lib/pterodactyl61 - /tmp/pterodactyl:/tmp/pterodactyl62 ports: 63 - "8080:8080"64 - "2022:2022"65 networks: 66 - pterodactyl-network67 restart: unless-stopped6869volumes: 70 panel-var: 71 panel-nginx: 72 panel-logs: 73 mariadb-data: 74 redis-data: 75 wings-config: 76 wings-data: 7778networks: 79 pterodactyl-network: 80 driver: bridge.env Template
.env
1# Pterodactyl Panel2DB_PASSWORD=secure_db_password3MYSQL_ROOT_PASSWORD=secure_root_password45# Panel URL6APP_URL=http://localhostUsage Notes
- 1Panel at http://localhost
- 2Wings daemon at port 8080
- 3Create admin user: docker exec -it panel php artisan p:user:make
- 4Configure Wings in panel admin
- 5SFTP at port 2022
Individual Services(4 services)
Copy individual services to mix and match with your existing compose files.
panel
panel:
image: ghcr.io/pterodactyl/panel:latest
environment:
- APP_URL=http://localhost
- APP_TIMEZONE=UTC
- APP_SERVICE_AUTHOR=admin@example.com
- DB_HOST=mariadb
- DB_PORT=3306
- DB_DATABASE=panel
- DB_USERNAME=pterodactyl
- DB_PASSWORD=${DB_PASSWORD}
- CACHE_DRIVER=redis
- SESSION_DRIVER=redis
- QUEUE_DRIVER=redis
- REDIS_HOST=redis
volumes:
- panel-var:/app/var
- panel-nginx:/etc/nginx/http.d
- panel-logs:/app/storage/logs
ports:
- "80:80"
- "443:443"
depends_on:
- mariadb
- redis
networks:
- pterodactyl-network
restart: unless-stopped
mariadb
mariadb:
image: mariadb:10.11
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=panel
- MYSQL_USER=pterodactyl
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- mariadb-data:/var/lib/mysql
networks:
- pterodactyl-network
restart: unless-stopped
redis
redis:
image: redis:alpine
volumes:
- redis-data:/data
networks:
- pterodactyl-network
restart: unless-stopped
wings
wings:
image: ghcr.io/pterodactyl/wings:latest
environment:
- TZ=UTC
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers:/var/lib/docker/containers
- wings-config:/etc/pterodactyl
- wings-data:/var/lib/pterodactyl
- /tmp/pterodactyl:/tmp/pterodactyl
ports:
- "8080:8080"
- "2022:2022"
networks:
- pterodactyl-network
restart: unless-stopped
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 panel:5 image: ghcr.io/pterodactyl/panel:latest6 environment:7 - APP_URL=http://localhost8 - APP_TIMEZONE=UTC9 - APP_SERVICE_AUTHOR=admin@example.com10 - DB_HOST=mariadb11 - DB_PORT=330612 - DB_DATABASE=panel13 - DB_USERNAME=pterodactyl14 - DB_PASSWORD=${DB_PASSWORD}15 - CACHE_DRIVER=redis16 - SESSION_DRIVER=redis17 - QUEUE_DRIVER=redis18 - REDIS_HOST=redis19 volumes:20 - panel-var:/app/var21 - panel-nginx:/etc/nginx/http.d22 - panel-logs:/app/storage/logs23 ports:24 - "80:80"25 - "443:443"26 depends_on:27 - mariadb28 - redis29 networks:30 - pterodactyl-network31 restart: unless-stopped3233 mariadb:34 image: mariadb:10.1135 environment:36 - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}37 - MYSQL_DATABASE=panel38 - MYSQL_USER=pterodactyl39 - MYSQL_PASSWORD=${DB_PASSWORD}40 volumes:41 - mariadb-data:/var/lib/mysql42 networks:43 - pterodactyl-network44 restart: unless-stopped4546 redis:47 image: redis:alpine48 volumes:49 - redis-data:/data50 networks:51 - pterodactyl-network52 restart: unless-stopped5354 wings:55 image: ghcr.io/pterodactyl/wings:latest56 environment:57 - TZ=UTC58 volumes:59 - /var/run/docker.sock:/var/run/docker.sock60 - /var/lib/docker/containers:/var/lib/docker/containers61 - wings-config:/etc/pterodactyl62 - wings-data:/var/lib/pterodactyl63 - /tmp/pterodactyl:/tmp/pterodactyl64 ports:65 - "8080:8080"66 - "2022:2022"67 networks:68 - pterodactyl-network69 restart: unless-stopped7071volumes:72 panel-var:73 panel-nginx:74 panel-logs:75 mariadb-data:76 redis-data:77 wings-config:78 wings-data:7980networks:81 pterodactyl-network:82 driver: bridge83EOF8485# 2. Create the .env file86cat > .env << 'EOF'87# Pterodactyl Panel88DB_PASSWORD=secure_db_password89MYSQL_ROOT_PASSWORD=secure_root_password9091# Panel URL92APP_URL=http://localhost93EOF9495# 3. Start the services96docker compose up -d9798# 4. View logs99docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/pterodactyl-panel-complete/run | bashTroubleshooting
- Wings shows 'failed to connect to panel' error: Verify APP_URL matches your domain and Wings can reach panel on port 80/443
- Game servers fail to start with permission errors: Ensure Wings container has proper Docker socket access and /tmp/pterodactyl directory permissions
- Panel shows 500 errors after startup: Check MariaDB connection and run 'docker exec -it panel php artisan migrate' to initialize database schema
- SFTP connections refused on port 2022: Verify Wings container is running and port 2022 is not blocked by host firewall
- Session timeouts and slow panel performance: Check Redis container health and ensure CACHE_DRIVER and SESSION_DRIVER are set to redis
- Wings API unreachable from panel: Confirm Wings daemon is configured in panel admin with correct API endpoint and authentication token
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
pterodactyl-panelwingsmariadbredisnginx
Tags
#pterodactyl#gaming#management#game-servers#panel
Category
Home Lab & Self-HostingAd Space
Shortcuts: C CopyF FavoriteD Download