If you've visited PDP-Gary, then you know I've got local AI being served by a real 1980s PDP-11 at
pdp1173.com/pdp-ai.html
The task of getting a PDP-11 to serve a public website live and yet not get overwhelmed is a delicate one, so I thought I'd relate how I did it!
Your browser first connects to Cloudflare, which handles the DNS for
pdp1173.com and provides the public HTTPS front door. Cloudflare forwards the traffic into my network, where it reaches Caddy, my reverse proxy.
Behind Caddy is Varnish, which handles caching and chooses which PDP serves a request. That distinction matters: most visitors can get the HTML and images from the cache without making the PDP do any work yet. Static content is normally cached for five minutes, and Varnish can keep serving an older cached copy during an outage.
When it needs an actual PDP, like for the webtop display on the front page, it prefers .29, the real Mentec 11/83 running 2.11BSD. It checks both machines every ten seconds. If Mentec becomes unhealthy, it automatically falls back to .26, a SIMH instance called “minerva,” then returns to Mentec when it recovers. Too bad the weak link in this whole chain is that BSD sits waiting for Ctrl-D to boot into multiuser mode, which I have to do by hand once per boot. Not sure how to solve that short of tweaking BSD again!
The live TOP display is a little different. Your browser asks for an update every 5 seconds; they come from the real PDP, but Varnish shares those updates among visitors during that window. The PDP runs a native CGI helper that reads its actual process and kernel statistics from the BSD UNIX kernel. The label in the upper-left corner of webtop tells you which machine supplied that snapshot. Normally, that should be Mentec when all is working as designed.
Gary takes a different route after the page loads. The PDP supplies the HTML, JavaScript, and images, but the JavaScript runs in your browser. When you send Gary a message, your browser sends the question and recent conversation history back to Caddy. Caddy routes that directly to a small AI bridge on port 8091, which talks to the local Qwen model. The brains are supplied by the modern GPU hardware—the two RTX 6000 Blackwell cards in our Dell Precision 7975.
And so all of what you SEE with PDP-Gary and none of what he thinks is computed by the PDP itself.
The answer streams back through Caddy and Cloudflare as it’s generated, and the browser adds the text to the conversation. The conversation history lives in that browser tab and gets included with subsequent questions. The PDP’s CGI handles the TOP display; it isn’t involved in the AI conversation.
That arrangement solves two problems. It keeps long-lived AI connections and most of the traffic off the PDP, and it keeps the private authentication key off it too. Caddy adds that key when forwarding requests to the bridge. Neither the browser nor the PDP needs to know it. I love 2.11BSD, but I’m not about to trust it with the keys to the modern side of the setup!
I’ve seen around 20 visitors active at once, which still feels like a lot for a website served by a PDP. A separate service on the Caddy machine handles the visitor totals and those little “still here” heartbeats, mostly so that the visitor counts are consistent even when failing over between PDPs.
So the old hardware really is serving the site and reporting its own live internals. The modern machines handle the encryption, caching, connection management, and AI horsepower. It’s a pretty entertaining division of labor!
--Dave
tmog.org