Last active 4 weeks ago

entitybtw revised this gist 4 weeks ago. Go to revision

1 file changed, 351 insertions, 237 deletions

pterodactyl install guide.txt

@@ -1,5 +1,5 @@
1 1 ╔══════════════════════════════════════════════════════════════════╗
2 - ║ PTERODACTYL PANEL & WINGS INSTALLATION GUIDE (ASCII) ║
2 + ║ PTERODACTYL PANEL & WINGS INSTALLATION GUIDE ║
3 3 ║ Complete Step-by-Step Walkthrough ║
4 4 ╚══════════════════════════════════════════════════════════════════╝
5 5
@@ -24,7 +24,6 @@
24 24 └─────────────────────────────────────────────────────────────┘
25 25
26 26 >>> SELECT: 3 (BOTH)
27 -
28 27 > Type "3" and press ENTER
29 28
30 29
@@ -37,7 +36,6 @@
37 36 └─────────────────────────────────────────────────────────────┘
38 37
39 38 >>> SELECT: y (YES)
40 -
41 39 > Type "y" and press ENTER
42 40
43 41
@@ -51,7 +49,6 @@
51 49 └─────────────────────────────────────────────────────────────┘
52 50
53 51 >>> SELECT: y (YES)
54 -
55 52 > Type "y" and press ENTER
56 53
57 54
@@ -65,9 +62,9 @@
65 62
66 63 >>> LEAVE BLANK: Press ENTER (uses default)
67 64
68 - ┌─────────────────────────────────────────────────────────────────┐
69 - │ * Database host password: │
70 - └─────────────────────────────────────────────────────────────────┘
65 + ┌─────────────────────────────────────────────────────────────┐
66 + │ * Database host password: │
67 + └─────────────────────────────────────────────────────────────┘
71 68
72 69 >>> IMPORTANT! Type a strong password (write it down!)
73 70 > Example: MyStr0ngP@ssw0rd!2026
@@ -84,7 +81,6 @@
84 81 └─────────────────────────────────────────────────────────────┘
85 82
86 83 >>> SELECT: n (NO)
87 -
88 84 > Type "n" and press ENTER
89 85
90 86
@@ -116,36 +112,35 @@
116 112 └─────────────────────────────────────────────────────────────┘
117 113
118 114 >>> SELECT: y (YES)
119 -
120 115 > Type "y" and press ENTER
121 116
122 - ┌─────────────────────────────────────────────────────────────────┐
123 - │ * Enter your email address: │
124 - └─────────────────────────────────────────────────────────────────┘
117 + ┌─────────────────────────────────────────────────────────────┐
118 + │ * Enter your email address: │
119 + └─────────────────────────────────────────────────────────────┘
125 120
126 121 >>> Type your admin email: admin@example.com
127 122
128 - ┌─────────────────────────────────────────────────────────────────┐
129 - │ * Enter your username: │
130 - └─────────────────────────────────────────────────────────────────┘
123 + ┌─────────────────────────────────────────────────────────────┐
124 + │ * Enter your username: │
125 + └─────────────────────────────────────────────────────────────┘
131 126
132 127 >>> Type your username: admin
133 128
134 - ┌─────────────────────────────────────────────────────────────────┐
135 - │ * Enter your first name: │
136 - └─────────────────────────────────────────────────────────────────┘
129 + ┌─────────────────────────────────────────────────────────────┐
130 + │ * Enter your first name: │
131 + └─────────────────────────────────────────────────────────────┘
137 132
138 133 >>> Type your first name: John
139 134
140 - ┌─────────────────────────────────────────────────────────────────┐
141 - │ * Enter your last name: │
142 - └─────────────────────────────────────────────────────────────────┘
135 + ┌─────────────────────────────────────────────────────────────┐
136 + │ * Enter your last name: │
137 + └─────────────────────────────────────────────────────────────┘
143 138
144 139 >>> Type your last name: Doe
145 140
146 - ┌─────────────────────────────────────────────────────────────────┐
147 - │ * Enter your password: │
148 - └─────────────────────────────────────────────────────────────────┘
141 + ┌─────────────────────────────────────────────────────────────┐
142 + │ * Enter your password: │
143 + └─────────────────────────────────────────────────────────────┘
149 144
150 145 >>> IMPORTANT! Type a strong password (write it down!)
151 146 > Example: Admin@2026#Secure!
@@ -156,19 +151,23 @@
156 151 │ STEP 9: SSL CONFIGURATION (PANEL) │
157 152 └─────────────────────────────────────────────────────────────────┘
158 153
159 - ┌─────────────────────────────────────────────────────────────────┐
160 - │ * Do you want to use Let's Encrypt SSL? (y/N): │
161 - └─────────────────────────────────────────────────────────────────┘
154 + ┌─────────────────────────────────────────────────────────────┐
155 + │ * Do you want to use Let's Encrypt SSL? (y/N): │
156 + └─────────────────────────────────────────────────────────────┘
162 157
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 - ╚══════════════════════════════════════════════════════════════════╝
158 + +------------------------------------------------------------------+
159 + | IF YOU HAVE A DOMAIN NAME: |
160 + | SELECT: y (YES) |
161 + | Then enter your domain: panel.example.com |
162 + | |
163 + | IF YOU ONLY HAVE AN IP ADDRESS (NO DOMAIN): |
164 + | SELECT: n (NO) |
165 + | The panel will use HTTP (port 80) |
166 + | |
167 + | IF USING REVERSE PROXY (Nginx/Apache as proxy): |
168 + | SELECT: n (NO) |
169 + | We'll configure SSL later in Nginx |
170 + +------------------------------------------------------------------+
172 171
173 172 >>> Choose based on your setup
174 173 > Type "y" or "n" and press ENTER
@@ -178,13 +177,12 @@
178 177 │ STEP 10: WINGS CONFIGURATION (UFW FIREWALL) │
179 178 └─────────────────────────────────────────────────────────────────┘
180 179
181 - ┌─────────────────────────────────────────────────────────────────┐
182 - │ * Do you want to automatically configure UFW (firewall)? │
183 - │ (y/N): │
184 - └─────────────────────────────────────────────────────────────────┘
180 + ┌─────────────────────────────────────────────────────────────┐
181 + │ * Do you want to automatically configure UFW (firewall)? │
182 + │ (y/N): │
183 + └─────────────────────────────────────────────────────────────┘
185 184
186 185 >>> SELECT: y (YES) - Recommended!
187 -
188 186 > Type "y" and press ENTER
189 187
190 188
@@ -192,36 +190,34 @@
192 190 │ STEP 11: DATABASE USER FOR WINGS │
193 191 └─────────────────────────────────────────────────────────────────┘
194 192
195 - ┌─────────────────────────────────────────────────────────────────┐
196 - │ * Do you want to configure a user for database hosts? │
197 - │ (y/N): │
198 - └─────────────────────────────────────────────────────────────────┘
193 + ┌─────────────────────────────────────────────────────────────┐
194 + │ * Do you want to configure a user for database hosts? │
195 + │ (y/N): │
196 + └─────────────────────────────────────────────────────────────┘
199 197
200 198 >>> SELECT: y (YES)
201 -
202 199 > Type "y" and press ENTER
203 200
204 - ┌─────────────────────────────────────────────────────────────────┐
205 - │ * Database host username (pterodactyluser): │
206 - └─────────────────────────────────────────────────────────────────┘
201 + ┌─────────────────────────────────────────────────────────────┐
202 + │ * Database host username (pterodactyluser): │
203 + └─────────────────────────────────────────────────────────────┘
207 204
208 205 >>> LEAVE BLANK: Press ENTER
209 206
210 - ┌─────────────────────────────────────────────────────────────────┐
211 - │ * Database host password: │
212 - └─────────────────────────────────────────────────────────────────┘
207 + ┌─────────────────────────────────────────────────────────────┐
208 + │ * Database host password: │
209 + └─────────────────────────────────────────────────────────────┘
213 210
214 211 >>> Type a password (write it down!)
215 212 > Example: WingsDB@2026#Strong!
216 213 > Press ENTER
217 214
218 - ┌─────────────────────────────────────────────────────────────────┐
219 - │ * Do you want to configure MySQL to be accessed externally? │
220 - │ (y/N): │
221 - └─────────────────────────────────────────────────────────────────┘
215 + ┌─────────────────────────────────────────────────────────────┐
216 + │ * Do you want to configure MySQL to be accessed externally? │
217 + │ (y/N): │
218 + └─────────────────────────────────────────────────────────────┘
222 219
223 220 >>> SELECT: n (NO)
224 -
225 221 > Type "n" and press ENTER
226 222
227 223
@@ -229,13 +225,21 @@
229 225 │ STEP 12: SSL FOR WINGS │
230 226 └─────────────────────────────────────────────────────────────────┘
231 227
232 - ┌─────────────────────────────────────────────────────────────────┐
233 - │ * Do you want to automatically configure HTTPS using │
234 - │ Let's Encrypt? (y/N): │
235 - └─────────────────────────────────────────────────────────────────┘
228 + ┌─────────────────────────────────────────────────────────────┐
229 + │ * Do you want to automatically configure HTTPS using │
230 + │ Let's Encrypt? (y/N): │
231 + └─────────────────────────────────────────────────────────────┘
236 232
237 - >>> SELECT: n (NO)
233 + +------------------------------------------------------------------+
234 + | IF YOU HAVE A DOMAIN AND WANT SSL DIRECTLY: |
235 + | SELECT: y (YES) |
236 + | |
237 + | IF USING REVERSE PROXY OR IP ONLY: |
238 + | SELECT: n (NO) |
239 + | We'll configure SSL via reverse proxy later |
240 + +------------------------------------------------------------------+
238 241
242 + >>> SELECT: n (NO) - if using reverse proxy
239 243 > Type "n" and press ENTER
240 244
241 245
@@ -243,69 +247,241 @@
243 247 │ STEP 13: FINAL CONFIRMATION │
244 248 └─────────────────────────────────────────────────────────────────┘
245 249
246 - ┌─────────────────────────────────────────────────────────────────┐
247 - │ * Proceed with installation? (y/N): │
248 - └─────────────────────────────────────────────────────────────────┘
250 + ┌─────────────────────────────────────────────────────────────┐
251 + │ * Proceed with installation? (y/N): │
252 + └─────────────────────────────────────────────────────────────┘
249 253
250 254 >>> SELECT: y (YES)
251 -
252 255 > 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 - ╚══════════════════════════════════════════════════════════════════╝
256 + > Wait for installation to complete (2-5 minutes)
257 +
258 +
259 + +------------------------------------------------------------------+
260 + | INSTALLATION COMPLETE! |
261 + | |
262 + | Your Pterodactyl Panel is now installed! |
263 + | |
264 + | Access your panel at: |
265 + | http://YOUR_SERVER_IP |
266 + | or |
267 + | https://YOUR_DOMAIN (if SSL enabled) |
268 + | |
269 + | Login with: |
270 + | Email: [your admin email] |
271 + | Password: [your admin password] |
272 + | |
273 + | IMPORTANT: Your Wings still needs to be configured! |
274 + | 1. Log into the panel |
275 + | 2. Go to Admin -> Nodes -> Create New |
276 + | 3. Generate the configuration file |
277 + | 4. Copy it to /etc/pterodactyl/config.yml |
278 + | 5. Run: systemctl start wings |
279 + +------------------------------------------------------------------+
275 280
276 281
277 282 ┌─────────────────────────────────────────────────────────────────┐
278 283 │ QUICK REFERENCE SHEET │
279 284 └─────────────────────────────────────────────────────────────────┘
280 285
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 - └──────────────┴─────────────┴──────────────────────────────┘
286 + +--------------+-------------+----------------------------------+
287 + | QUESTION | ANSWER | REASON |
288 + +--------------+-------------+----------------------------------+
289 + | Panel/Wings | 3 (Both) | Install everything at once |
290 + | Continue? | y | Start installation |
291 + | Auto DB? | y | Let script handle DB |
292 + | DB username | [ENTER] | Use default |
293 + | DB password | [TYPE] | Strong password (save it) |
294 + | MySQL ext | n | No external access needed |
295 + | Admin user? | y | Create admin account |
296 + | Let's Encrypt| n or y | n = IP/proxy, y = domain |
297 + | Configure | y | Auto open firewall ports |
298 + | UFW? | | |
299 + | Wings DB | y | Create DB user for Wings |
300 + | Wings SSL | n | n = proxy, y = direct |
301 + +--------------+-------------+----------------------------------+
297 302
298 303
299 304 ┌─────────────────────────────────────────────────────────────────┐
300 305 │ FIREWALL PORTS TO OPEN │
301 306 └─────────────────────────────────────────────────────────────────┘
302 307
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 - └─────────────────────────────────────────────────────────────┘
308 + +-------------------------------------------------------------+
309 + | Port 80 - HTTP (Web Panel) |
310 + | Port 443 - HTTPS (Web Panel) - if SSL enabled |
311 + | Port 8080 - Wings WebSocket (Server communication) |
312 + | Port 2022 - SFTP (File transfer for servers) |
313 + +-------------------------------------------------------------+
314 +
315 +
316 + ┌─────────────────────────────────────────────────────────────────┐
317 + │ COMMON ERRORS & SOLUTIONS │
318 + └─────────────────────────────────────────────────────────────────┘
319 +
320 + ERROR: "No application encryption key has been specified"
321 + --------------------------------------------------------------
322 + SOLUTION: php /var/www/pterodactyl/artisan key:generate --force
323 +
324 + ERROR: "Unknown database 'panel'"
325 + --------------------------------------------------------------
326 + SOLUTION: mysql -u root -p -e "CREATE DATABASE panel;"
327 +
328 + ERROR: "Connection refused" on Wings
329 + --------------------------------------------------------------
330 + SOLUTION: Check if port 8080 is open: netstat -tlnp | grep 8080
331 + Also check: systemctl status wings
332 +
333 + ERROR: "403 Forbidden" on panel
334 + --------------------------------------------------------------
335 + SOLUTION: chown -R www-data:www-data /var/www/pterodactyl/storage
336 + chmod -R 755 /var/www/pterodactyl/storage
337 +
338 + ERROR: "502 Bad Gateway" on panel
339 + --------------------------------------------------------------
340 + SOLUTION: systemctl restart php8.2-fpm
341 + systemctl restart nginx
342 +
343 + ERROR: "allowed_origins" missing in Wings config
344 + --------------------------------------------------------------
345 + SOLUTION: Add to /etc/pterodactyl/config.yml:
346 + allowed_origins:
347 + - https://your-domain.com
348 +
349 + ERROR: Panel shows "500 Internal Server Error"
350 + --------------------------------------------------------------
351 + SOLUTION: Check logs: tail -f /var/www/pterodactyl/storage/logs/*.log
352 + Clear cache: php /var/www/pterodactyl/artisan config:clear
353 +
354 +
355 + ┌─────────────────────────────────────────────────────────────────┐
356 + │ POST-INSTALLATION: WINGS SETUP │
357 + └─────────────────────────────────────────────────────────────────┘
358 +
359 + 1. Login to panel: http://YOUR_SERVER_IP
360 +
361 + 2. Go to: Admin -> Nodes -> Create New
362 +
363 + 3. Fill in:
364 + * Name: Main Node
365 + * Description: (optional)
366 + * Location: (optional)
367 + * Allow Automatic Allocation: Yes
368 + * FQDN: YOUR_SERVER_IP or domain
369 + * Daemon Port: 443 (or 8080 if using proxy)
370 + * Communicate over SSL: Yes (if using SSL)
371 + * Behind Proxy: Yes (if using reverse proxy)
372 + * Public: Yes
373 +
374 + 4. After creating, click on the node -> Configuration
375 +
376 + 5. Copy the configuration code and:
377 + - If using reverse proxy: change port 443 to 8080
378 + - If using direct SSL: keep port 443
379 +
380 + 6. Add allowed_origins after allowed_mounts:
381 + allowed_mounts: []
382 + allowed_origins:
383 + - https://your-domain.com
384 + - https://panel.your-domain.com
385 +
386 + 7. Save to: /etc/pterodactyl/config.yml
387 +
388 + 8. Start Wings:
389 + systemctl start wings
390 + systemctl enable wings
391 +
392 +
393 + ┌─────────────────────────────────────────────────────────────────┐
394 + │ NGINX REVERSE PROXY EXAMPLE CFG │
395 + │ (For Panel + Wings Behind Proxy) │
396 + └─────────────────────────────────────────────────────────────────┘
397 +
398 + upstream pterodactyl {
399 + server 127.0.0.1:80; # Panel port
400 + }
401 +
402 + upstream pterodactyl_ws {
403 + server 127.0.0.1:8080; # Wings WebSocket port
404 + }
405 +
406 + server {
407 + listen 80;
408 + server_name panel.your-domain.com;
409 + return 301 https://$server_name$request_uri;
410 + }
411 +
412 + server {
413 + listen 443 ssl http2;
414 + server_name panel.your-domain.com;
415 +
416 + ssl_certificate /etc/letsencrypt/live/panel.your-domain.com/fullchain.pem;
417 + ssl_certificate_key /etc/letsencrypt/live/panel.your-domain.com/privkey.pem;
418 + include /etc/letsencrypt/options-ssl-nginx.conf;
419 + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
420 +
421 + client_max_body_size 10G;
422 +
423 + # WebSocket connections
424 + location = /api/system {
425 + proxy_pass http://pterodactyl_ws;
426 + proxy_http_version 1.1;
427 + proxy_set_header Upgrade $http_upgrade;
428 + proxy_set_header Connection "upgrade";
429 + proxy_set_header Host $host;
430 + proxy_set_header X-Real-IP $remote_addr;
431 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
432 + proxy_set_header X-Forwarded-Proto https;
433 + proxy_set_header Origin https://panel.your-domain.com;
434 + proxy_buffering off;
435 + }
436 +
437 + # File uploads/downloads
438 + location /upload/ {
439 + proxy_pass http://pterodactyl_ws;
440 + proxy_http_version 1.1;
441 + proxy_set_header Host $host;
442 + proxy_set_header X-Real-IP $remote_addr;
443 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
444 + proxy_set_header X-Forwarded-Proto https;
445 + proxy_set_header Origin https://panel.your-domain.com;
446 + client_max_body_size 10G;
447 + }
448 +
449 + location /download/ {
450 + proxy_pass http://pterodactyl_ws;
451 + proxy_http_version 1.1;
452 + proxy_set_header Host $host;
453 + proxy_set_header X-Real-IP $remote_addr;
454 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
455 + proxy_set_header X-Forwarded-Proto https;
456 + proxy_set_header Origin https://panel.your-domain.com;
457 + proxy_buffering off;
458 + }
459 +
460 + # API endpoints with WebSocket
461 + location ~ ^/api/servers {
462 + proxy_pass http://pterodactyl_ws;
463 + proxy_http_version 1.1;
464 + proxy_set_header Upgrade $http_upgrade;
465 + proxy_set_header Connection "upgrade";
466 + proxy_set_header Host $host;
467 + proxy_set_header X-Real-IP $remote_addr;
468 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
469 + proxy_set_header X-Forwarded-Proto https;
470 + proxy_set_header Origin https://panel.your-domain.com;
471 + proxy_read_timeout 3600s;
472 + proxy_send_timeout 3600s;
473 + proxy_buffering off;
474 + }
475 +
476 + # Main panel
477 + location / {
478 + proxy_pass http://pterodactyl;
479 + proxy_set_header Host $host;
480 + proxy_set_header X-Real-IP $remote_addr;
481 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
482 + proxy_set_header X-Forwarded-Proto https;
483 + }
484 + }
309 485
310 486
311 487 ┌─────────────────────────────────────────────────────────────────┐
@@ -337,152 +513,90 @@
337 513 # Clear cache
338 514 php /var/www/pterodactyl/artisan config:clear
339 515 php /var/www/pterodactyl/artisan cache:clear
516 + php /var/www/pterodactyl/artisan view:clear
517 +
518 + # Check MySQL status
519 + systemctl status mysql
520 + mysql -u root -p -e "SHOW DATABASES;"
521 +
522 + # Check open ports
523 + netstat -tlnp | grep -E ':80|:443|:8080|:2022'
524 +
525 + # Check if Wings can connect to panel
526 + curl -I https://panel.your-domain.com
340 527
341 528
342 529 ┌─────────────────────────────────────────────────────────────────┐
343 - │ POST-INSTALLATION: WINGS SETUP │
530 + │ BACKUP COMMANDS │
344 531 └─────────────────────────────────────────────────────────────────┘
345 532
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
533 + # Backup panel files
534 + tar -czf /root/panel_backup_$(date +%Y%m%d).tar.gz /var/www/pterodactyl
364 535
365 - 6. Add allowed_origins after allowed_mounts like this
536 + # Backup database
537 + mysqldump -u root -p panel > /root/panel_db_backup_$(date +%Y%m%d).sql
538 +
539 + # Backup Wings config
540 + cp /etc/pterodactyl/config.yml /root/config.yml.backup
541 +
542 + # Backup Nginx config
543 + cp -r /etc/nginx/sites-available /root/nginx_backup/
544 +
545 + # Restore database
546 + mysql -u root -p panel < /root/panel_db_backup_YYYYMMDD.sql
366 547
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 548
377 549 ┌─────────────────────────────────────────────────────────────────┐
378 - │ NGINX REVERSE PROXY EXAMPLE CFG │
550 + │ SECURITY RECOMMENDATIONS │
379 551 └─────────────────────────────────────────────────────────────────┘
380 552
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 - }
553 + [1] Change default admin password after first login
554 + [2] Enable 2FA for admin accounts
555 + [3] Use HTTPS with valid SSL certificates (Let's Encrypt)
556 + [4] Regular backups: .env, database, Wings config
557 + [5] Update regularly: apt update && apt upgrade
558 + [6] Monitor logs: /var/www/pterodactyl/storage/logs/
559 + [7] Set up fail2ban to protect SSH and panel
560 + [8] Use strong passwords (min 12 chars, mix of chars)
561 + [9] Limit SSH access: edit /etc/ssh/sshd_config
562 + [10] Disable root login: PermitRootLogin no
563 + [11] Use firewall: ufw enable (if not already)
564 + [12] Change default MySQL port (3306) if exposed externally
465 565
466 566
467 567 ┌─────────────────────────────────────────────────────────────────┐
468 - │ IMPORTANT NOTES │
568 + │ IMPORTANT NOTES │
469 569 └─────────────────────────────────────────────────────────────────┘
470 570
471 - ⚠️ SAVE ALL PASSWORDS: Panel DB, Admin user, Wings DB
571 + [*] SAVE ALL PASSWORDS: Panel DB, Admin user, Wings DB
572 +
573 + [*] Wait for migrations to complete (may take 2-5 minutes)
472 574
473 - ⚠️ Wait for migrations to complete (may take 2-5 minutes)
575 + [*] If using IP instead of domain, you'll see a security warning
576 + (This is normal, just proceed)
474 577
475 - ⚠️ If using IP instead of domain, you'll see a security warning
476 - (This is normal, just proceed)
578 + [*] For production, always use a domain with SSL certificates
477 579
478 - ⚠️ For production, use a domain with SSL certificates
580 + [*] Backup /var/www/pterodactyl/.env file after installation
479 581
480 - ⚠️ Backup /var/www/pterodactyl/.env file after installation
582 + [*] Keep your panel and Wings versions in sync
583 +
584 + [*] Monitor disk space - server files can grow quickly!
585 +
586 + [*] Use separate database for each server if hosting many nodes
481 587
482 588
483 - ╔══════════════════════════════════════════════════════════════════╗
484 - ║ INSTALLATION SUCCESS! ║
485 - ║ ║
486 - ║ Your Pterodactyl Panel is now ready for use! ║
487 - ║ ║
488 - ╚══════════════════════════════════════════════════════════════════╝
589 + +------------------------------------------------------------------+
590 + | INSTALLATION SUCCESS! |
591 + | |
592 + | Your Pterodactyl Panel is now ready for use! |
593 + | |
594 + | Documentation: https://pterodactyl.io/docs |
595 + | |
596 + | Next steps: |
597 + | 1. Configure Wings (see post-installation) |
598 + | 2. Set up your first game server |
599 + | 3. Configure email notifications |
600 + | 4. Set up regular backups |
601 + | 5. Monitor performance |
602 + +------------------------------------------------------------------+

entitybtw revised this gist 4 weeks ago. Go to revision

1 file changed, 190 insertions, 108 deletions

pterodactyl install guide.txt

@@ -1,10 +1,10 @@
1 1 ╔══════════════════════════════════════════════════════════════════╗
2 - ║ PTERODACTYL PANEL & WINGS INSTALLATION GUIDE (ASCII) ║
3 - ║ Complete Step-by-Step Walkthrough ║
2 + ║ PTERODACTYL PANEL & WINGS INSTALLATION GUIDE (ASCII) ║
3 + ║ Complete Step-by-Step Walkthrough ║
4 4 ╚══════════════════════════════════════════════════════════════════╝
5 5
6 6 ┌─────────────────────────────────────────────────────────────────┐
7 - │ STEP 1: START THE INSTALLATION │
7 + │ STEP 1: START THE INSTALLATION │
8 8 └─────────────────────────────────────────────────────────────────┘
9 9
10 10 Run this command as root:
@@ -13,14 +13,14 @@
13 13
14 14
15 15 ┌─────────────────────────────────────────────────────────────────┐
16 - │ STEP 2: SELECT INSTALLATION TYPE │
16 + │ STEP 2: SELECT INSTALLATION TYPE │
17 17 └─────────────────────────────────────────────────────────────────┘
18 18
19 19 ┌─────────────────────────────────────────────────────────────┐
20 - │ Which version of Pterodactyl do you want to install? │
21 - │ 1) Panel │
22 - │ 2) Wings │
23 - │ 3) Both (Panel & Wings) │
20 + │ Which version of Pterodactyl do you want to install? │
21 + │ 1) Panel │
22 + │ 2) Wings │
23 + │ 3) Both (Panel & Wings) │
24 24 └─────────────────────────────────────────────────────────────┘
25 25
26 26 >>> SELECT: 3 (BOTH)
@@ -29,11 +29,11 @@
29 29
30 30
31 31 ┌─────────────────────────────────────────────────────────────────┐
32 - │ STEP 3: CONFIRM INSTALLATION │
32 + │ STEP 3: CONFIRM INSTALLATION │
33 33 └─────────────────────────────────────────────────────────────────┘
34 34
35 35 ┌─────────────────────────────────────────────────────────────┐
36 - │ * Are you sure you want to continue? (y/N): │
36 + │ * Are you sure you want to continue? (y/N): │
37 37 └─────────────────────────────────────────────────────────────┘
38 38
39 39 >>> SELECT: y (YES)
@@ -42,13 +42,13 @@
42 42
43 43
44 44 ┌─────────────────────────────────────────────────────────────────┐
45 - │ STEP 4: DATABASE CONFIGURATION │
45 + │ STEP 4: DATABASE CONFIGURATION │
46 46 └─────────────────────────────────────────────────────────────────┘
47 47
48 48 ┌─────────────────────────────────────────────────────────────┐
49 - │ * Do you want to automatically configure the database? │
50 - │ (y/N): │
51 - └─────────────────────────────────────────────────────────────────┘
49 + │ * Do you want to automatically configure the database? │
50 + │ (y/N): │
51 + └─────────────────────────────────────────────────────────────┘
52 52
53 53 >>> SELECT: y (YES)
54 54
@@ -56,17 +56,17 @@
56 56
57 57
58 58 ┌─────────────────────────────────────────────────────────────────┐
59 - │ STEP 5: DATABASE USERNAME & PASSWORD │
59 + │ STEP 5: DATABASE USERNAME & PASSWORD │
60 60 └─────────────────────────────────────────────────────────────────┘
61 61
62 62 ┌─────────────────────────────────────────────────────────────┐
63 - │ * Database host username (pterodactyluser): │
63 + │ * Database host username (pterodactyluser): │
64 64 └─────────────────────────────────────────────────────────────┘
65 65
66 66 >>> LEAVE BLANK: Press ENTER (uses default)
67 67
68 68 ┌─────────────────────────────────────────────────────────────────┐
69 - │ * Database host password: │
69 + │ * Database host password: │
70 70 └─────────────────────────────────────────────────────────────────┘
71 71
72 72 >>> IMPORTANT! Type a strong password (write it down!)
@@ -75,12 +75,12 @@
75 75
76 76
77 77 ┌─────────────────────────────────────────────────────────────────┐
78 - │ STEP 6: MYSQL EXTERNAL ACCESS │
78 + │ STEP 6: MYSQL EXTERNAL ACCESS │
79 79 └─────────────────────────────────────────────────────────────────┘
80 80
81 81 ┌─────────────────────────────────────────────────────────────┐
82 - │ * Do you want to configure MySQL to be accessed │
83 - │ externally? (y/N): │
82 + │ * Do you want to configure MySQL to be accessed │
83 + │ externally? (y/N): │
84 84 └─────────────────────────────────────────────────────────────┘
85 85
86 86 >>> SELECT: n (NO)
@@ -89,18 +89,18 @@
89 89
90 90
91 91 ┌─────────────────────────────────────────────────────────────────┐
92 - │ STEP 7: EMAIL CONFIGURATION │
92 + │ STEP 7: EMAIL CONFIGURATION │
93 93 └─────────────────────────────────────────────────────────────────┘
94 94
95 95 ┌─────────────────────────────────────────────────────────────┐
96 - │ * Enter your email address for the panel: │
96 + │ * Enter your email address for the panel: │
97 97 └─────────────────────────────────────────────────────────────┘
98 98
99 99 >>> Type your email: admin@example.com
100 100 > Press ENTER
101 101
102 102 ┌─────────────────────────────────────────────────────────────┐
103 - │ * Enter your company/panel name: │
103 + │ * Enter your company/panel name: │
104 104 └─────────────────────────────────────────────────────────────┘
105 105
106 106 >>> Type a name: My Game Panel
@@ -108,11 +108,11 @@
108 108
109 109
110 110 ┌─────────────────────────────────────────────────────────────────┐
111 - │ STEP 8: CREATE ADMIN USER │
111 + │ STEP 8: CREATE ADMIN USER │
112 112 └─────────────────────────────────────────────────────────────────┘
113 113
114 114 ┌─────────────────────────────────────────────────────────────┐
115 - │ * Would you like to create an admin user? (y/N): │
115 + │ * Would you like to create an admin user? (y/N): │
116 116 └─────────────────────────────────────────────────────────────┘
117 117
118 118 >>> SELECT: y (YES)
@@ -120,31 +120,31 @@
120 120 > Type "y" and press ENTER
121 121
122 122 ┌─────────────────────────────────────────────────────────────────┐
123 - │ * Enter your email address: │
123 + │ * Enter your email address: │
124 124 └─────────────────────────────────────────────────────────────────┘
125 125
126 126 >>> Type your admin email: admin@example.com
127 127
128 128 ┌─────────────────────────────────────────────────────────────────┐
129 - │ * Enter your username: │
129 + │ * Enter your username: │
130 130 └─────────────────────────────────────────────────────────────────┘
131 131
132 132 >>> Type your username: admin
133 133
134 134 ┌─────────────────────────────────────────────────────────────────┐
135 - │ * Enter your first name: │
135 + │ * Enter your first name: │
136 136 └─────────────────────────────────────────────────────────────────┘
137 137
138 138 >>> Type your first name: John
139 139
140 140 ┌─────────────────────────────────────────────────────────────────┐
141 - │ * Enter your last name: │
141 + │ * Enter your last name: │
142 142 └─────────────────────────────────────────────────────────────────┘
143 143
144 144 >>> Type your last name: Doe
145 145
146 146 ┌─────────────────────────────────────────────────────────────────┐
147 - │ * Enter your password: │
147 + │ * Enter your password: │
148 148 └─────────────────────────────────────────────────────────────────┘
149 149
150 150 >>> IMPORTANT! Type a strong password (write it down!)
@@ -153,21 +153,21 @@
153 153
154 154
155 155 ┌─────────────────────────────────────────────────────────────────┐
156 - │ STEP 9: SSL CONFIGURATION (PANEL) │
156 + │ STEP 9: SSL CONFIGURATION (PANEL) │
157 157 └─────────────────────────────────────────────────────────────────┘
158 158
159 159 ┌─────────────────────────────────────────────────────────────────┐
160 - │ * Do you want to use Let's Encrypt SSL? (y/N): │
160 + │ * Do you want to use Let's Encrypt SSL? (y/N): │
161 161 └─────────────────────────────────────────────────────────────────┘
162 162
163 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) ║
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 171 ╚══════════════════════════════════════════════════════════════════╝
172 172
173 173 >>> Choose based on your setup
@@ -175,12 +175,12 @@
175 175
176 176
177 177 ┌─────────────────────────────────────────────────────────────────┐
178 - │ STEP 10: WINGS CONFIGURATION (UFW FIREWALL) │
178 + │ STEP 10: WINGS CONFIGURATION (UFW FIREWALL) │
179 179 └─────────────────────────────────────────────────────────────────┘
180 180
181 181 ┌─────────────────────────────────────────────────────────────────┐
182 - │ * Do you want to automatically configure UFW (firewall)? │
183 - │ (y/N): │
182 + │ * Do you want to automatically configure UFW (firewall)? │
183 + │ (y/N): │
184 184 └─────────────────────────────────────────────────────────────────┘
185 185
186 186 >>> SELECT: y (YES) - Recommended!
@@ -189,12 +189,12 @@
189 189
190 190
191 191 ┌─────────────────────────────────────────────────────────────────┐
192 - │ STEP 11: DATABASE USER FOR WINGS │
192 + │ STEP 11: DATABASE USER FOR WINGS │
193 193 └─────────────────────────────────────────────────────────────────┘
194 194
195 195 ┌─────────────────────────────────────────────────────────────────┐
196 - │ * Do you want to configure a user for database hosts? │
197 - │ (y/N): │
196 + │ * Do you want to configure a user for database hosts? │
197 + │ (y/N): │
198 198 └─────────────────────────────────────────────────────────────────┘
199 199
200 200 >>> SELECT: y (YES)
@@ -202,13 +202,13 @@
202 202 > Type "y" and press ENTER
203 203
204 204 ┌─────────────────────────────────────────────────────────────────┐
205 - │ * Database host username (pterodactyluser): │
205 + │ * Database host username (pterodactyluser): │
206 206 └─────────────────────────────────────────────────────────────────┘
207 207
208 208 >>> LEAVE BLANK: Press ENTER
209 209
210 210 ┌─────────────────────────────────────────────────────────────────┐
211 - │ * Database host password: │
211 + │ * Database host password: │
212 212 └─────────────────────────────────────────────────────────────────┘
213 213
214 214 >>> Type a password (write it down!)
@@ -216,8 +216,8 @@
216 216 > Press ENTER
217 217
218 218 ┌─────────────────────────────────────────────────────────────────┐
219 - │ * Do you want to configure MySQL to be accessed externally? │
220 - │ (y/N): │
219 + │ * Do you want to configure MySQL to be accessed externally? │
220 + │ (y/N): │
221 221 └─────────────────────────────────────────────────────────────────┘
222 222
223 223 >>> SELECT: n (NO)
@@ -226,34 +226,25 @@
226 226
227 227
228 228 ┌─────────────────────────────────────────────────────────────────┐
229 - │ STEP 12: SSL FOR WINGS │
229 + │ STEP 12: SSL FOR WINGS │
230 230 └─────────────────────────────────────────────────────────────────┘
231 231
232 232 ┌─────────────────────────────────────────────────────────────────┐
233 - │ * Do you want to automatically configure HTTPS using │
234 - │ Let's Encrypt? (y/N): │
233 + │ * Do you want to automatically configure HTTPS using │
234 + │ Let's Encrypt? (y/N): │
235 235 └─────────────────────────────────────────────────────────────────┘
236 236
237 - ╔══════════════════════════════════════════════════════════════════╗
238 - ║ IF YOU HAVE A DOMAIN (FQDN): ║
239 - ║ SELECT: y (YES) ║
240 - ║ Then enter your domain for Wings: node.example.com ║
241 - ║ ║
242 - ║ IF YOU ONLY HAVE IP ADDRESS: ║
243 - ║ SELECT: n (NO) ║
244 - ║ Wings will use HTTP ║
245 - ╚══════════════════════════════════════════════════════════════════╝
237 + >>> SELECT: n (NO)
246 238
247 - >>> Choose based on your setup
248 - > Type "y" or "n" and press ENTER
239 + > Type "n" and press ENTER
249 240
250 241
251 242 ┌─────────────────────────────────────────────────────────────────┐
252 - │ STEP 13: FINAL CONFIRMATION │
243 + │ STEP 13: FINAL CONFIRMATION │
253 244 └─────────────────────────────────────────────────────────────────┘
254 245
255 246 ┌─────────────────────────────────────────────────────────────────┐
256 - │ * Proceed with installation? (y/N): │
247 + │ * Proceed with installation? (y/N): │
257 248 └─────────────────────────────────────────────────────────────────┘
258 249
259 250 >>> SELECT: y (YES)
@@ -263,30 +254,28 @@
263 254
264 255
265 256 ╔══════════════════════════════════════════════════════════════════╗
266 - ║ INSTALLATION COMPLETE! ║
267 - ║ ║
268 - ║ Your Pterodactyl Panel is now installed! ║
269 - ║ ║
270 - ║ Access your panel at: ║
271 - ║ http://YOUR_SERVER_IP ║
272 - ║ or ║
273 - ║ https://YOUR_DOMAIN (if SSL enabled) ║
274 - ║ ║
275 - ║ Login with: ║
276 - ║ Email: [your admin email] ║
277 - ║ Password: [your admin password] ║
278 - ║ ║
279 - ║ ⚠️ IMPORTANT: Your Wings still needs to be configured! ║
280 - ║ 1. Log into the panel ║
281 - ║ 2. Go to Admin → Nodes → Create New ║
282 - ║ 3. Generate the configuration file ║
283 - ║ 4. Copy it to /etc/pterodactyl/config.yml ║
284 - ║ 5. Run: systemctl start wings ║
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 ║
285 274 ╚══════════════════════════════════════════════════════════════════╝
286 275
287 276
288 277 ┌─────────────────────────────────────────────────────────────────┐
289 - │ QUICK REFERENCE SHEET │
278 + │ QUICK REFERENCE SHEET │
290 279 └─────────────────────────────────────────────────────────────────┘
291 280
292 281 ┌──────────────┬─────────────┬──────────────────────────────┐
@@ -299,7 +288,7 @@
299 288 │ DB password │ [TYPE] │ Strong password (save it) │
300 289 │ MySQL ext │ n │ No external access needed │
301 290 │ Admin user? │ y │ Create admin account │
302 - │ Let's Encrypt│ n or y │ n = IP only, y = domain │
291 + │ Let's Encrypt│ n │ n = IP only, y = domain │
303 292 │ Configure │ y │ Auto open firewall ports │
304 293 │ UFW? │ │ │
305 294 │ Wings DB │ y │ Create DB user for Wings │
@@ -308,19 +297,19 @@
308 297
309 298
310 299 ┌─────────────────────────────────────────────────────────────────┐
311 - │ FIREWALL PORTS TO OPEN │
300 + │ FIREWALL PORTS TO OPEN │
312 301 └─────────────────────────────────────────────────────────────────┘
313 302
314 303 ┌─────────────────────────────────────────────────────────────┐
315 - │ Port 80 - HTTP (Web Panel) │
316 - │ Port 443 - HTTPS (Web Panel) - if SSL enabled │
317 - │ Port 8080 - Wings WebSocket (Server communication) │
318 - │ Port 2022 - SFTP (File transfer for servers) │
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) │
319 308 └─────────────────────────────────────────────────────────────┘
320 309
321 310
322 311 ┌─────────────────────────────────────────────────────────────────┐
323 - │ TROUBLESHOOTING COMMANDS │
312 + │ TROUBLESHOOTING COMMANDS │
324 313 └─────────────────────────────────────────────────────────────────┘
325 314
326 315 # Check panel status
@@ -351,7 +340,7 @@
351 340
352 341
353 342 ┌─────────────────────────────────────────────────────────────────┐
354 - │ POST-INSTALLATION: WINGS SETUP │
343 + │ POST-INSTALLATION: WINGS SETUP │
355 344 └─────────────────────────────────────────────────────────────────┘
356 345
357 346 1. Login to panel: http://YOUR_SERVER_IP
@@ -361,24 +350,122 @@
361 350 3. Fill in:
362 351 • Name: Main Node
363 352 • Description: (optional)
353 + • Location: (optional)
354 + • Allow Automatic Allocation: Yes
364 355 • FQDN: YOUR_SERVER_IP or domain
365 - • Port: 8080
366 - • Behind Proxy: No
356 + • Daemon Port: 443
357 + • Communicate over SSL: Yes
358 + • Behind Proxy: Yes
367 359 • Public: Yes
368 360
369 361 4. After creating, click on the node → Configuration
370 362
371 - 5. Copy the configuration code
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
372 370
373 - 6. Save to: /etc/pterodactyl/config.yml
371 + 7. Save to: /etc/pterodactyl/config.yml
374 372
375 - 7. Start Wings:
373 + 8. Start Wings:
376 374 systemctl start wings
377 375 systemctl enable wings
378 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 +
379 466
380 467 ┌─────────────────────────────────────────────────────────────────┐
381 - │ IMPORTANT NOTES │
468 + │ IMPORTANT NOTES │
382 469 └─────────────────────────────────────────────────────────────────┘
383 470
384 471 ⚠️ SAVE ALL PASSWORDS: Panel DB, Admin user, Wings DB
@@ -394,13 +481,8 @@
394 481
395 482
396 483 ╔══════════════════════════════════════════════════════════════════╗
397 - ║ INSTALLATION SUCCESS! ║
398 - ║ ║
399 - ║ Your Pterodactyl Panel is now ready for use! ║
400 - ║ ║
401 - ║ Documentation: https://pterodactyl.io/docs ║
402 - ║ Discord: https://discord.gg/pterodactyl ║
403 - ║ GitHub: https://github.com/pterodactyl/panel ║
404 - ║ ║
405 - ║ Need help? You can ask me anytime! ║
484 + ║ INSTALLATION SUCCESS! ║
485 + ║ ║
486 + ║ Your Pterodactyl Panel is now ready for use! ║
487 + ║ ║
406 488 ╚══════════════════════════════════════════════════════════════════╝

entitybtw revised this gist 4 weeks ago. Go to revision

1 file changed, 0 insertions, 0 deletions

pterodactyl install script guide renamed to pterodactyl install guide.txt

File renamed without changes

entitybtw revised this gist 4 weeks ago. Go to revision

1 file changed, 406 insertions

pterodactyl install script guide (file created)

@@ -0,0 +1,406 @@
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 + ╔══════════════════════════════════════════════════════════════════╗
238 + ║ IF YOU HAVE A DOMAIN (FQDN): ║
239 + ║ SELECT: y (YES) ║
240 + ║ Then enter your domain for Wings: node.example.com ║
241 + ║ ║
242 + ║ IF YOU ONLY HAVE IP ADDRESS: ║
243 + ║ SELECT: n (NO) ║
244 + ║ Wings will use HTTP ║
245 + ╚══════════════════════════════════════════════════════════════════╝
246 +
247 + >>> Choose based on your setup
248 + > Type "y" or "n" and press ENTER
249 +
250 +
251 + ┌─────────────────────────────────────────────────────────────────┐
252 + │ STEP 13: FINAL CONFIRMATION │
253 + └─────────────────────────────────────────────────────────────────┘
254 +
255 + ┌─────────────────────────────────────────────────────────────────┐
256 + │ * Proceed with installation? (y/N): │
257 + └─────────────────────────────────────────────────────────────────┘
258 +
259 + >>> SELECT: y (YES)
260 +
261 + > Type "y" and press ENTER
262 + > Wait for installation to complete...
263 +
264 +
265 + ╔══════════════════════════════════════════════════════════════════╗
266 + ║ INSTALLATION COMPLETE! ║
267 + ║ ║
268 + ║ Your Pterodactyl Panel is now installed! ║
269 + ║ ║
270 + ║ Access your panel at: ║
271 + ║ http://YOUR_SERVER_IP ║
272 + ║ or ║
273 + ║ https://YOUR_DOMAIN (if SSL enabled) ║
274 + ║ ║
275 + ║ Login with: ║
276 + ║ Email: [your admin email] ║
277 + ║ Password: [your admin password] ║
278 + ║ ║
279 + ║ ⚠️ IMPORTANT: Your Wings still needs to be configured! ║
280 + ║ 1. Log into the panel ║
281 + ║ 2. Go to Admin → Nodes → Create New ║
282 + ║ 3. Generate the configuration file ║
283 + ║ 4. Copy it to /etc/pterodactyl/config.yml ║
284 + ║ 5. Run: systemctl start wings ║
285 + ╚══════════════════════════════════════════════════════════════════╝
286 +
287 +
288 + ┌─────────────────────────────────────────────────────────────────┐
289 + │ QUICK REFERENCE SHEET │
290 + └─────────────────────────────────────────────────────────────────┘
291 +
292 + ┌──────────────┬─────────────┬──────────────────────────────┐
293 + │ QUESTION │ ANSWER │ REASON │
294 + ├──────────────┼─────────────┼──────────────────────────────┤
295 + │ Panel/Wings │ 3 (Both) │ Install everything at once │
296 + │ Continue? │ y │ Start installation │
297 + │ Auto DB? │ y │ Let script handle DB │
298 + │ DB username │ [ENTER] │ Use default │
299 + │ DB password │ [TYPE] │ Strong password (save it) │
300 + │ MySQL ext │ n │ No external access needed │
301 + │ Admin user? │ y │ Create admin account │
302 + │ Let's Encrypt│ n or y │ n = IP only, y = domain │
303 + │ Configure │ y │ Auto open firewall ports │
304 + │ UFW? │ │ │
305 + │ Wings DB │ y │ Create DB user for Wings │
306 + │ Wings SSL │ n or y │ Same as panel SSL choice │
307 + └──────────────┴─────────────┴──────────────────────────────┘
308 +
309 +
310 + ┌─────────────────────────────────────────────────────────────────┐
311 + │ FIREWALL PORTS TO OPEN │
312 + └─────────────────────────────────────────────────────────────────┘
313 +
314 + ┌─────────────────────────────────────────────────────────────┐
315 + │ Port 80 - HTTP (Web Panel) │
316 + │ Port 443 - HTTPS (Web Panel) - if SSL enabled │
317 + │ Port 8080 - Wings WebSocket (Server communication) │
318 + │ Port 2022 - SFTP (File transfer for servers) │
319 + └─────────────────────────────────────────────────────────────┘
320 +
321 +
322 + ┌─────────────────────────────────────────────────────────────────┐
323 + │ TROUBLESHOOTING COMMANDS │
324 + └─────────────────────────────────────────────────────────────────┘
325 +
326 + # Check panel status
327 + systemctl status nginx
328 + systemctl status php8.2-fpm
329 +
330 + # Check wings status
331 + systemctl status wings
332 +
333 + # View panel logs
334 + tail -f /var/www/pterodactyl/storage/logs/laravel-*.log
335 +
336 + # View wings logs
337 + journalctl -u wings -f
338 +
339 + # Restart panel services
340 + systemctl restart nginx php8.2-fpm
341 +
342 + # Restart wings
343 + systemctl restart wings
344 +
345 + # Generate application key (if needed)
346 + php /var/www/pterodactyl/artisan key:generate --force
347 +
348 + # Clear cache
349 + php /var/www/pterodactyl/artisan config:clear
350 + php /var/www/pterodactyl/artisan cache:clear
351 +
352 +
353 + ┌─────────────────────────────────────────────────────────────────┐
354 + │ POST-INSTALLATION: WINGS SETUP │
355 + └─────────────────────────────────────────────────────────────────┘
356 +
357 + 1. Login to panel: http://YOUR_SERVER_IP
358 +
359 + 2. Go to: Admin → Nodes → Create New
360 +
361 + 3. Fill in:
362 + • Name: Main Node
363 + • Description: (optional)
364 + • FQDN: YOUR_SERVER_IP or domain
365 + • Port: 8080
366 + • Behind Proxy: No
367 + • Public: Yes
368 +
369 + 4. After creating, click on the node → Configuration
370 +
371 + 5. Copy the configuration code
372 +
373 + 6. Save to: /etc/pterodactyl/config.yml
374 +
375 + 7. Start Wings:
376 + systemctl start wings
377 + systemctl enable wings
378 +
379 +
380 + ┌─────────────────────────────────────────────────────────────────┐
381 + │ IMPORTANT NOTES │
382 + └─────────────────────────────────────────────────────────────────┘
383 +
384 + ⚠️ SAVE ALL PASSWORDS: Panel DB, Admin user, Wings DB
385 +
386 + ⚠️ Wait for migrations to complete (may take 2-5 minutes)
387 +
388 + ⚠️ If using IP instead of domain, you'll see a security warning
389 + (This is normal, just proceed)
390 +
391 + ⚠️ For production, use a domain with SSL certificates
392 +
393 + ⚠️ Backup /var/www/pterodactyl/.env file after installation
394 +
395 +
396 + ╔══════════════════════════════════════════════════════════════════╗
397 + ║ INSTALLATION SUCCESS! ║
398 + ║ ║
399 + ║ Your Pterodactyl Panel is now ready for use! ║
400 + ║ ║
401 + ║ Documentation: https://pterodactyl.io/docs ║
402 + ║ Discord: https://discord.gg/pterodactyl ║
403 + ║ GitHub: https://github.com/pterodactyl/panel ║
404 + ║ ║
405 + ║ Need help? You can ask me anytime! ║
406 + ╚══════════════════════════════════════════════════════════════════╝
Newer Older