Contenido del curso
Gestión de Entornos
Nuevas Funcionalidades en Angular
- 7

Variables locales con @let en Angular
09:14 min - 8

Lazy loading de imágenes con ngSrc en Angular
17:08 min - 9

URLs amigables para SEO en Angular
11:27 min - 10

"Reactividad en Angular: Migración a Input Signals"
20:42 min - 11

Migración automática de @Input a signals en Angular
12:23 min - 12

Migración de Outputs en Angular: De Decoradores a Funciones
07:35 min - 13

linkedSignal en Angular: computed con set
12:56 min - 14

Sincronización de Componentes en Angular con Model y Signals
12:03 min - 15

toSignal: Observables de RxJS como Signals
11:17 min - 16

Conversión de Observables a Signals en Angular con toSignal
08:07 min - 17

Interoperabilidad de RXDS y Signals en Angular: Uso de RX Resourcers
11:10 min - 18

Manejo de Parámetros Reactivos con RX Resource en Angular
09:18 min - 19

Manejo de Promesas y Fetch en Angular sin RXJS
07:59 min - 20

Reactividad en Angular: Uso de Signals para Consultas DOM
09:00 min - 21

Configuración de Prettier para HTML en Angular
05:28 min
Server-Side Rendering (SSR) y Navegación
- 22

Migración al Application Builder de Angular
10:17 min - 23

Server Side Rendering con Angular: Mejora Rendimiento y SEO
13:26 min - 24

afterNextRender: código seguro solo en el browser
09:42 min - 25

Geolocalización y APIs: Creando un Mapa de Tiendas Cercanas
15:39 min - 26

Pre-rendering en Angular con ng build
11:25 min - 27

Desplegando Angular SSR en Firebase
Viendo ahora
Optimización de Rendimiento
- 28

Generación de Meta Tags Dinámicos con Angular y Open Graph
15:11 min - 29

Creación de MetaTags Dinámicos en Angular
12:51 min - 30

Proceso de Hydration y Event Replay en Angular
05:54 min - 31

Productos relacionados con RxResource en Angular
09:25 min - 32

Carga diferida de componentes en Angular para mejorar rendimiento
10:10 min - 33

Optimización de Incremental Hydration en Angular
06:14 min - 34

Configuración de Server Routing en Angular
10:43 min - 35

Aplicaciones Sin Zone.js: Migración a Signals en Angular
13:02 min - 36

Cierre del curso avanzado de Angular
00:53 min
Desplegando Angular SSR en Firebase
Resumen
Desplegar una aplicación Angular con server-side rendering requiere un servidor que ejecute Node.js, y Firebase App Hosting de Google Cloud te permite hacerlo en pocos clics sin montar infraestructura desde cero. Esta guía es para desarrolladores Angular que ya tienen SSR funcionando en local y necesitan llevarlo a producción.
¿Por qué necesitas un servidor Node.js para SSR?
Cuando tu aplicación pasa de static site generation a server-side rendering, ya no basta con servir archivos estáticos desde un CDN. El navegador no es suficiente: ahora tu aplicación necesita ejecutar JavaScript en el servidor para renderizar HTML antes de enviarlo al cliente.
Nosotros usamos Express y Node.js, así que el entorno mínimo es un runtime de Node. Existen alternativas como Bun o Cloudflare Workers, pero requieren más configuración. Para empezar, lo clásico y confiable sigue siendo Node.
En el mercado hay muchos proveedores que te dan un servidor Node listo: DigitalOcean, Amazon, Google Cloud. La diferencia es cuánto trabajo de infraestructura quieres asumir tú o tu equipo de DevOps.
¿Qué es Firebase App Hosting? Es un producto nuevo de Firebase que despliega aplicaciones full-stack con SSR sobre Google Cloud. Soporta Next.js y Angular, y se diferencia del Firebase Hosting tradicional, que solo sirve archivos estáticos.
¿Cómo configurar Firebase App Hosting paso a paso?
La configuración inicial vive en console.firebase.com [03:30]. Creas un proyecto nuevo, decides si activas Google Analytics y esperas a que se aliste el entorno. Firebase es una suite amplia: bases de datos, app links, configuration, storage de archivos y más. Funciona como backend as a service.
Una vez dentro del proyecto, abres la sección App Hosting (no confundir con el Hosting clásico de archivos estáticos).
¿App Hosting está en el plan gratuito?
No. A diferencia de otros servicios de Firebase, App Hosting solo está disponible en planes pagos por consumo, porque mantiene un servidor Node.js encendido para renderizar [05:50]. El costo es bajo, pero existe.
Al actualizar el proyecto, vinculas una cuenta de facturación. Aquí hay un detalle importante: puedes definir un tope de presupuesto para evitar facturas inesperadas, algo común en plataformas como Firebase o Amazon cuando los servicios no se configuran bien.
¿Cómo eliges la región y el repositorio?
Elige la región más cercana a tus usuarios. Si tu audiencia está en Estados Unidos, despliega en US. Si está en Asia o Europa, ajusta en consecuencia.
Luego conectas tu repositorio de GitHub. Vas a necesitar:
- Permisos sobre el repositorio que quieres desplegar.
- Una rama específica que App Hosting va a observar.
- La automatización de deployments en cada push a esa rama.
Si trabajas en una organización, coordina con tu technical lead o equipo de DevOps para los permisos.
¿Por qué crear una rama production en lugar de usar main?
El flujo de ramas marca la diferencia entre un despliegue limpio y un caos. En el repositorio del curso conviven tres ramas:
- main: el proyecto en su estado inicial, sin cambios.
- one-class: todo el progreso del curso con sus commits.
- production: la rama que dispara el despliegue real.
Cada vez que haces merge a production, App Hosting lanza un build automático. Este patrón se parece al GitLab Flow, donde existen ramas separadas para main, staging y production en lugar de mezclar todo en master.
¿Qué es GitLab Flow? Es una estrategia de ramas donde main es para desarrollo, pre-production funciona como staging y production representa el ambiente productivo. Cada merge tiene un propósito claro.
Después de hacer el merge de one-class a production y conectar la rama desde la consola de Firebase, los lanzamientos automáticos quedan activados [13:40].
¿Cómo resolver el error de App Hosting con Angular 19?
App Hosting usa un adaptador interno que prepara tu proyecto para el build. Tiene adaptadores por versión para Angular y Next.js, y soporte futuro para Svelte. El problema: la última versión de Angular, la 19, presenta un issue con el adaptador por defecto [17:00].
La solución son dos pasos concretos.
¿Qué dependencia debes instalar?
Desde la rama production, instala el adaptador específico como dependencia de desarrollo:
bash npm install -D @apphosting/adapter-angular
Fíjate que se pinea una versión exacta para evitar incompatibilidades futuras.
¿Qué script agregar al package.json?
Abre tu package.json y agrega una tarea nueva:
{ "scripts": { "apphosting:build": "FRAMEWORK_VERSION=19 apphosting-adapter-angular-build" } }
Con eso le dices al adaptador qué versión del framework usar durante el build. Haces commit, empujas a production y App Hosting reintenta el despliegue automáticamente.
La primera vez tarda un poco más porque provisiona toda la infraestructura. Después, los despliegues son más rápidos.
¿Qué obtienes después del despliegue exitoso?
Firebase te entrega una URL provisional con tu aplicación en vivo. Puedes configurar un dominio personalizado para tu proyecto o el de tu compañía cuando estés listo.
En el panel encuentras información valiosa para depurar:
- Logs de Google Cloud: registros de ejecución del servidor.
- Logs de build: cada paso del proceso de despliegue.
- Historial de despliegues: versiones anteriores y sus commits.
Estos pasos del build son exactamente lo que un equipo de infraestructura tendría que automatizar manualmente si no usaras App Hosting.
Una observación interesante sobre SSR en producción: cuando inspeccionas las peticiones de red, vas a notar que algunas llamadas iniciales no aparecen en el Network del navegador, porque ya se ejecutaron en el servidor. Solo verás los requests posteriores, los que dispara la aplicación una vez hidratada en el cliente.
Con esto ya tienes Angular con SSR corriendo sobre Google Cloud. Si prefieres otro proveedor, puedes hacerlo en Netlify, AWS o cualquier instancia con Node.js. La decisión depende de tu arquitectura y de cuánto control quieras sobre la infraestructura.
¿Qué proveedor estás usando para desplegar tus aplicaciones Angular con SSR? Cuéntalo en los comentarios.