// Índice de contenidos
Un entorno de desarrollo profesional necesita flexibilidad: múltiples versiones de PHP para proyectos legacy y modernos, Composer para dependencias, Git para control de versiones, y herramientas de debugging como Xdebug.
HestiaCP ofrece todo esto en un solo panel, sin la complejidad de configurar cada herramienta manualmente. He usado HestiaCP como entorno de desarrollo para equipos de hasta 10 desarrolladores, con docenas de proyectos simultáneos en diferentes versiones de PHP.
En esta guía te muestro cómo convertir tu VPS con HestiaCP en una estación de desarrollo completa: desde la configuración de multi-PHP hasta despliegues automatizados con Git hooks.
Por qué HestiaCP para desarrollo
Ventajas frente a XAMPP/MAMP/Docker
| Característica | XAMPP/MAMP | Docker | HestiaCP VPS |
|---|---|---|---|
| Multi-PHP simultáneo | Limitado | ✓ Complejo | ✓ Nativo |
| Entorno igual a producción | ✗ | ✓ | ✓ |
| Gestión visual | ✓ Básica | ✗ | ✓ Completa |
| Email testing | ✗ | Requiere config | ✓ Incluido |
| SSL real | ✗ | Complejo | ✓ Let’s Encrypt |
| Colaboración equipo | ✗ | ✓ | ✓ |
| Coste | Gratis | Gratis | VPS ~€5/mes |
Casos de uso ideales
- Freelancers con múltiples clientes y proyectos
- Agencias que necesitan entornos de staging
- Equipos que colaboran en los mismos proyectos
- Proyectos legacy que requieren PHP antiguo
Requisitos mínimos
| Uso | RAM | CPU | Disco |
|---|---|---|---|
| Individual | 2 GB | 1 vCPU | 40 GB |
| Equipo pequeño | 4 GB | 2 vCPU | 60 GB |
| Equipo grande | 8 GB | 4 vCPU | 100 GB |
Configurar Multi-PHP
HestiaCP soporta múltiples versiones de PHP simultáneamente, permitiendo que cada proyecto use la versión que necesita.
Versiones disponibles
| PHP | Estado | Uso recomendado |
|---|---|---|
| 8.3 | Actual | Nuevos proyectos |
| 8.2 | LTS | Producción estable |
| 8.1 | Soporte seguridad | Legacy reciente |
| 8.0 | EOL | Solo migración |
| 7.4 | EOL | Legacy obligatorio |
| 7.2 | EOL | Legacy muy antiguo |
Habilitar versiones adicionales
Desde el panel:
- Ve a Server → Configure → Web Server
- Marca las versiones PHP que necesitas
- Guarda y espera la instalación
O por CLI:
# Ver versiones disponibles
v-list-sys-php
# Instalar PHP 8.1 adicional
apt install php8.1 php8.1-fpm php8.1-cli php8.1-common \
php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring \
php8.1-xml php8.1-zip php8.1-bcmath php8.1-intl
# Reiniciar servicios
systemctl restart php8.1-fpm
v-rebuild-web-domains admin
Asignar PHP por dominio
# Cambiar versión PHP de un dominio
v-change-web-domain-backend-tpl usuario dominio.com PHP-8.1
# Ver versión actual
v-list-web-domain usuario dominio.com | grep BACKEND
Crear templates personalizados
Para configuraciones PHP específicas por proyecto:
# Copiar template existente
cp /usr/local/hestia/data/templates/web/php-fpm/PHP-8.3.tpl \
/usr/local/hestia/data/templates/web/php-fpm/PHP-8.3-dev.tpl
# Editar con configuración de desarrollo
nano /usr/local/hestia/data/templates/web/php-fpm/PHP-8.3-dev.tpl
Añade opciones de desarrollo:
php_admin_value[display_errors] = On
php_admin_value[error_reporting] = E_ALL
php_admin_value[log_errors] = On
php_admin_value[memory_limit] = 512M
php_admin_value[max_execution_time] = 300
Instalar y usar Composer
Composer es esencial para cualquier proyecto PHP moderno.
Instalar Composer globalmente
# Descargar instalador
curl -sS https://getcomposer.org/installer | php
# Mover a PATH global
mv composer.phar /usr/local/bin/composer
# Verificar instalación
composer --version
Instalar para usuario específico
Si cada desarrollador necesita su propio Composer:
# Como usuario (no root)
su - usuario
cd ~
curl -sS https://getcomposer.org/installer | php
echo 'alias composer="php ~/composer.phar"' >> ~/.bashrc
source ~/.bashrc
Usar Composer por proyecto
# Navegar al proyecto
cd /home/usuario/web/proyecto.com/public_html
# Iniciar proyecto nuevo
composer init
# Instalar dependencias existentes
composer install
# Añadir paquete
composer require monolog/monolog
# Actualizar dependencias
composer update
Configurar autoload
En tu index.php o bootstrap:
<?php
require_once __DIR__ . '/vendor/autoload.php';
// Tu código aquí
Composer con diferentes versiones PHP
# Usar PHP específico para Composer
/usr/bin/php8.1 /usr/local/bin/composer install
# Crear alias por proyecto
alias composer81="/usr/bin/php8.1 /usr/local/bin/composer"
Configurar Git en el servidor
Git permite control de versiones y despliegues automatizados.
Instalar Git
# Probablemente ya está instalado
apt install git
# Configurar usuario global
git config --global user.name "Tu Nombre"
git config --global user.email "[email protected]"
Clonar repositorio en proyecto
# Como el usuario del dominio
su - usuario
cd /home/usuario/web/proyecto.com
# Clonar repo (reemplaza public_html)
rm -rf public_html
git clone [email protected]:tu-usuario/tu-repo.git public_html
# O clonar en subdirectorio
git clone [email protected]:tu-usuario/tu-repo.git public_html/app
Configurar SSH keys para GitHub/GitLab
# Generar key SSH
su - usuario
ssh-keygen -t ed25519 -C "servidor-desarrollo"
# Ver clave pública (añadir a GitHub/GitLab)
cat ~/.ssh/id_ed25519.pub
# Probar conexión
ssh -T [email protected]
Git hooks para despliegue automático
Crea /home/usuario/web/proyecto.com/public_html/.git/hooks/post-receive:
#!/bin/bash
# Variables
DEPLOY_DIR="/home/usuario/web/proyecto.com/public_html"
BRANCH="main"
# Checkout
cd $DEPLOY_DIR
git --work-tree=$DEPLOY_DIR --git-dir=$DEPLOY_DIR/.git checkout -f $BRANCH
# Instalar dependencias
composer install --no-dev --optimize-autoloader
# Limpiar caché (Laravel ejemplo)
php artisan cache:clear
php artisan config:cache
php artisan route:cache
echo "Despliegue completado: $(date)"
chmod +x /home/usuario/web/proyecto.com/public_html/.git/hooks/post-receive
VPS para desarrollo
El VPS HestiaCP incluye Multi-PHP, Composer, Git y todas las herramientas que necesitas para desarrollar. Entorno profesional desde €8.62/mes.
Xdebug para debugging
Xdebug es imprescindible para debugging profesional.
Instalar Xdebug
# Para PHP 8.3
apt install php8.3-xdebug
# Para múltiples versiones
apt install php8.2-xdebug php8.1-xdebug
Configurar Xdebug 3
Crea /etc/php/8.3/mods-available/xdebug.ini:
zend_extension=xdebug.so
; Modo de operación
xdebug.mode=debug,develop
; Configuración de conexión
xdebug.client_host=tu-ip-local
xdebug.client_port=9003
xdebug.start_with_request=trigger
; Logs
xdebug.log=/var/log/xdebug.log
xdebug.log_level=3
; IDE key
xdebug.idekey=PHPSTORM
Habilitar Xdebug
# Habilitar para PHP-FPM
phpenmod -v 8.3 xdebug
systemctl restart php8.3-fpm
# Verificar
php -m | grep xdebug
Configurar VS Code
En .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/home/usuario/web/proyecto.com/public_html": "${workspaceFolder}"
}
}
]
}
Configurar PHPStorm
- File → Settings → PHP → Debug
- Xdebug port: 9003
- File → Settings → PHP → Servers
- Añade servidor con path mappings
Activar debugging por request
Añade a la URL: ?XDEBUG_SESSION_START=PHPSTORM
O usa extensión de navegador:
- Chrome: Xdebug Helper
- Firefox: Xdebug Helper
Desactivar en producción
# Deshabilitar Xdebug
phpdismod -v 8.3 xdebug
systemctl restart php8.3-fpm
Node.js y herramientas frontend
Proyectos modernos necesitan Node.js para compilar assets.
Instalar Node.js con NVM
# Instalar NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Cargar NVM
source ~/.bashrc
# Instalar Node LTS
nvm install --lts
# Verificar
node --version
npm --version
Instalar Node.js globalmente
# Usando NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install nodejs
# Verificar
node --version
npm --version
Herramientas comunes
# Instaladores de paquetes
npm install -g yarn pnpm
# Build tools
npm install -g vite webpack
# Utilidades
npm install -g npm-check-updates
Compilar assets por proyecto
cd /home/usuario/web/proyecto.com/public_html
# Instalar dependencias
npm install
# Desarrollo (watch mode)
npm run dev
# Producción
npm run build
PM2 para procesos Node
# Instalar PM2
npm install -g pm2
# Iniciar aplicación Node
pm2 start app.js --name "mi-app"
# Ver procesos
pm2 list
# Logs
pm2 logs mi-app
# Reiniciar con sistema
pm2 startup
pm2 save
Bases de datos de desarrollo
Crear base de datos por proyecto
# Desde CLI
v-add-database usuario proyecto_db db_user contraseña
# La base de datos será: usuario_proyecto_db
# El usuario será: usuario_db_user
phpMyAdmin
HestiaCP incluye phpMyAdmin. Accede en:
https://tu-servidor:8083/phpmyadmin/
Múltiples entornos de DB
Para desarrollo, staging y producción separados:
# Desarrollo
v-add-database usuario proyecto_dev dev_user pass123
# Staging
v-add-database usuario proyecto_staging stg_user pass456
# Producción (en otro servidor idealmente)
Exportar/Importar bases de datos
# Exportar
mysqldump -u root -p usuario_proyecto_db > backup.sql
# Importar
mysql -u root -p usuario_proyecto_dev < backup.sql
# Con compresión
mysqldump -u root -p usuario_proyecto_db | gzip > backup.sql.gz
gunzip < backup.sql.gz | mysql -u root -p usuario_proyecto_dev
Redis para desarrollo
# Instalar Redis
apt install redis-server php8.3-redis
# Configurar
systemctl enable redis-server
systemctl start redis-server
# Verificar
redis-cli ping
# Respuesta: PONG
Entornos por proyecto
Estructura recomendada
/home/usuario/web/
├── proyecto-cliente1.dev/
│ └── public_html/ # PHP 8.3
├── proyecto-legacy.dev/
│ └── public_html/ # PHP 7.4
├── staging-cliente1.dev/
│ └── public_html/ # PHP 8.3 (copia de prod)
└── api-proyecto.dev/
└── public_html/ # PHP 8.2
Dominios de desarrollo
Usa subdominios o dominios .dev/.local:
# Añadir dominio de desarrollo
v-add-web-domain usuario proyecto.dev
# Añadir SSL local (opcional)
v-add-letsencrypt-domain usuario proyecto.dev
Variables de entorno
Crea .env por proyecto:
# /home/usuario/web/proyecto.dev/public_html/.env
APP_ENV=development
APP_DEBUG=true
DB_HOST=localhost
DB_DATABASE=usuario_proyecto_dev
DB_USERNAME=usuario_dev_user
DB_PASSWORD=contraseña
Archivos de configuración
Para Laravel:
// config/app.php lee de .env
'env' => env('APP_ENV', 'production'),
'debug' => env('APP_DEBUG', false),
Para WordPress:
// wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Despliegues automatizados
Script de despliegue básico
Crea /home/usuario/scripts/deploy.sh:
#!/bin/bash
# Configuración
PROJECT_DIR="/home/usuario/web/proyecto.com/public_html"
BRANCH="main"
LOG_FILE="/var/log/deploy.log"
echo "=== Despliegue iniciado: $(date) ===" >> $LOG_FILE
cd $PROJECT_DIR
# Pull cambios
git fetch origin
git reset --hard origin/$BRANCH
# Instalar dependencias PHP
composer install --no-dev --optimize-autoloader
# Instalar dependencias Node y compilar
npm ci
npm run build
# Migraciones (Laravel)
php artisan migrate --force
# Limpiar cachés
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Permisos
chown -R usuario:usuario $PROJECT_DIR
find $PROJECT_DIR -type d -exec chmod 755 {} \;
find $PROJECT_DIR -type f -exec chmod 644 {} \;
echo "=== Despliegue completado: $(date) ===" >> $LOG_FILE
GitHub Actions + SSH
.github/workflows/deploy.yml:
name: Deploy to Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /home/usuario/web/proyecto.com/public_html
git pull origin main
composer install --no-dev
npm ci && npm run build
php artisan migrate --force
Webhook para despliegue
Crea endpoint en tu proyecto:
<?php
// /deploy-webhook.php
$secret = 'tu-secreto-webhook';
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE_256'] ?? '';
$payload = file_get_contents('php://input');
$hash = 'sha256=' . hash_hmac('sha256', $payload, $secret);
if (!hash_equals($hash, $signature)) {
http_response_code(401);
exit('Unauthorized');
}
// Ejecutar despliegue
exec('/home/usuario/scripts/deploy.sh 2>&1', $output, $return);
echo implode("\n", $output);
Entorno de desarrollo listo
El VPS HestiaCP Administrado incluye configuración optimizada para desarrollo: Multi-PHP, Composer, Git hooks, y soporte técnico especializado.
Herramientas CLI útiles
WP-CLI para WordPress
# Instalar WP-CLI
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp
# Usar
cd /home/usuario/web/sitio.com/public_html
wp core update
wp plugin update --all
wp cache flush
Laravel Artisan
cd /home/usuario/web/proyecto.com/public_html
# Comandos comunes
php artisan make:model Producto -mcr
php artisan migrate:fresh --seed
php artisan tinker
php artisan queue:work
Symfony Console
cd /home/usuario/web/proyecto.com/public_html
php bin/console cache:clear
php bin/console doctrine:migrations:migrate
php bin/console debug:router
Scripts personalizados
Crea aliases útiles en ~/.bashrc:
# Navegación rápida
alias web="cd /home/\$(whoami)/web"
alias proyecto="cd /home/\$(whoami)/web/proyecto.com/public_html"
# Logs
alias phplog="tail -f /var/log/php8.3-fpm.log"
alias nginxlog="tail -f /var/log/nginx/domains/*.log"
# Composer con PHP específico
alias composer81="/usr/bin/php8.1 /usr/local/bin/composer"
alias composer82="/usr/bin/php8.2 /usr/local/bin/composer"
# Git shortcuts
alias gs="git status"
alias gp="git pull origin main"
alias gc="git commit -am"
Buenas prácticas
Separar desarrollo de producción
| Aspecto | Desarrollo | Producción |
|---|---|---|
| display_errors | On | Off |
| error_reporting | E_ALL | E_ALL & ~E_DEPRECATED |
| Xdebug | Habilitado | Deshabilitado |
| OPcache validate | 0 (off) | 60 (segundos) |
| Cache | Deshabilitado | Habilitado |
Estructura de branches
- main: Producción (siempre estable)
- develop: Staging (pruebas integración)
- feature/xxx: Desarrollo local
Preguntas frecuentes
¿Puedo desarrollar en Windows y desplegar en HestiaCP?
Sí. HestiaCP (Linux) es el entorno de servidor. Puedes desarrollar localmemente en Windows/Mac (usando Docker, XAMPP o WSL) y desplegar cambios a tu servidor HestiaCP via Git.
¿HestiaCP soporta Docker?
Sí, puedes instalar Docker en el mismo servidor. Sin embargo, HestiaCP gestiona el servidor web (Nginx/Apache) directamente. Lo ideal es usar Docker para servicios adicionales (Redis, ElasticSearch) o usar HestiaCP como entorno nativo sin Docker para la web.
¿Cómo accedo a la base de datos remotamente?
Por seguridad, MySQL suele estar cerrado al exterior. Lo mejor es usar un túnel SSH (soportado por la mayoría de clientes DB como TablePlus o DBeaver) conectando al puerto 3306 a través de SSH.
¿Puedo tener diferentes versiones de Node.js?
Sí, usando NVM (Node Version Manager) puedes instalar y cambiar entre múltiples versiones de Node.js por usuario o por proyecto.
¿Es seguro dejar Xdebug habilitado?
No en producción. Xdebug añade una sobrecarga de rendimiento significativa y puede exponer información sensible. Úsalo solo en entornos de desarrollo y deshabilítalo cuando no lo uses.
Conclusión
HestiaCP no es solo un panel para alojar sitios; es una potente suite de desarrollo. Al combinar las herramientas nativas de Linux (Git, Composer, Bash) con la facilidad de gestión de HestiaCP, obtienes un entorno profesional, flexible y gratuito.
Ya no necesitas pagar licencias costosas de cPanel o luchar con configuraciones manuales de servidores “bare metal”. HestiaCP te da lo mejor de ambos mundos.
Si quieres un entorno de desarrollo llave en mano, con soporte para resolver dudas de configuración, el VPS HestiaCP Administrado de Avantys es la solución ideal para tu equipo.
Guías relacionadas
VPS HestiaCP Administrado
Tu servidor HestiaCP con soporte técnico profesional. Nos encargamos de la administración para que tú te dediques a tus clientes.
VPS HestiaCP Administrado
La potencia de un VPS con el panel HestiaCP, montado y gestionado por nosotros.