Tabla de contenido
- ¿Qué necesitas para desplegar?
- Opción 1: Hosting compartido con cPanel y FTP
- Opción 2: VPS con SSH
- Configurar Apache para PHP
- Manejar variables de entorno en producción
- Errores comunes al desplegar
- Lista de verificación antes de ir a producción
Tienes tu aplicación PHP funcionando en local y llega el momento de subirla al mundo real. El proceso puede parecer intimidante la primera vez, pero siguiendo estos pasos lo harás sin contratiempos.
¿Qué necesitas para desplegar?
- Un servidor web: puede ser un hosting compartido, un VPS (servidor privado virtual) o una plataforma cloud
- PHP instalado en el servidor (generalmente PHP 8.1+)
- MySQL si tu aplicación usa base de datos
- FTP o SSH para subir los archivos
Las opciones más comunes para proyectos PHP son:
- Hostinger, SiteGround, NameCheap: hosting compartido económico, bueno para empezar
- DigitalOcean, Linode, Vultr: VPS con más control
- AWS, Google Cloud: para aplicaciones de mayor escala
Opción 1: Hosting compartido con cPanel y FTP
Esta es la opción más sencilla para empezar.
Paso 1: Accede a cPanel desde tu proveedor de hosting y busca “File Manager” o “Administrador de Archivos”.
Paso 2: Sube tus archivos a la carpeta public_html. Esta es la carpeta raíz de tu dominio.
Paso 3: Crea la base de datos en cPanel → MySQL Databases:
- Crea una nueva base de datos
- Crea un usuario MySQL
- Asigna el usuario a la base de datos con todos los privilegios
- Importa tu archivo
.sqldesde phpMyAdmin
Paso 4: Actualiza las variables de conexión en tu db.php o .env con los datos del servidor:
$host = 'localhost';
$db = 'tuusuario_nombrebd'; // formato del hosting
$user = 'tuusuario_dbuser';
$pass = 'TuPasswordSeguro123';
Con FTP (alternativa a File Manager):
Usa FileZilla o Cyberduck. Conéctate con:
- Host: ftp.tudominio.com
- Usuario y contraseña: los del cPanel
- Puerto: 21
Opción 2: VPS con SSH
Un VPS te da más control. Primero conéctate por SSH:
ssh usuario@ip-de-tu-servidor
Instalar Apache, PHP y MySQL:
sudo apt update
sudo apt install apache2 php8.1 libapache2-mod-php8.1 mysql-server
sudo apt install php8.1-mysql php8.1-mbstring php8.1-xml php8.1-curl
Subir tu proyecto:
Opción A — Con Git (recomendado):
cd /var/www/html
git clone https://github.com/tuusuario/mi-proyecto.git
Opción B — Con SCP desde tu máquina local:
scp -r ./mi-proyecto usuario@ip:/var/www/html/
Permisos:
sudo chown -R www-data:www-data /var/www/html/mi-proyecto
sudo chmod -R 755 /var/www/html/mi-proyecto
Configurar Apache para PHP
Crea un archivo de configuración para tu sitio:
sudo nano /etc/apache2/sites-available/mi-proyecto.conf
<VirtualHost *:80>
ServerName mi-dominio.com
ServerAlias www.mi-dominio.com
DocumentRoot /var/www/html/mi-proyecto/public
<Directory /var/www/html/mi-proyecto/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mi-proyecto-error.log
CustomLog ${APACHE_LOG_DIR}/mi-proyecto-access.log combined
</VirtualHost>
Activa el sitio:
sudo a2ensite mi-proyecto.conf
sudo a2enmod rewrite
sudo systemctl restart apache2
Manejar variables de entorno en producción
Nunca subas tu archivo .env a Git (ya debe estar en .gitignore). En producción, crea el .env manualmente:
nano /var/www/html/mi-proyecto/.env
APP_ENV=production
APP_DEBUG=false
DB_HOST=localhost
DB_DATABASE=mi_base_datos
DB_USERNAME=mi_usuario
DB_PASSWORD=MiPasswordMuySeguro123
En PHP, para leer estas variables puedes usar la librería vlucas/phpdotenv (con Composer) o configurarlas directamente en Apache:
# En la configuración de Apache:
SetEnv DB_PASSWORD "MiPasswordMuySeguro123"
Errores comunes al desplegar
Error 500 (Internal Server Error):
- Revisa los logs:
tail -f /var/log/apache2/error.log - Verifica que
APP_DEBUG=falseen producción (los errores no se muestran al público) - Comprueba los permisos de archivos
Página en blanco:
- Activa temporalmente display_errors en php.ini para ver el error
- Verifica que la ruta al archivo principal es correcta
Error de base de datos:
- Confirma que el usuario MySQL tiene los permisos correctos
- Verifica host, nombre de BD, usuario y contraseña
Imágenes o CSS no cargan:
- Revisa que las rutas son absolutas o relativas correctas en producción
- Confirma los permisos de la carpeta de assets
Lista de verificación antes de ir a producción
Antes de apuntar tu dominio al servidor, verifica:
-
APP_DEBUG=false— nunca mostrar errores al usuario - Contraseñas seguras en la base de datos de producción
-
.enven.gitignorey no en el repositorio - Backups configurados para la base de datos
- Certificado SSL instalado (HTTPS) — con Let’s Encrypt es gratuito
- Sentencias preparadas en todos los queries (sin SQL injection)
- Sanitización de inputs del usuario
- Logs de errores configurados
# Instalar SSL gratuito con Certbot
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d mi-dominio.com
El despliegue puede parecer complejo al principio, pero con práctica se vuelve parte natural del flujo de trabajo. Muchos equipos automatizan este proceso con CI/CD (GitHub Actions, por ejemplo), que ejecuta el despliegue automáticamente cada vez que haces push a la rama principal.