Lección 42 de 45 15 min de lectura

Deploy a Producción

Llegó el momento de llevar tu aplicación Laravel al mundo real. En esta lección aprenderás las mejores opciones para desplegar: Laravel Forge (la opción recomendada) y Laravel Cloud.

¿Por qué Forge o Cloud?

Existen muchas formas de desplegar Laravel: servidores compartidos, VPS configurados manualmente, Heroku, DigitalOcean App Platform, etc. Sin embargo, las herramientas oficiales de Laravel ofrecen la mejor experiencia:

  • Optimizadas para Laravel: Configuración perfecta de PHP, Nginx, colas, etc.
  • Soporte oficial: Creadas y mantenidas por el equipo de Laravel
  • Despliegues sin downtime: Tu aplicación nunca deja de funcionar
  • SSL automático: Certificados Let's Encrypt configurados automáticamente

Laravel Forge (Recomendado)

Laravel Forge es un panel de gestión de servidores que te permite provisionar y administrar servidores VPS optimizados para Laravel. Es la opción más versátil y la que recomendamos.

¿Qué es Laravel VPS?

Desde octubre de 2025, Forge incluye Laravel VPS, servidores propios que puedes crear con un solo clic en menos de 10 segundos. Ya no necesitas proveedores externos como DigitalOcean o AWS.

Ventajas de Laravel VPS:

  • Provisioning instantáneo: Servidor listo en segundos (no minutos)
  • Precio competitivo: Desde ~6$/mes por un VPS básico
  • Facturación unificada: Todo en una sola factura de Forge
  • Terminal integrado: SSH colaborativo en tiempo real desde el navegador
  • Métricas en vivo: CPU, memoria y ancho de banda en tiempo real

Planes de Forge

Forge tiene tres planes con tarifa plana mensual (el VPS se paga aparte):

  • Hobby (12$/mes): VPS ilimitados, 1 servidor externo, despliegues sin downtime
  • Growth (19$/mes): Servidores ilimitados, 5% descuento en VPS, soporte estándar
  • Business (39$/mes): 15% descuento en VPS, equipos y organizaciones, soporte prioritario

Multi-cliente: El plan Business permite crear organizaciones separadas para cada cliente, con facturación y accesos independientes. Ideal para agencias y freelancers.

Características principales

  • Zero-downtime deployments: Habilitado por defecto en sitios nuevos
  • SSL automático: Certificados Let's Encrypt sin configuración manual
  • Dominios Forge: Cada sitio obtiene un subdominio .on-forge.com gratuito
  • Backups automáticos: De base de datos y archivos
  • Colas y workers: Gestión integrada de procesos en segundo plano
  • Múltiples sitios: Un servidor puede alojar varias aplicaciones

Desplegar con Forge: paso a paso

text
1. Crear cuenta en forge.laravel.com

2. Crear servidor (Laravel VPS o proveedor externo)
   - Selecciona región cercana a tus usuarios
   - Elige tamaño según tus necesidades (1GB RAM mínimo)
   - Espera ~10 segundos si es Laravel VPS

3. Conectar repositorio Git
   - GitHub, GitLab o Bitbucket
   - Forge obtiene acceso de solo lectura

4. Crear sitio
   - Indica el dominio (o usa el subdominio .on-forge.com)
   - Selecciona el repositorio y rama
   - Forge clona el código automáticamente

5. Configurar variables de entorno
   - Copia tu .env de producción
   - Genera APP_KEY nuevo: php artisan key:generate --show
   - Configura base de datos, mail, etc.

6. Primer despliegue
   - Click en "Deploy Now"
   - Forge ejecuta: git pull, composer install, npm build, migrate...

Script de despliegue típico

Forge genera automáticamente un script de despliegue que puedes personalizar:

bash
cd /home/forge/tudominio.com

git pull origin main

composer install --no-dev --optimize-autoloader

npm ci
npm run build

php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

php artisan queue:restart

Laravel Cloud

Laravel Cloud es la plataforma PaaS (Platform as a Service) oficial de Laravel. A diferencia de Forge donde gestionas servidores, en Cloud solo te preocupas del código.

¿Cuándo elegir Cloud sobre Forge?

  • Quieres cero gestión de servidor
  • Necesitas autoescalado automático
  • Prefieres pagar por uso real (ideal para tráfico variable)
  • Quieres preview environments por cada PR

Planes de Cloud

  • Starter (0$/mes + uso): Pay-as-you-go, ideal para proyectos personales, hibernación automática
  • Growth (20$/mes + uso): Autoescalado hasta 10x, workers de colas, preview environments
  • Business (200$/mes + uso): Autoescalado ilimitado, WAF, hasta 10 usuarios

Características de Cloud

  • Serverless Postgres: Base de datos que escala automáticamente y se pausa cuando no hay tráfico
  • Preview environments: Entorno completo por cada Pull Request
  • Hibernación: Tu app se pausa cuando no hay tráfico (ahorro de costes)
  • Múltiples regiones: US, Canadá, EU, Asia Pacific

Forge vs Cloud: ¿cuál elegir?

Ambas son excelentes opciones. La elección depende de tus necesidades:

text
ELIGE FORGE SI:
✓ Quieres control total del servidor
✓ Tienes tráfico predecible (coste fijo)
✓ Gestionas múltiples clientes (organizaciones separadas)
✓ Necesitas software específico en el servidor
✓ Presupuesto ajustado (~18$/mes: 12$ Forge + 6$ VPS)

ELIGE CLOUD SI:
✓ Prefieres no gestionar servidores
✓ Tu tráfico es muy variable (pago por uso)
✓ Quieres preview environments automáticos
✓ Necesitas autoescalado sin configuración
✓ Tu proyecto puede hibernar cuando no hay tráfico

Nuestra recomendación: Para la mayoría de proyectos, Forge + Laravel VPS ofrece el mejor equilibrio entre control, precio y facilidad de uso. Cloud es ideal para startups con tráfico impredecible o equipos que prefieren cero operaciones.

Preparar tu aplicación para producción

Antes de desplegar, asegúrate de seguir estas buenas prácticas:

1. Variables de entorno

env
# Producción: NUNCA uses estos valores en local
APP_ENV=production
APP_DEBUG=false
APP_URL=https://tudominio.com

# Genera una key nueva para producción
# php artisan key:generate --show
APP_KEY=base64:TuClaveSecretaAqui...

# Base de datos de producción
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=tu_app_production
DB_USERNAME=forge
DB_PASSWORD=password_seguro

# Drivers optimizados para producción
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

2. Optimizaciones de producción

bash
# Cachear configuración (muy importante)
php artisan config:cache

# Cachear rutas
php artisan route:cache

# Cachear vistas Blade
php artisan view:cache

# Optimizar autoloader de Composer
composer install --no-dev --optimize-autoloader

# Compilar assets para producción
npm run build

3. Checklist pre-deploy

text
□ APP_DEBUG=false
□ APP_ENV=production
□ APP_KEY generado para producción
□ Tests pasando (php artisan test)
□ Sin errores en el log
□ Migraciones probadas
□ Assets compilados (npm run build)
□ .env.example actualizado
□ README con instrucciones de deploy

Resumen

  • Laravel Forge es la opción recomendada: control total, precio predecible y ahora con VPS propios desde ~6$/mes
  • Laravel VPS permite crear servidores en segundos sin proveedores externos
  • Laravel Cloud es ideal si prefieres cero gestión de servidor y pago por uso
  • Forge Business permite organizaciones separadas para gestionar múltiples clientes
  • Ambas plataformas incluyen zero-downtime deployments y SSL automático
  • Antes de desplegar: APP_DEBUG=false, cachear config/rutas/vistas, y ejecutar tests

Ejercicios

Ejercicio 1: Preparar .env de producción

Crea un archivo .env.production.example para tu proyecto con todas las variables necesarias para producción. Incluye comentarios explicando qué debe configurar el desarrollador que despliegue.

Ver solución
# .env.production.example
# Copia este archivo a .env en el servidor y configura los valores

# ============================================
# APLICACIÓN
# ============================================
APP_NAME="Mi Aplicación"
APP_ENV=production
APP_DEBUG=false
# Genera con: php artisan key:generate --show
APP_KEY=
APP_URL=https://tudominio.com

# ============================================
# BASE DE DATOS
# ============================================
# Forge crea usuario 'forge' automáticamente
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mi_app_production
DB_USERNAME=forge
DB_PASSWORD=

# ============================================
# CACHE, SESIONES Y COLAS
# ============================================
# Redis recomendado para producción
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

# ============================================
# EMAIL
# ============================================
# Configura tu proveedor (Mailgun, Postmark, SES...)
MAIL_MAILER=smtp
MAIL_HOST=
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="noreply@tudominio.com"
MAIL_FROM_NAME="${APP_NAME}"

# ============================================
# ALMACENAMIENTO
# ============================================
# Para archivos subidos por usuarios
FILESYSTEM_DISK=local
# O usa S3 para escalabilidad:
# AWS_ACCESS_KEY_ID=
# AWS_SECRET_ACCESS_KEY=
# AWS_DEFAULT_REGION=eu-west-1
# AWS_BUCKET=

# ============================================
# LOGS
# ============================================
LOG_CHANNEL=daily
LOG_LEVEL=error

Ejercicio 2: Script de despliegue

Escribe un script de despliegue para Forge que incluya: migraciones, caché de configuración, rutas y vistas, compilación de assets, y reinicio de workers de cola.

Ver solución
#!/bin/bash
# Script de despliegue para Laravel Forge

set -e  # Salir si hay errores

cd /home/forge/tudominio.com

echo ">> Activando modo mantenimiento..."
php artisan down --retry=60

echo ">> Obteniendo cambios de Git..."
git pull origin main

echo ">> Instalando dependencias PHP..."
composer install --no-dev --optimize-autoloader --no-interaction

echo ">> Instalando dependencias Node..."
npm ci

echo ">> Compilando assets..."
npm run build

echo ">> Ejecutando migraciones..."
php artisan migrate --force

echo ">> Limpiando cachés antiguas..."
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

echo ">> Generando cachés de producción..."
php artisan config:cache
php artisan route:cache
php artisan view:cache

echo ">> Reiniciando workers de cola..."
php artisan queue:restart

echo ">> Desactivando modo mantenimiento..."
php artisan up

echo ">> ¡Deploy completado!"

Ejercicio 3: Comparar costes

Calcula el coste mensual aproximado de desplegar una aplicación Laravel en: (a) Forge + Laravel VPS básico, (b) Forge + DigitalOcean 2GB, (c) Laravel Cloud plan Growth con uso moderado. ¿Cuál elegirías para un proyecto personal? ¿Y para un cliente?

Ver solución
COMPARATIVA DE COSTES MENSUALES
================================

(a) Forge + Laravel VPS básico
   - Forge Hobby: 12$/mes
   - Laravel VPS 1GB: ~6$/mes
   - TOTAL: ~18$/mes

(b) Forge + DigitalOcean 2GB
   - Forge Hobby: 12$/mes
   - DigitalOcean Droplet 2GB: 12$/mes
   - TOTAL: ~24$/mes

(c) Laravel Cloud Growth
   - Plan base: 20$/mes
   - Compute (asumiendo app activa 8h/día): ~15$/mes
   - Base de datos serverless: ~10$/mes
   - TOTAL: ~45$/mes (variable según uso)

RECOMENDACIÓN:
--------------
Proyecto personal: Forge + Laravel VPS (~18$/mes)
  - Más económico
  - Control total
  - Ideal para aprender

Cliente pequeño/mediano: Forge + Laravel VPS (~18$/mes)
  - Coste predecible
  - Fácil de gestionar
  - Plan Business si gestionas varios clientes

Startup con tráfico variable: Laravel Cloud
  - Autoescalado automático
  - Pago por uso real
  - Preview environments para el equipo

Nota: Cloud puede ser más económico si tu app tiene
poco tráfico gracias a la hibernación automática.

¿Quieres dominar el deploy de Laravel?

Aprende CI/CD, monitorización, backups automáticos y más en nuestros cursos premium con proyectos reales.

Ver cursos premium