Bookstack in a docker container. You can export pages with revision numbers and dates. I print out the emergency stuff and keep it in a binder. https://www.bookstackapp.com/ I've been using it at work for like a decade now. No apps or anything though, just a decent web interface.
Selfhosted
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
-
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
-
No spam posting.
-
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
-
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
-
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
-
No trolling.
-
No low-effort posts. This is subjective and will largely be determined by the community member reports.
Resources:
- selfh.st Newsletter and index of selfhosted software and apps
- awesome-selfhosted software
- awesome-sysadmin resources
- Self-Hosted Podcast from Jupiter Broadcasting
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
I've heard really good things about Outline too.
Great idea to print out the most important bits.
Oh damn!.. I've never crossed Bookstack in my searches, but from the previews it looks (actually) simple, clean, and powerful.
Now I know what the evening will be spent on!
what you use for your documentation
Hugo (markdown) files that i host on my internal server.
how you organize it
I use basic directory structure. Top level directories are like "dev", "home", "general". Self hosting is a dev/ subdir.
what information you include
Depends on how familiar i am with it and how often I'll be referencing it. Something i know well or access often will be more high level. Things like an annual process i have documented in more detail
how you work documentation into your changes/tinkering flow
My site has an "edit this page" feature which i use to open my IDE and make the change as I'm doing things. Sometimes I'll be lazy and just add in what i did this time and then let future me reconcile the differences 🙃
I use Obsidian with a folder for hardware and a folder for software, then an entry for each device or service. I've been pretty good about maintaining cross-links.
I kind of wish I used Docker Compose more, but I haven't run into a situation where it's been a problem yet.
Short: don't do anything manually, throw it into a ansible playbook. Save it somewhere.
If you have a mix of different systems both on-prem and cloud, and tie them together in various ways using VPNs, mesh or otherwise, create a graph using something like Excalidraw to give yourself a refresher on how everything connects. You want machines, hostnames, IPs, ports, and a list of services. You don’t have to be fancy by creating visual representations of each service, just a bulleted list. You only really have to update this when adding or removing compute.
If you’re running services on lots of different nodes, a spreadsheet that just maps services to whatever URL you use access them, to whichever backend server is running them. This takes minimum effort and gets you 90% of the way there.
I was just introduced to NetBox and it's really intriguing. It does look complicated but once it is setup it seems to work very well at integrating data from a spreadsheet into it and then automatically documenting changes and such. It's open source as well.
Gitlab has Draw.IO integration, as does Wiki.JS.
I don't have many machines but about 40 containers. I used docker compose. Then I've found Trillium Notes for the documenting part. I have the client on my mac that syncs to the trillium container on my server that way I can always have access if something happens and the server is down or I need it offline. One thing I love about it is that I've set it so all pages are read only by default. This makes it work for me more like a wiki and I don't accidentally overwrite something. The discipline to keep it updated?..... biggest challenge.
I keep everything I do as minimal as possible.
Everything is documented using either sh scripts or markdown style plain text files. If I need anything more than that, I'm over complicating things for my brain.
The upside to this approach is that it works anywhere because it's all just text files and it's very tiny in size. I am more interested in making low-power/low-spec things work so less is appropriate.
It is hard, if even possible, to keep documentation up-to-date. Better use a configuration management system (salt, ansible etc.) for your servers. Yes, you need to learn how to use it. Yes, it will take a longer time to make changes in your configuration. But as a result you'll have a self-documented configuration-as-a-code that will allow you to scale your setup as you need. Reproducing something won't require reading your notes, remembering your actions etc.
But as a result you’ll have a self-documented configuration-as-a-code that will allow you to scale your setup as you need. Reproducing something won’t require reading your notes, remembering your actions etc.
Until you realise that
- you don't really need to scale a homelab that much
- if something breaks, you just want to quickly fix it manually because "doing the Ansible" is more of a pain
- now idempotency and documentation-as-code is out of the window. ;)
(I'm being tongue-in-cheek here. I don't doubt this may work for you, but it takes much more discipline than I have.)
you don’t really need to scale a homelab that much
Maybe. But you never know this beforehand.
if something breaks, you just want to quickly fix it manually because “doing the Ansible” is more of a pain
In most cases you just need to replay a playbook for quick fix. But I agree that the proper fix will likely take a longer time (while downtime is much shorter).
now idempotency and documentation-as-code is out of the window.
Let @BruisedMoose@piefed.social decide.
P. S. I don't like Ansible, other tools can be easier to use. But I don't want to recommend something concrete.
I don't like Ansible, other tools can be easier to use. But I don't want to recommend something concrete.
Which ones do you like to work with? (Even though it's not a recommendation ;) I've only dabbled in Ansible so far and found it overkill for most of the things I do, but maybe one of yours isn't?
Yeah as someone who does both ansible is for repeatable multi-system commands like telling everything to update or configuring a local agent on every machine at once.
That's what I use it for as well. Updating 7+ VMs is no fun. With Ansible? No worries.
Day job: oneScrote and fucking ansible
Night job: some wiki for the architecture, but just config management for the config detail : we run the docs and it's done. Thankfully not fucking ansible; because in any environment where there are options, it's not fucking ansible.
Ha. I've been reading through thinking, "Yeah, maybe I should finally look into Ansible." And then I get here. :D
err . i don't really. well I do a bit. the obvious one is config-as-documentation: docker compose mainly. I'm in the middle from migrating from storing them in portainer's internal store to using git (and dockhand), which should improve their role as documentation with the addition of vcs.
in addition I have a handful of markdown notes in my obsidian vault to track a few things. there's some general terminal stuff command references, which aren't strictly for the server. i have a list off all my hard drives, including their SN,PN,Partition UUID and label (this is their partition/volume label as well an actual physical label on them. It makes moving between operations on my host machine, omv VM and physical drive easy. its a maddening combination of using three or more command ouputs to map a drive between whatever info is available in proxmox, a vm or physically otherwise!
| migrating from storing them in portainer’s internal store to using git (and dockhand)
This is exactly why I'm asking, actually! I've been working over the past couple of weeks to move everything that I had done under CasaOS to independent compose files in Dockhand. Yesterday I ran into a couple of things that must have been Casa-specific but I had no record of it and I'll be honest, my memory is garbage.
GitOps with assorted readme files in the repo for various bits.
I write everything in text editor first, apply later.
- emacs + org-roam
- by using descriptive names for articles and tags
- everything at the start, trim it down later
I have compose and a justfile, that's enough documentation for any project, right??
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I've seen in this thread:
| Fewer Letters | More Letters |
|---|---|
| Git | Popular version control system, primarily for code |
| IP | Internet Protocol |
| SSO | Single Sign-On |
| VPN | Virtual Private Network |
| ZFS | Solaris/Linux filesystem focusing on data integrity |
| k8s | Kubernetes container management package |
6 acronyms in this thread; the most compressed thread commented on today has 7 acronyms.
[Thread #207 for this comm, first seen 2nd Apr 2026, 12:40] [FAQ] [Full list] [Contact] [Source code]
A great question. First of all, all of my services run with docker compose and use volumes for their config storage which get backed up regularly. Then I just use markdown files organized by having a separate file for each service. Basically anything I would need to reproduce my setup on a new machine is what I try to write down. All the docs and compose yaml files are versioned in git. I usually realize I left out info later on and add it as it occurs to me, typically if I have to set up the services on a new machine. This all applies to any software that needs more than a little config, not just apps hosted for the purpose of other machines using them. It's a very imperfect process, but it's a ton better than what I used to do which was think "eh I'll remember how it's setup". I rarely would remember all the key details.