
General
Puerto 25565 no funciona: diagnostica tu servidor Minecraft paso a paso
Aísla por capas por qué el puerto 25565 de Minecraft no responde: proceso, configuración, UFW, proveedor, Docker, Pterodactyl, DNS o NAT.
Leer más10 min de lectura

28/7/2026 ·Mizael Segovia· 10 min de lectura ·
140 visualizaciones
Nuestro equipo está listo para ayudarte con cualquier duda o problema que tengas.
ContáctenosPara instalar Pterodactyl en un VPS Ubuntu 24.04 necesitas un servidor KVM con acceso root, un dominio, Docker, PHP 8.3, MariaDB, Redis, nginx y certificados TLS. En esta guía configuraremos manualmente el Panel y Wings, verificaremos cada servicio y dejaremos claro cómo volver atrás si algo falla.
Compatibilidad usada en esta guía: Ubuntu 24.04 LTS, Pterodactyl Panel 1.12, Wings 1.12, PHP 8.3, MariaDB y nginx. La documentación oficial también admite Ubuntu 22.04 y Debian 11, 12 y 13. Wings no funciona en Windows y suele fallar en OpenVZ, Virtuozzo o LXC; KVM es la opción segura.
Pterodactyl es un panel de administración de servidores de juegos que ejecuta cada instancia dentro de contenedores Docker aislados. La arquitectura tiene dos piezas:
Puedes instalar ambos en el mismo VPS para un entorno pequeño. Para producción o varios nodos, conviene separar el Panel del servidor donde se ejecutan los juegos.
systemd-detect-virt
uname -r
Si el primer comando devuelve kvm, puedes continuar. Si muestra openvz, lxc o virtuozzo, confirma con tu proveedor que Docker y las funciones de red necesarias están habilitadas.
sudo apt update
sudo apt upgrade -y
sudo mkdir -p /root/pterodactyl-backup
sudo cp -a /etc/nginx /root/pterodactyl-backup/nginx-before 2>/dev/null || true
Si el proveedor permite snapshots, créalo ahora. El rollback más limpio de una instalación nueva es restaurar ese snapshot.
sudo apt install -y software-properties-common curl ca-certificates gnupg tar unzip git
sudo apt update
sudo apt install -y php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} mariadb-server nginx redis-server
sudo systemctl enable --now mariadb nginx redis-server php8.3-fpm
Verifica las versiones:
php -v
mariadb --version
nginx -v
redis-cli ping
redis-cli ping debe responder PONG.
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
composer --version
Entra a MariaDB:
sudo mariadb
Cambia UNA_CLAVE_LARGA_Y_UNICA por una contraseña real:
CREATE DATABASE panel;
CREATE USER 'pterodactyl'@'127.0.0.1' IDENTIFIED BY 'UNA_CLAVE_LARGA_Y_UNICA';
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'127.0.0.1';
FLUSH PRIVILEGES;
EXIT;
grep APP_KEY /var/www/pterodactyl/.env
Guarda esa línea fuera del servidor. Sin APP_KEY, los datos cifrados no podrán recuperarse aunque tengas copia de la base de datos.
cd /var/www/pterodactyl
sudo php artisan p:environment:setup
sudo php artisan p:environment:database
sudo php artisan p:environment:mail
sudo php artisan migrate --seed --force
sudo php artisan p:user:make
sudo chown -R www-data:www-data /var/www/pterodactyl
Usa la URL HTTPS definitiva del Panel durante el asistente. Para correo, selecciona SMTP si dispones de credenciales; la función mail de PHP no es recomendable en producción.
Crea el virtual host:
sudo nano /etc/nginx/sites-available/pterodactyl.conf
server {
listen 80;
listen [::]:80;
server_name panel.ejemplo.com;
root /var/www/pterodactyl/public;
index index.php;
client_max_body_size 100m;
client_body_timeout 120s;
sendfile off;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param PHP_VALUE "upload_max_filesize=100M \n post_max_size=100M";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
Activa el sitio y valida la configuración:
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d panel.ejemplo.com
sudo certbot renew --dry-run
No continúes con Wings bajo TLS hasta que el dominio resuelva correctamente y el certificado sea válido.
Edita el crontab de root:
sudo crontab -e
Añade:
* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
Elige un VPS con virtualización KVM para instalar Docker, Panel y Wings sin las limitaciones habituales de OpenVZ o LXC.


Crea el servicio:
sudo nano /etc/systemd/system/pteroq.service
[Unit]
Description=Pterodactyl Queue Worker
After=redis-server.service
[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now pteroq.service
sudo systemctl status pteroq.service --no-pager
Importante: los puertos publicados por Docker pueden saltarse reglas de UFW. Filtra tráfico con las cadenas compatibles de iptables y la cadena DOCKER-USER, o aplica el firewall en el proveedor.
sudo mkdir -p /etc/pterodactyl
sudo curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
sudo chmod u+x /usr/local/bin/wings
/usr/local/bin/wings --version
node1.ejemplo.com./etc/pterodactyl/config.yml o ejecuta el comando de token generado por el Panel.Si el Panel usa HTTPS, Wings también debe usar un certificado válido para su FQDN.
sudo wings --debug
Cuando arranque sin errores, pulsa Ctrl+C y crea:
sudo nano /etc/systemd/system/wings.service
[Unit]
Description=Pterodactyl Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
User=root
WorkingDirectory=/etc/pterodactyl
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now wings
sudo systemctl status wings --no-pager
En el nodo, crea las allocations con la IP pública y los puertos que usarán los servidores. No uses 127.0.0.1.
hostname -I | awk '{print $1}'
sudo ss -lntup
Abre únicamente los puertos necesarios. Como referencia:
sudo nginx -t
sudo systemctl is-active nginx php8.3-fpm mariadb redis-server pteroq docker wings
curl -I https://panel.ejemplo.com
sudo journalctl -u pteroq -n 50 --no-pager
sudo journalctl -u wings -n 100 --no-pager
sudo docker info
La instalación está lista cuando puedes iniciar sesión, el nodo aparece con corazón verde, Wings responde sin errores y un servidor de prueba puede instalarse, iniciar y aceptar conexiones.
Revisa DNS, certificado, FQDN y puerto de Wings. Comprueba que el Panel pueda alcanzar el nodo y que el reloj del sistema esté sincronizado.
dig +short node1.ejemplo.com
curl -vk https://node1.ejemplo.com:8080
sudo timedatectl status
sudo systemctl status docker --no-pager
sudo docker info
sudo journalctl -u docker -n 100 --no-pager
Confirma que el VPS no usa una virtualización incompatible y que el kernel no tenga modificaciones restrictivas.
sudo systemctl status php8.3-fpm --no-pager
ls -l /run/php/php8.3-fpm.sock
sudo tail -n 100 /var/log/nginx/error.log
El socket configurado en nginx debe coincidir con el socket real de PHP-FPM.
sudo systemctl status pteroq --no-pager
sudo journalctl -u pteroq -n 100 --no-pager
sudo crontab -l
redis-cli ping
Antes de desinstalar, respalda .env, la base de datos y APP_KEY:
sudo cp /var/www/pterodactyl/.env /root/pterodactyl-backup/
sudo mariadb-dump panel > /root/pterodactyl-backup/panel.sql
sudo tar -czf /root/pterodactyl-backup/pterodactyl-files.tar.gz /var/www/pterodactyl /etc/pterodactyl
Para detener la instalación sin borrar datos:
sudo systemctl disable --now wings pteroq
sudo systemctl stop nginx
Si era un VPS nuevo, restaurar el snapshot previo es más seguro que eliminar paquetes uno por uno.
.env, APP_KEY, config.yml y datos de servidores.Sí, para pruebas o instalaciones pequeñas. En producción, separarlos mejora el aislamiento y facilita escalar nodos.
No es una opción fiable. La documentación oficial advierte que suele fallar por limitaciones de Docker. Usa KVM o un servidor dedicado.
Es muy recomendable y prácticamente necesario para una configuración HTTPS limpia de Panel y Wings.
El Panel puede funcionar con recursos modestos, pero los juegos determinan el consumo real. Calcula por servidor, jugadores, mods, plugins y carga, y deja margen para Docker, caché y sistema operativo.
Una instalación correcta de Pterodactyl no termina cuando aparece la pantalla de login. Debes validar colas, cron, Docker, Wings, TLS, allocations, backups y recuperación. Esa diferencia convierte una instalación que “parece funcionar” en una plataforma administrable.
Encuentra primero nuestros próximos artículos
Marca Teramont como fuente preferida para ver más de nuestras guías y noticias en Google, Top Stories y sus experiencias con IA.

Continúa explorando guías, noticias y análisis relacionados.

General
Aísla por capas por qué el puerto 25565 de Minecraft no responde: proceso, configuración, UFW, proveedor, Docker, Pterodactyl, DNS o NAT.
Leer más10 min de lectura
General
Virtualizor confirma que un secuestro BGP desvió su infraestructura y distribuyó una actualización maliciosa. Revisa alcance, IOC, diagnóstico y recuperación.
Leer más9 min de lectura
General
Comparativa práctica de NGINX vs Traefik con arquitectura, rendimiento medido, Docker, Kubernetes, TLS, caché, seguridad y recomendaciones por caso de uso.
Leer más12 min de lecturasudo mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
sudo curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
sudo tar -xzvf panel.tar.gz
sudo chmod -R 755 storage bootstrap/cache
sudo cp .env.example .env
sudo COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader
sudo php artisan key:generate --force
sudo apt remove -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc || true
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker run --rm hello-world