I have my proof-of-concept working for the web infrastructure - no need for a Unicorn/Puma-like app, no need for monit, no need to daemonize - just systemd to manage N Racket processes, and nginx in front to reverse proxy to the Racket workers.
[Unit]
Description=Racket hello world %i
[Service]
WorkingDirectory=/home/deploy/appname/current/
ExecStart=/usr/local/bin/racket /home/deploy/appname/current/hello.rkt %i
Restart=always
[Install]
WantedBy=multi-user.target
Enable 2 workers:  sudo systemctl enable hello@{1..2}
Start them: sudo systemctl start hello\@{1..2}
Check status:  sudo systemctl status hello\@{1..2}
They auto start at boot time, and they auto restart if killed or they crash.
I hacked up a quick test using a command line argument to specify the port and log file (I know there are more elegant solutions, but I was in a hurry to verify it).  It's possible that using a single log file for all the workers will "just work", but I wasn't sure, so I use one log file per process for now. I suppose there are pros/cons to each approach.
(module+ main
    (define instance-id (string->number (vector-ref (current-command-line-arguments) 0)))
    (define port (+ 8000 instance-id))
    (serve/servlet
          dispatcher
          #:log-file (format "hello~a.log" instance-id)
          #:stateless? #t
          #:port port