10 years ago we uploaded the server/backend binary to a VM, installed postgres/mysql and configured nginx/haproxy as a reverse proxy/ssl termination.
Now, if you want to deploy a modern SPA while using some buzzwords like k8s and devops you need:
* complex frontend build process with things like webpack which have huge config files
* Build docker images for all components (each microservice, frontend, etc)
* Build zips for deploying your lambda functions
* Configure docker repository for storing images
* gitlab/bbpipelines/githubactions/whatever pipeline configuration for automating all this building
* Setup a production-ready k8s cluster
* Write the kubernetes yaml files for describing your services
* Figure out how to hookup a cloud load balancer to your kubernetes ingress
* Figure out letsencrypt certificate renewal and make your ingress aware
* Figure out CDN configuration (and invalidation) because apparently we don't serve the frontend from the backend server anymore
* Some network config so your lambdas can access the backend
* Since we're using microservices we're going to need some service discovery, and depending on which SD solution we choose we might need to build this into each individual microservice (Consul)
* And probably lots more as I haven't even touched service meshes, or JWT authentication, caching and cache invalidation