Por qué autoalojar Astro en un VPS
Astro tiene una particularidad: puede producir un sitio 100 % estático (output: 'static') o una aplicación con renderizado en servidor bajo demanda (output: 'server' mediante @astrojs/node). Esta dualidad hace que el VPS resulte muy pertinente. En estático, sirve directamente archivos HTML desde Nginx, sin ningún proceso Node: rendimiento máximo y huella mínima. En SSR, lanza un servidor Node que renderiza las páginas dinámicamente, útil para contenidos personalizados o para endpoints de API integrados. En un VPS, elige su estrategia sin quedar encerrado en el modelo impuesto por una plataforma de despliegue front. También controla la caché HTTP, las cabeceras de seguridad y la compresión Brotli, allí donde los alojamientos front gestionan eso como una caja negra.
Beneficios concretos
- Libertad del modo de salida: estático puro o SSR Node, o incluso híbrido por ruta
- En estático, Nginx sirve los archivos sin ningún proceso Node: nada que ejecutar por petición
- Control total de la caché HTTP, de las cabeceras de seguridad (CSP, HSTS) y de la compresión Brotli
- Sin límite de ancho de banda ni cuota de peticiones impuestos por una plataforma front
- Endpoints de API de Astro alojados en el mismo dominio, sin función serverless de terceros
- Despliegue reproducible mediante Docker: el mismo build en local y en producción
Requisitos de hardware y software
Un sitio Astro estático cabe en el VPS más pequeño imaginable: 1 vCPU y 1 GB de RAM bastan de sobra, ya que Nginx solo sirve archivos. En modo SSR, prevea 2 GB para el proceso Node y los picos de renderizado. Instale Node.js 20 LTS para construir (o construya en CI), Docker si lo contenedoriza, y Nginx como frontal. Apunte mondomaine.com y www.mondomaine.com a la IP del VPS. Cuente con 5 GB de disco; la carpeta dist/ de un sitio estático pesa normalmente unos pocos MB.
Despliegue paso a paso
Elegir el modo de salida
En
astro.config.mjs, definaoutput: 'static'para un sitio de contenido, ooutput: 'server'conadapter: node({ mode: 'standalone' })si necesita SSR. Esta elección condiciona todo el resto del despliegue.Construir la aplicación
Ejecute
npm run build. En estático, obtiene una carpetadist/con el HTML, el CSS y el JS listos para servir. En SSR, obtiene además undist/server/entry.mjsque ejecutar con Node.Servir el estático con Nginx (modo estático)
Apunte la directiva
rootde su vhost a/var/www/astro/disty activetry_files $uri $uri/ /404.html;. Añadagzip on;y cabecerasCache-Controllargas en los assets versionados. No hace falta ningún contenedor.Contenedorizar el servidor Node (modo SSR)
Para el SSR, cree un Dockerfile basado en
node:20-alpineque copiedist/y lancenode ./dist/server/entry.mjs. Exponga el puerto 4321 y arranque condocker compose up -d. Nginx hará después unproxy_passhacia ese puerto.Configurar el reverse proxy y la compresión
Tanto si está en estático como en SSR detrás de Node, declare el vhost Nginx con
wwwredirigido al dominio apex. Active Brotli si el módulo está disponible, para obtener assets aún más ligeros que con gzip.Activar el SSL
Ejecute
certbot --nginx -d mondomaine.com -d www.mondomaine.com. Fuerce la redirección a HTTPS y añada la cabeceraStrict-Transport-Security. Valide el despliegue con una prueba de Lighthouse desde su navegador.
Incluso para un sitio SSR, aproveche el renderizado híbrido de Astro: marque las páginas estáticas con export const prerender = true para que se generen en el build y las sirva directamente Nginx, reservando el proceso Node únicamente para las rutas realmente dinámicas. Así reduce drásticamente la carga del servidor. Y coloque una caché proxy_cache de Nginx delante de las páginas SSR que cambian poco, para absorber los picos de tráfico.
Desplegar Astro en un clic desde el Marketplace
El Marketplace ServOrbit ofrece una plantilla Astro Stack que configura automáticamente Node.js LTS, PM2 y Nginx en su VPS. En unos minutos, su entorno de producción está listo para acoger su aplicación Astro — en modo estático o en SSR — sin configuración manual.
Comparado con la instalación descrita en esta guía, la plantilla se encarga de la puesta en marcha inicial y le permite empezar directamente en la etapa «construya su aplicación y transfiérala».