Every framework feature works self-hosted
Server Components, RSC streaming, ISR, Server Actions, image/font optimization — all run on a vanilla Node.js server via next start. The pieces that change: you operate the SSL, the process manager, the CDN.
Production server
npm run build then npm run start. Default port 3000; override with -p. The server is single-process by default; use a process manager (PM2, systemd, launchd, Docker orchestrator) to keep it alive and scale.
Reverse proxy
Put nginx or Caddy in front of next start for TLS termination, request logging, and gzip/brotli. Caddy is the simplest because TLS is automatic.
Image optimization needs sharp
Self-hosted, the optimizer uses sharp internally. Install it explicitly so production doesn't fall back to unoptimized images.