pterodactyl install guide.txt
· 31 KiB · Text
Raw
╔══════════════════════════════════════════════════════════════════╗
║ PTERODACTYL PANEL & WINGS INSTALLATION GUIDE (ASCII) ║
║ Complete Step-by-Step Walkthrough ║
╚══════════════════════════════════════════════════════════════════╝
┌─────────────────────────────────────────────────────────────────┐
│ STEP 1: START THE INSTALLATION │
└─────────────────────────────────────────────────────────────────┘
Run this command as root:
# bash <(curl -s https://pterodactyl-installer.se)
┌─────────────────────────────────────────────────────────────────┐
│ STEP 2: SELECT INSTALLATION TYPE │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Which version of Pterodactyl do you want to install? │
│ 1) Panel │
│ 2) Wings │
│ 3) Both (Panel & Wings) │
└─────────────────────────────────────────────────────────────┘
>>> SELECT: 3 (BOTH)
> Type "3" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 3: CONFIRM INSTALLATION │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ * Are you sure you want to continue? (y/N): │
└─────────────────────────────────────────────────────────────┘
>>> SELECT: y (YES)
> Type "y" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 4: DATABASE CONFIGURATION │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ * Do you want to automatically configure the database? │
│ (y/N): │
└─────────────────────────────────────────────────────────────┘
>>> SELECT: y (YES)
> Type "y" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 5: DATABASE USERNAME & PASSWORD │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ * Database host username (pterodactyluser): │
└─────────────────────────────────────────────────────────────┘
>>> LEAVE BLANK: Press ENTER (uses default)
┌─────────────────────────────────────────────────────────────────┐
│ * Database host password: │
└─────────────────────────────────────────────────────────────────┘
>>> IMPORTANT! Type a strong password (write it down!)
> Example: MyStr0ngP@ssw0rd!2026
> Press ENTER after typing
┌─────────────────────────────────────────────────────────────────┐
│ STEP 6: MYSQL EXTERNAL ACCESS │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ * Do you want to configure MySQL to be accessed │
│ externally? (y/N): │
└─────────────────────────────────────────────────────────────┘
>>> SELECT: n (NO)
> Type "n" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 7: EMAIL CONFIGURATION │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ * Enter your email address for the panel: │
└─────────────────────────────────────────────────────────────┘
>>> Type your email: admin@example.com
> Press ENTER
┌─────────────────────────────────────────────────────────────┐
│ * Enter your company/panel name: │
└─────────────────────────────────────────────────────────────┘
>>> Type a name: My Game Panel
> Or leave blank: Press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 8: CREATE ADMIN USER │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ * Would you like to create an admin user? (y/N): │
└─────────────────────────────────────────────────────────────┘
>>> SELECT: y (YES)
> Type "y" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ * Enter your email address: │
└─────────────────────────────────────────────────────────────────┘
>>> Type your admin email: admin@example.com
┌─────────────────────────────────────────────────────────────────┐
│ * Enter your username: │
└─────────────────────────────────────────────────────────────────┘
>>> Type your username: admin
┌─────────────────────────────────────────────────────────────────┐
│ * Enter your first name: │
└─────────────────────────────────────────────────────────────────┘
>>> Type your first name: John
┌─────────────────────────────────────────────────────────────────┐
│ * Enter your last name: │
└─────────────────────────────────────────────────────────────────┘
>>> Type your last name: Doe
┌─────────────────────────────────────────────────────────────────┐
│ * Enter your password: │
└─────────────────────────────────────────────────────────────────┘
>>> IMPORTANT! Type a strong password (write it down!)
> Example: Admin@2026#Secure!
> Press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 9: SSL CONFIGURATION (PANEL) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ * Do you want to use Let's Encrypt SSL? (y/N): │
└─────────────────────────────────────────────────────────────────┘
╔══════════════════════════════════════════════════════════════════╗
║ IF YOU HAVE A DOMAIN NAME: ║
║ SELECT: y (YES) ║
║ Then enter your domain: panel.example.com ║
║ ║
║ IF YOU ONLY HAVE AN IP ADDRESS (NO DOMAIN): ║
║ SELECT: n (NO) ║
║ The panel will use HTTP (port 80) ║
╚══════════════════════════════════════════════════════════════════╝
>>> Choose based on your setup
> Type "y" or "n" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 10: WINGS CONFIGURATION (UFW FIREWALL) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ * Do you want to automatically configure UFW (firewall)? │
│ (y/N): │
└─────────────────────────────────────────────────────────────────┘
>>> SELECT: y (YES) - Recommended!
> Type "y" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 11: DATABASE USER FOR WINGS │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ * Do you want to configure a user for database hosts? │
│ (y/N): │
└─────────────────────────────────────────────────────────────────┘
>>> SELECT: y (YES)
> Type "y" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ * Database host username (pterodactyluser): │
└─────────────────────────────────────────────────────────────────┘
>>> LEAVE BLANK: Press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ * Database host password: │
└─────────────────────────────────────────────────────────────────┘
>>> Type a password (write it down!)
> Example: WingsDB@2026#Strong!
> Press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ * Do you want to configure MySQL to be accessed externally? │
│ (y/N): │
└─────────────────────────────────────────────────────────────────┘
>>> SELECT: n (NO)
> Type "n" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 12: SSL FOR WINGS │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ * Do you want to automatically configure HTTPS using │
│ Let's Encrypt? (y/N): │
└─────────────────────────────────────────────────────────────────┘
>>> SELECT: n (NO)
> Type "n" and press ENTER
┌─────────────────────────────────────────────────────────────────┐
│ STEP 13: FINAL CONFIRMATION │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ * Proceed with installation? (y/N): │
└─────────────────────────────────────────────────────────────────┘
>>> SELECT: y (YES)
> Type "y" and press ENTER
> Wait for installation to complete...
╔══════════════════════════════════════════════════════════════════╗
║ INSTALLATION COMPLETE! ║
║ ║
║ Your Pterodactyl Panel is now installed! ║
║ ║
║ Access your panel at: ║
║ http://YOUR_SERVER_IP ║ ║
║ ║
║ Login with: ║
║ Email: [your admin email] ║
║ Password: [your admin password] ║
║ ║
║ ⚠️ IMPORTANT: Your Wings still needs to be configured! ║
║ 1. Log into the panel ║
║ 2. Go to Admin → Nodes → Create New ║
║ 3. Generate the configuration file ║
║ 4. Copy it to /etc/pterodactyl/config.yml ║
║ 5. Run: systemctl start wings ║
╚══════════════════════════════════════════════════════════════════╝
┌─────────────────────────────────────────────────────────────────┐
│ QUICK REFERENCE SHEET │
└─────────────────────────────────────────────────────────────────┘
┌──────────────┬─────────────┬──────────────────────────────┐
│ QUESTION │ ANSWER │ REASON │
├──────────────┼─────────────┼──────────────────────────────┤
│ Panel/Wings │ 3 (Both) │ Install everything at once │
│ Continue? │ y │ Start installation │
│ Auto DB? │ y │ Let script handle DB │
│ DB username │ [ENTER] │ Use default │
│ DB password │ [TYPE] │ Strong password (save it) │
│ MySQL ext │ n │ No external access needed │
│ Admin user? │ y │ Create admin account │
│ Let's Encrypt│ n │ n = IP only, y = domain │
│ Configure │ y │ Auto open firewall ports │
│ UFW? │ │ │
│ Wings DB │ y │ Create DB user for Wings │
│ Wings SSL │ n or y │ Same as panel SSL choice │
└──────────────┴─────────────┴──────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ FIREWALL PORTS TO OPEN │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Port 80 - HTTP (Web Panel) │
│ Port 443 - HTTPS (Web Panel) - if SSL enabled │
│ Port 8080 - Wings WebSocket (Server communication) │
│ Port 2022 - SFTP (File transfer for servers) │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ TROUBLESHOOTING COMMANDS │
└─────────────────────────────────────────────────────────────────┘
# Check panel status
systemctl status nginx
systemctl status php8.2-fpm
# Check wings status
systemctl status wings
# View panel logs
tail -f /var/www/pterodactyl/storage/logs/laravel-*.log
# View wings logs
journalctl -u wings -f
# Restart panel services
systemctl restart nginx php8.2-fpm
# Restart wings
systemctl restart wings
# Generate application key (if needed)
php /var/www/pterodactyl/artisan key:generate --force
# Clear cache
php /var/www/pterodactyl/artisan config:clear
php /var/www/pterodactyl/artisan cache:clear
┌─────────────────────────────────────────────────────────────────┐
│ POST-INSTALLATION: WINGS SETUP │
└─────────────────────────────────────────────────────────────────┘
1. Login to panel: http://YOUR_SERVER_IP
2. Go to: Admin → Nodes → Create New
3. Fill in:
• Name: Main Node
• Description: (optional)
• Location: (optional)
• Allow Automatic Allocation: Yes
• FQDN: YOUR_SERVER_IP or domain
• Daemon Port: 443
• Communicate over SSL: Yes
• Behind Proxy: Yes
• Public: Yes
4. After creating, click on the node → Configuration
5. Copy the configuration code and change port 443 in it to 8080 & add
6. Add allowed_origins after allowed_mounts like this
allowed_mounts: []
allowed_origins:
- https://pterodactyl.entitybtw.ru
7. Save to: /etc/pterodactyl/config.yml
8. Start Wings:
systemctl start wings
systemctl enable wings
┌─────────────────────────────────────────────────────────────────┐
│ NGINX REVERSE PROXY EXAMPLE CFG │
└─────────────────────────────────────────────────────────────────┘
upstream pterodactyl {
server 100.64.0.17:80;
}
upstream pterodactyl_ws {
server 100.64.0.17:8080;
}
server {
listen 80;
server_name pterodactyl.entitybtw.ru;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
# http2 on;
server_name pterodactyl.entitybtw.ru;
ssl_certificate /etc/letsencrypt/live/pterodactyl.entitybtw.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pterodactyl.entitybtw.ru/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
client_max_body_size 10G;
location = /api/system {
proxy_pass http://pterodactyl_ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Origin https://pterodactyl.entitybtw.ru;
proxy_buffering off;
}
location /upload/ {
proxy_pass http://pterodactyl_ws;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Origin https://pterodactyl.entitybtw.ru;
client_max_body_size 10G;
}
location /download/ {
proxy_pass http://pterodactyl_ws;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Origin https://pterodactyl.entitybtw.ru;
proxy_buffering off;
}
location ~ ^/api/servers {
proxy_pass http://pterodactyl_ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Origin https://pterodactyl.entitybtw.ru;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_buffering off;
}
location / {
proxy_pass http://pterodactyl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
┌─────────────────────────────────────────────────────────────────┐
│ IMPORTANT NOTES │
└─────────────────────────────────────────────────────────────────┘
⚠️ SAVE ALL PASSWORDS: Panel DB, Admin user, Wings DB
⚠️ Wait for migrations to complete (may take 2-5 minutes)
⚠️ If using IP instead of domain, you'll see a security warning
(This is normal, just proceed)
⚠️ For production, use a domain with SSL certificates
⚠️ Backup /var/www/pterodactyl/.env file after installation
╔══════════════════════════════════════════════════════════════════╗
║ INSTALLATION SUCCESS! ║
║ ║
║ Your Pterodactyl Panel is now ready for use! ║
║ ║
╚══════════════════════════════════════════════════════════════════╝
| 1 | ╔══════════════════════════════════════════════════════════════════╗ |
| 2 | ║ PTERODACTYL PANEL & WINGS INSTALLATION GUIDE (ASCII) ║ |
| 3 | ║ Complete Step-by-Step Walkthrough ║ |
| 4 | ╚══════════════════════════════════════════════════════════════════╝ |
| 5 | |
| 6 | ┌─────────────────────────────────────────────────────────────────┐ |
| 7 | │ STEP 1: START THE INSTALLATION │ |
| 8 | └─────────────────────────────────────────────────────────────────┘ |
| 9 | |
| 10 | Run this command as root: |
| 11 | |
| 12 | # bash <(curl -s https://pterodactyl-installer.se) |
| 13 | |
| 14 | |
| 15 | ┌─────────────────────────────────────────────────────────────────┐ |
| 16 | │ STEP 2: SELECT INSTALLATION TYPE │ |
| 17 | └─────────────────────────────────────────────────────────────────┘ |
| 18 | |
| 19 | ┌─────────────────────────────────────────────────────────────┐ |
| 20 | │ Which version of Pterodactyl do you want to install? │ |
| 21 | │ 1) Panel │ |
| 22 | │ 2) Wings │ |
| 23 | │ 3) Both (Panel & Wings) │ |
| 24 | └─────────────────────────────────────────────────────────────┘ |
| 25 | |
| 26 | >>> SELECT: 3 (BOTH) |
| 27 | |
| 28 | > Type "3" and press ENTER |
| 29 | |
| 30 | |
| 31 | ┌─────────────────────────────────────────────────────────────────┐ |
| 32 | │ STEP 3: CONFIRM INSTALLATION │ |
| 33 | └─────────────────────────────────────────────────────────────────┘ |
| 34 | |
| 35 | ┌─────────────────────────────────────────────────────────────┐ |
| 36 | │ * Are you sure you want to continue? (y/N): │ |
| 37 | └─────────────────────────────────────────────────────────────┘ |
| 38 | |
| 39 | >>> SELECT: y (YES) |
| 40 | |
| 41 | > Type "y" and press ENTER |
| 42 | |
| 43 | |
| 44 | ┌─────────────────────────────────────────────────────────────────┐ |
| 45 | │ STEP 4: DATABASE CONFIGURATION │ |
| 46 | └─────────────────────────────────────────────────────────────────┘ |
| 47 | |
| 48 | ┌─────────────────────────────────────────────────────────────┐ |
| 49 | │ * Do you want to automatically configure the database? │ |
| 50 | │ (y/N): │ |
| 51 | └─────────────────────────────────────────────────────────────┘ |
| 52 | |
| 53 | >>> SELECT: y (YES) |
| 54 | |
| 55 | > Type "y" and press ENTER |
| 56 | |
| 57 | |
| 58 | ┌─────────────────────────────────────────────────────────────────┐ |
| 59 | │ STEP 5: DATABASE USERNAME & PASSWORD │ |
| 60 | └─────────────────────────────────────────────────────────────────┘ |
| 61 | |
| 62 | ┌─────────────────────────────────────────────────────────────┐ |
| 63 | │ * Database host username (pterodactyluser): │ |
| 64 | └─────────────────────────────────────────────────────────────┘ |
| 65 | |
| 66 | >>> LEAVE BLANK: Press ENTER (uses default) |
| 67 | |
| 68 | ┌─────────────────────────────────────────────────────────────────┐ |
| 69 | │ * Database host password: │ |
| 70 | └─────────────────────────────────────────────────────────────────┘ |
| 71 | |
| 72 | >>> IMPORTANT! Type a strong password (write it down!) |
| 73 | > Example: MyStr0ngP@ssw0rd!2026 |
| 74 | > Press ENTER after typing |
| 75 | |
| 76 | |
| 77 | ┌─────────────────────────────────────────────────────────────────┐ |
| 78 | │ STEP 6: MYSQL EXTERNAL ACCESS │ |
| 79 | └─────────────────────────────────────────────────────────────────┘ |
| 80 | |
| 81 | ┌─────────────────────────────────────────────────────────────┐ |
| 82 | │ * Do you want to configure MySQL to be accessed │ |
| 83 | │ externally? (y/N): │ |
| 84 | └─────────────────────────────────────────────────────────────┘ |
| 85 | |
| 86 | >>> SELECT: n (NO) |
| 87 | |
| 88 | > Type "n" and press ENTER |
| 89 | |
| 90 | |
| 91 | ┌─────────────────────────────────────────────────────────────────┐ |
| 92 | │ STEP 7: EMAIL CONFIGURATION │ |
| 93 | └─────────────────────────────────────────────────────────────────┘ |
| 94 | |
| 95 | ┌─────────────────────────────────────────────────────────────┐ |
| 96 | │ * Enter your email address for the panel: │ |
| 97 | └─────────────────────────────────────────────────────────────┘ |
| 98 | |
| 99 | >>> Type your email: admin@example.com |
| 100 | > Press ENTER |
| 101 | |
| 102 | ┌─────────────────────────────────────────────────────────────┐ |
| 103 | │ * Enter your company/panel name: │ |
| 104 | └─────────────────────────────────────────────────────────────┘ |
| 105 | |
| 106 | >>> Type a name: My Game Panel |
| 107 | > Or leave blank: Press ENTER |
| 108 | |
| 109 | |
| 110 | ┌─────────────────────────────────────────────────────────────────┐ |
| 111 | │ STEP 8: CREATE ADMIN USER │ |
| 112 | └─────────────────────────────────────────────────────────────────┘ |
| 113 | |
| 114 | ┌─────────────────────────────────────────────────────────────┐ |
| 115 | │ * Would you like to create an admin user? (y/N): │ |
| 116 | └─────────────────────────────────────────────────────────────┘ |
| 117 | |
| 118 | >>> SELECT: y (YES) |
| 119 | |
| 120 | > Type "y" and press ENTER |
| 121 | |
| 122 | ┌─────────────────────────────────────────────────────────────────┐ |
| 123 | │ * Enter your email address: │ |
| 124 | └─────────────────────────────────────────────────────────────────┘ |
| 125 | |
| 126 | >>> Type your admin email: admin@example.com |
| 127 | |
| 128 | ┌─────────────────────────────────────────────────────────────────┐ |
| 129 | │ * Enter your username: │ |
| 130 | └─────────────────────────────────────────────────────────────────┘ |
| 131 | |
| 132 | >>> Type your username: admin |
| 133 | |
| 134 | ┌─────────────────────────────────────────────────────────────────┐ |
| 135 | │ * Enter your first name: │ |
| 136 | └─────────────────────────────────────────────────────────────────┘ |
| 137 | |
| 138 | >>> Type your first name: John |
| 139 | |
| 140 | ┌─────────────────────────────────────────────────────────────────┐ |
| 141 | │ * Enter your last name: │ |
| 142 | └─────────────────────────────────────────────────────────────────┘ |
| 143 | |
| 144 | >>> Type your last name: Doe |
| 145 | |
| 146 | ┌─────────────────────────────────────────────────────────────────┐ |
| 147 | │ * Enter your password: │ |
| 148 | └─────────────────────────────────────────────────────────────────┘ |
| 149 | |
| 150 | >>> IMPORTANT! Type a strong password (write it down!) |
| 151 | > Example: Admin@2026#Secure! |
| 152 | > Press ENTER |
| 153 | |
| 154 | |
| 155 | ┌─────────────────────────────────────────────────────────────────┐ |
| 156 | │ STEP 9: SSL CONFIGURATION (PANEL) │ |
| 157 | └─────────────────────────────────────────────────────────────────┘ |
| 158 | |
| 159 | ┌─────────────────────────────────────────────────────────────────┐ |
| 160 | │ * Do you want to use Let's Encrypt SSL? (y/N): │ |
| 161 | └─────────────────────────────────────────────────────────────────┘ |
| 162 | |
| 163 | ╔══════════════════════════════════════════════════════════════════╗ |
| 164 | ║ IF YOU HAVE A DOMAIN NAME: ║ |
| 165 | ║ SELECT: y (YES) ║ |
| 166 | ║ Then enter your domain: panel.example.com ║ |
| 167 | ║ ║ |
| 168 | ║ IF YOU ONLY HAVE AN IP ADDRESS (NO DOMAIN): ║ |
| 169 | ║ SELECT: n (NO) ║ |
| 170 | ║ The panel will use HTTP (port 80) ║ |
| 171 | ╚══════════════════════════════════════════════════════════════════╝ |
| 172 | |
| 173 | >>> Choose based on your setup |
| 174 | > Type "y" or "n" and press ENTER |
| 175 | |
| 176 | |
| 177 | ┌─────────────────────────────────────────────────────────────────┐ |
| 178 | │ STEP 10: WINGS CONFIGURATION (UFW FIREWALL) │ |
| 179 | └─────────────────────────────────────────────────────────────────┘ |
| 180 | |
| 181 | ┌─────────────────────────────────────────────────────────────────┐ |
| 182 | │ * Do you want to automatically configure UFW (firewall)? │ |
| 183 | │ (y/N): │ |
| 184 | └─────────────────────────────────────────────────────────────────┘ |
| 185 | |
| 186 | >>> SELECT: y (YES) - Recommended! |
| 187 | |
| 188 | > Type "y" and press ENTER |
| 189 | |
| 190 | |
| 191 | ┌─────────────────────────────────────────────────────────────────┐ |
| 192 | │ STEP 11: DATABASE USER FOR WINGS │ |
| 193 | └─────────────────────────────────────────────────────────────────┘ |
| 194 | |
| 195 | ┌─────────────────────────────────────────────────────────────────┐ |
| 196 | │ * Do you want to configure a user for database hosts? │ |
| 197 | │ (y/N): │ |
| 198 | └─────────────────────────────────────────────────────────────────┘ |
| 199 | |
| 200 | >>> SELECT: y (YES) |
| 201 | |
| 202 | > Type "y" and press ENTER |
| 203 | |
| 204 | ┌─────────────────────────────────────────────────────────────────┐ |
| 205 | │ * Database host username (pterodactyluser): │ |
| 206 | └─────────────────────────────────────────────────────────────────┘ |
| 207 | |
| 208 | >>> LEAVE BLANK: Press ENTER |
| 209 | |
| 210 | ┌─────────────────────────────────────────────────────────────────┐ |
| 211 | │ * Database host password: │ |
| 212 | └─────────────────────────────────────────────────────────────────┘ |
| 213 | |
| 214 | >>> Type a password (write it down!) |
| 215 | > Example: WingsDB@2026#Strong! |
| 216 | > Press ENTER |
| 217 | |
| 218 | ┌─────────────────────────────────────────────────────────────────┐ |
| 219 | │ * Do you want to configure MySQL to be accessed externally? │ |
| 220 | │ (y/N): │ |
| 221 | └─────────────────────────────────────────────────────────────────┘ |
| 222 | |
| 223 | >>> SELECT: n (NO) |
| 224 | |
| 225 | > Type "n" and press ENTER |
| 226 | |
| 227 | |
| 228 | ┌─────────────────────────────────────────────────────────────────┐ |
| 229 | │ STEP 12: SSL FOR WINGS │ |
| 230 | └─────────────────────────────────────────────────────────────────┘ |
| 231 | |
| 232 | ┌─────────────────────────────────────────────────────────────────┐ |
| 233 | │ * Do you want to automatically configure HTTPS using │ |
| 234 | │ Let's Encrypt? (y/N): │ |
| 235 | └─────────────────────────────────────────────────────────────────┘ |
| 236 | |
| 237 | >>> SELECT: n (NO) |
| 238 | |
| 239 | > Type "n" and press ENTER |
| 240 | |
| 241 | |
| 242 | ┌─────────────────────────────────────────────────────────────────┐ |
| 243 | │ STEP 13: FINAL CONFIRMATION │ |
| 244 | └─────────────────────────────────────────────────────────────────┘ |
| 245 | |
| 246 | ┌─────────────────────────────────────────────────────────────────┐ |
| 247 | │ * Proceed with installation? (y/N): │ |
| 248 | └─────────────────────────────────────────────────────────────────┘ |
| 249 | |
| 250 | >>> SELECT: y (YES) |
| 251 | |
| 252 | > Type "y" and press ENTER |
| 253 | > Wait for installation to complete... |
| 254 | |
| 255 | |
| 256 | ╔══════════════════════════════════════════════════════════════════╗ |
| 257 | ║ INSTALLATION COMPLETE! ║ |
| 258 | ║ ║ |
| 259 | ║ Your Pterodactyl Panel is now installed! ║ |
| 260 | ║ ║ |
| 261 | ║ Access your panel at: ║ |
| 262 | ║ http://YOUR_SERVER_IP ║ ║ |
| 263 | ║ ║ |
| 264 | ║ Login with: ║ |
| 265 | ║ Email: [your admin email] ║ |
| 266 | ║ Password: [your admin password] ║ |
| 267 | ║ ║ |
| 268 | ║ ⚠️ IMPORTANT: Your Wings still needs to be configured! ║ |
| 269 | ║ 1. Log into the panel ║ |
| 270 | ║ 2. Go to Admin → Nodes → Create New ║ |
| 271 | ║ 3. Generate the configuration file ║ |
| 272 | ║ 4. Copy it to /etc/pterodactyl/config.yml ║ |
| 273 | ║ 5. Run: systemctl start wings ║ |
| 274 | ╚══════════════════════════════════════════════════════════════════╝ |
| 275 | |
| 276 | |
| 277 | ┌─────────────────────────────────────────────────────────────────┐ |
| 278 | │ QUICK REFERENCE SHEET │ |
| 279 | └─────────────────────────────────────────────────────────────────┘ |
| 280 | |
| 281 | ┌──────────────┬─────────────┬──────────────────────────────┐ |
| 282 | │ QUESTION │ ANSWER │ REASON │ |
| 283 | ├──────────────┼─────────────┼──────────────────────────────┤ |
| 284 | │ Panel/Wings │ 3 (Both) │ Install everything at once │ |
| 285 | │ Continue? │ y │ Start installation │ |
| 286 | │ Auto DB? │ y │ Let script handle DB │ |
| 287 | │ DB username │ [ENTER] │ Use default │ |
| 288 | │ DB password │ [TYPE] │ Strong password (save it) │ |
| 289 | │ MySQL ext │ n │ No external access needed │ |
| 290 | │ Admin user? │ y │ Create admin account │ |
| 291 | │ Let's Encrypt│ n │ n = IP only, y = domain │ |
| 292 | │ Configure │ y │ Auto open firewall ports │ |
| 293 | │ UFW? │ │ │ |
| 294 | │ Wings DB │ y │ Create DB user for Wings │ |
| 295 | │ Wings SSL │ n or y │ Same as panel SSL choice │ |
| 296 | └──────────────┴─────────────┴──────────────────────────────┘ |
| 297 | |
| 298 | |
| 299 | ┌─────────────────────────────────────────────────────────────────┐ |
| 300 | │ FIREWALL PORTS TO OPEN │ |
| 301 | └─────────────────────────────────────────────────────────────────┘ |
| 302 | |
| 303 | ┌─────────────────────────────────────────────────────────────┐ |
| 304 | │ Port 80 - HTTP (Web Panel) │ |
| 305 | │ Port 443 - HTTPS (Web Panel) - if SSL enabled │ |
| 306 | │ Port 8080 - Wings WebSocket (Server communication) │ |
| 307 | │ Port 2022 - SFTP (File transfer for servers) │ |
| 308 | └─────────────────────────────────────────────────────────────┘ |
| 309 | |
| 310 | |
| 311 | ┌─────────────────────────────────────────────────────────────────┐ |
| 312 | │ TROUBLESHOOTING COMMANDS │ |
| 313 | └─────────────────────────────────────────────────────────────────┘ |
| 314 | |
| 315 | # Check panel status |
| 316 | systemctl status nginx |
| 317 | systemctl status php8.2-fpm |
| 318 | |
| 319 | # Check wings status |
| 320 | systemctl status wings |
| 321 | |
| 322 | # View panel logs |
| 323 | tail -f /var/www/pterodactyl/storage/logs/laravel-*.log |
| 324 | |
| 325 | # View wings logs |
| 326 | journalctl -u wings -f |
| 327 | |
| 328 | # Restart panel services |
| 329 | systemctl restart nginx php8.2-fpm |
| 330 | |
| 331 | # Restart wings |
| 332 | systemctl restart wings |
| 333 | |
| 334 | # Generate application key (if needed) |
| 335 | php /var/www/pterodactyl/artisan key:generate --force |
| 336 | |
| 337 | # Clear cache |
| 338 | php /var/www/pterodactyl/artisan config:clear |
| 339 | php /var/www/pterodactyl/artisan cache:clear |
| 340 | |
| 341 | |
| 342 | ┌─────────────────────────────────────────────────────────────────┐ |
| 343 | │ POST-INSTALLATION: WINGS SETUP │ |
| 344 | └─────────────────────────────────────────────────────────────────┘ |
| 345 | |
| 346 | 1. Login to panel: http://YOUR_SERVER_IP |
| 347 | |
| 348 | 2. Go to: Admin → Nodes → Create New |
| 349 | |
| 350 | 3. Fill in: |
| 351 | • Name: Main Node |
| 352 | • Description: (optional) |
| 353 | • Location: (optional) |
| 354 | • Allow Automatic Allocation: Yes |
| 355 | • FQDN: YOUR_SERVER_IP or domain |
| 356 | • Daemon Port: 443 |
| 357 | • Communicate over SSL: Yes |
| 358 | • Behind Proxy: Yes |
| 359 | • Public: Yes |
| 360 | |
| 361 | 4. After creating, click on the node → Configuration |
| 362 | |
| 363 | 5. Copy the configuration code and change port 443 in it to 8080 & add |
| 364 | |
| 365 | 6. Add allowed_origins after allowed_mounts like this |
| 366 | |
| 367 | allowed_mounts: [] |
| 368 | allowed_origins: |
| 369 | - https://pterodactyl.entitybtw.ru |
| 370 | |
| 371 | 7. Save to: /etc/pterodactyl/config.yml |
| 372 | |
| 373 | 8. Start Wings: |
| 374 | systemctl start wings |
| 375 | systemctl enable wings |
| 376 | |
| 377 | ┌─────────────────────────────────────────────────────────────────┐ |
| 378 | │ NGINX REVERSE PROXY EXAMPLE CFG │ |
| 379 | └─────────────────────────────────────────────────────────────────┘ |
| 380 | |
| 381 | upstream pterodactyl { |
| 382 | server 100.64.0.17:80; |
| 383 | } |
| 384 | |
| 385 | upstream pterodactyl_ws { |
| 386 | server 100.64.0.17:8080; |
| 387 | } |
| 388 | |
| 389 | server { |
| 390 | listen 80; |
| 391 | server_name pterodactyl.entitybtw.ru; |
| 392 | return 301 https://$server_name$request_uri; |
| 393 | } |
| 394 | |
| 395 | server { |
| 396 | listen 443 ssl; |
| 397 | # http2 on; |
| 398 | server_name pterodactyl.entitybtw.ru; |
| 399 | |
| 400 | ssl_certificate /etc/letsencrypt/live/pterodactyl.entitybtw.ru/fullchain.pem; |
| 401 | ssl_certificate_key /etc/letsencrypt/live/pterodactyl.entitybtw.ru/privkey.pem; |
| 402 | include /etc/letsencrypt/options-ssl-nginx.conf; |
| 403 | ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; |
| 404 | |
| 405 | client_max_body_size 10G; |
| 406 | |
| 407 | location = /api/system { |
| 408 | proxy_pass http://pterodactyl_ws; |
| 409 | proxy_http_version 1.1; |
| 410 | proxy_set_header Upgrade $http_upgrade; |
| 411 | proxy_set_header Connection "upgrade"; |
| 412 | proxy_set_header Host $host; |
| 413 | proxy_set_header X-Real-IP $remote_addr; |
| 414 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| 415 | proxy_set_header X-Forwarded-Proto https; |
| 416 | proxy_set_header Origin https://pterodactyl.entitybtw.ru; |
| 417 | proxy_buffering off; |
| 418 | } |
| 419 | |
| 420 | location /upload/ { |
| 421 | proxy_pass http://pterodactyl_ws; |
| 422 | proxy_http_version 1.1; |
| 423 | proxy_set_header Host $host; |
| 424 | proxy_set_header X-Real-IP $remote_addr; |
| 425 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| 426 | proxy_set_header X-Forwarded-Proto https; |
| 427 | proxy_set_header Origin https://pterodactyl.entitybtw.ru; |
| 428 | client_max_body_size 10G; |
| 429 | } |
| 430 | |
| 431 | location /download/ { |
| 432 | proxy_pass http://pterodactyl_ws; |
| 433 | proxy_http_version 1.1; |
| 434 | proxy_set_header Host $host; |
| 435 | proxy_set_header X-Real-IP $remote_addr; |
| 436 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| 437 | proxy_set_header X-Forwarded-Proto https; |
| 438 | proxy_set_header Origin https://pterodactyl.entitybtw.ru; |
| 439 | proxy_buffering off; |
| 440 | } |
| 441 | |
| 442 | location ~ ^/api/servers { |
| 443 | proxy_pass http://pterodactyl_ws; |
| 444 | proxy_http_version 1.1; |
| 445 | proxy_set_header Upgrade $http_upgrade; |
| 446 | proxy_set_header Connection "upgrade"; |
| 447 | proxy_set_header Host $host; |
| 448 | proxy_set_header X-Real-IP $remote_addr; |
| 449 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| 450 | proxy_set_header X-Forwarded-Proto https; |
| 451 | proxy_set_header Origin https://pterodactyl.entitybtw.ru; |
| 452 | proxy_read_timeout 3600s; |
| 453 | proxy_send_timeout 3600s; |
| 454 | proxy_buffering off; |
| 455 | } |
| 456 | |
| 457 | location / { |
| 458 | proxy_pass http://pterodactyl; |
| 459 | proxy_set_header Host $host; |
| 460 | proxy_set_header X-Real-IP $remote_addr; |
| 461 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| 462 | proxy_set_header X-Forwarded-Proto https; |
| 463 | } |
| 464 | } |
| 465 | |
| 466 | |
| 467 | ┌─────────────────────────────────────────────────────────────────┐ |
| 468 | │ IMPORTANT NOTES │ |
| 469 | └─────────────────────────────────────────────────────────────────┘ |
| 470 | |
| 471 | ⚠️ SAVE ALL PASSWORDS: Panel DB, Admin user, Wings DB |
| 472 | |
| 473 | ⚠️ Wait for migrations to complete (may take 2-5 minutes) |
| 474 | |
| 475 | ⚠️ If using IP instead of domain, you'll see a security warning |
| 476 | (This is normal, just proceed) |
| 477 | |
| 478 | ⚠️ For production, use a domain with SSL certificates |
| 479 | |
| 480 | ⚠️ Backup /var/www/pterodactyl/.env file after installation |
| 481 | |
| 482 | |
| 483 | ╔══════════════════════════════════════════════════════════════════╗ |
| 484 | ║ INSTALLATION SUCCESS! ║ |
| 485 | ║ ║ |
| 486 | ║ Your Pterodactyl Panel is now ready for use! ║ |
| 487 | ║ ║ |
| 488 | ╚══════════════════════════════════════════════════════════════════╝ |