Hacé una copia de seguridad del panel antes de empezar (o al menos de los archivos que vas a tocar). Todos los pasos se corren desde la carpeta raíz de tu instalación de Pterodactyl Panel (normalmente /var/www/pterodactyl).

1. Copiar los archivos nuevos

Todo lo que está adentro de panel/new-files/ va tal cual, respetando la misma ruta relativa que tiene ahí adentro:

  • app/Http/Controllers/Admin/Nodes/NodeTrashController.php
  • app/Http/Controllers/Api/Client/Servers/TrashController.php
  • app/Http/Controllers/Api/Remote/TrashSettingsController.php
  • app/Http/Requests/Admin/Node/NodeTrashFormRequest.php
  • app/Http/Requests/Api/Client/Servers/Trash/GetTrashRequest.php
  • app/Http/Requests/Api/Client/Servers/Trash/PurgeTrashRequest.php
  • app/Http/Requests/Api/Client/Servers/Trash/RestoreTrashRequest.php
  • app/Models/NodeTrashSetting.php
  • app/Services/Trash/WingsTrashClient.php
  • database/migrations/2026_10_01_000001_create_node_trash_settings_table.php
  • resources/scripts/api/server/trash/purgeTrashItems.ts
  • resources/scripts/api/server/trash/restoreTrashItems.ts
  • resources/scripts/api/swr/getServerTrash.ts
  • resources/scripts/components/server/trash/TrashContainer.tsx
  • resources/scripts/components/server/trash/TrashRow.tsx
  • resources/views/admin/nodes/view/trash.blade.php

2. Aplicar los fragmentos sobre archivos existentes

Cada archivo dentro de panel/injected-code/ corresponde a un archivo que ya existe en tu panel. El nombre indica la ruta (los __ marcan la carpeta final) y arriba de cada bloque hay un comentario DESTINO: con la ruta real y UBICACIÓN: explicando dónde exactamente pegarlo, con el código de "antes" y "después" para que sea un simple reemplazo:

  • app_Models__Permission.php → app/Models/Permission.php
  • resources_scripts_components_server_files__FileManagerContainer.tsx → resources/scripts/components/server/files/FileManagerContainer.tsx
  • resources_scripts_components_server_files__FileObjectRow.tsx → resources/scripts/components/server/files/FileObjectRow.tsx
  • resources_views_admin_nodes_view__TABS.blade.php → resources/views/admin/nodes/view/TABS.blade.php
  • routes__admin.php → routes/admin.php
  • routes__api-client.php → routes/api-client.php
  • routes__api-remote.php → routes/api-remote.php

Ningún fragmento reemplaza el archivo completo: son bloques pequeños y puntuales para insertar o reemplazar dentro de un archivo que ya existe.

3. Migrar la base de datos

php artisan migrate

Esto crea la tabla node_trash_settings, donde vive la configuración de cada nodo (activado/desactivado y días de retención).

4. Reconstruir el frontend

yarn install
yarn build:production

Si el proceso falla con un error de memoria (JavaScript heap out of memory) en un servidor con poca RAM, corré el build con un límite de heap más alto, apoyándote en el swap disponible:

arduino
NODE_OPTIONS=--max-old-space-size=1600 yarn build:production

5. Limpiar cachés

arduino
php artisan config:clear
php artisan route:clear

Si tenés opcache habilitado en PHP-FPM, reiniciá el servicio para que tome el código nuevo:

systemctl restart php8.2-fpm

Con esto la parte del panel queda lista. Seguí con la instalación en Wings antes de probar nada, porque el panel por sí solo no mueve ningún archivo: esa parte la hace Wings.

Anterior: Requisitos · Siguiente: Instalación en Wings