Bare Metal and Nginx
When I started deciding which infrastructure to use to serve the content, I realized that the main problem was not building it, but removing it.
Modern web stacks tend to accumulate layers. Containers, orchestration, application servers, runtimes, frameworks. Each layer solves a problem, but adds complexity. The risk is that infrastructure becomes something that requires too much effort to maintain, instead of something that simply works with minimal attention.
The starting point is a clear constraint. The output is static. The site is just a collection of files. HTML, CSS, and little else. There is no application to run, no state to manage, no logic to execute on the server.
Once this constraint is established, most of the stack becomes unnecessary.
Bare metal is not a performance choice. It is a simplicity choice.
A single machine, reachable over the network, with a filesystem and a web server. No containers, no orchestration, no intermediate layers. The deployment target is not an environment. It is a directory.
Nginx fits naturally into this model because it implements exactly what is needed, and nothing more. It serves static files efficiently, manages connections, supports TLS, caching, and compression. It does not require application runtimes, it does not introduce business logic, and it does not need to know how the content was generated. It remains a simple, predictable, and stable component.
From its point of view, the system does not exist. There is only a folder.
And this is exactly the desired property.
The server should not be aware of the tool that generated the site. There should be no coupling between the two. Publishing simply means copying files from one place to another. The result is immediately available.
There is no build step on the server. No dependency installation. No runtime to start. No processes to monitor. If the files are there, the site is live.
This reduces the operational surface to a minimum.
Configuration becomes simple and explicit. A root directory, a port, optionally TLS. Caching and compression can be enabled, but they are optimizations, not requirements. The system works without them.
Failure modes also become simple. If something breaks, it is the machine, the network, or the files. There are no hidden layers where problems can accumulate.
This approach also changes how updates happen.
There is no deployment pipeline in the traditional sense. There is only synchronization. Replace the files, and the site changes. Rollback simply means restoring a previous version of the same directory.
The server does not evolve. The content does.
This separation is fundamental.
The tool is responsible for generating the site. The server is responsible for serving it. Each part has a single role, and neither needs to know about the other.
Bare metal provides the simplest possible environment. Nginx provides the simplest possible interface to the web.