Hmm, interesting question. I'd like to know how other people do it.
At work, we generally don't write narrative documentation for server setup. It requires quite the effort to make sure it doesn't go stale.
Instead, we keep Ansible playbooks on a Git repository. Every change we make to the server setup is done through the playbooks. Git commits provide a history of the changes made (we usually write the why in the long commit message).
Usually just having a README with information on how to run the playbooks and which distro the playbooks are based on is enough.