For small projects, it doesn’t matter much, right ? If the server is powerful enough, you can stack build there; if not, try to build a compatible binary on another machine, then upload the binary and restart ? Restarting a haskell web app is usually quick. systemd is one way to manage the process.
I have a bunch of small Haskell services running on my VPS. I compile the Haskell code to statically linked standalone executables using Nix, and then wrap them into a NixOS service and run them on the VPS. Nix takes care of deployment, restarts etc. Underneath it uses systemd.
I just build on my server and run from there behind nginx. You should aim to build during Continuous Deployment if you can, so that it’s the CI runners that take the CPU load.