How do you document your setup?
from BruisedMoose@piefed.social to selfhosted@lemmy.world on 02 Apr 12:09
https://piefed.social/c/selfhosted/p/1944040/how-do-you-document-your-setup

Like soup-to-nuts. I know I need to document what I’m doing and I’ve started several times, but then I never go back and make updates. I don’t know if it’s just the ADHD or if I’m just going about it or thinking about it in the wrong way.

So I’m curious about:
- what you use for your documentation - how you organize it
- what information you include
- how you work documentation into your changes/tinkering flow

Edit: Dang, folks! You all have given me a lot to read through, think about, and explore. Thank you!

#selfhosted

threaded - newest

MajinBlayze@lemmy.world on 02 Apr 12:13 next collapse

That’s the neat part, I don’t.

Buck@jlai.lu on 02 Apr 12:32 next collapse

The theory is I use Docmost. The reality is I don’t, and I hope my backups are solid.

MajinBlayze@lemmy.world on 02 Apr 12:43 collapse

I have an obsidian document where I write changes I want to do in the future that I never look at; does that count?

Buck@jlai.lu on 02 Apr 12:54 next collapse

Ouh! I have a checklist of things I need to add/update too, that I never check. Maybe we could mutualize! ;)

foggy@lemmy.world on 02 Apr 13:15 collapse

I just found my todo list and half of it is irrelevant and half of it is done.

I even had a work todo list for my old job lol.

undefinedTruth@lemmy.zip on 02 Apr 12:53 collapse

“I don’t need to, I have it stored all in my head.”

Famous last words.

MajinBlayze@lemmy.world on 02 Apr 12:55 next collapse

It’s not like anyone needs to support it when I’m gone.

irmadlad@lemmy.world on 02 Apr 13:00 next collapse

That’s the devil talking Bobby Boucher.

frongt@lemmy.zip on 02 Apr 16:07 next collapse

“I can remember that” is my cue to write it down, because I won’t.

SkyNTP@lemmy.ml on 02 Apr 19:50 collapse

Documentation is for onboarding other people. Why on earth would I need to onboard other people to something self-hosted?

Shimitar@downonthestreet.eu on 02 Apr 12:19 next collapse

Dokuwiki

wiki.gardiol.org

For me for future memory and for others who might need it

irmadlad@lemmy.world on 02 Apr 12:53 next collapse

wiki.gardiol.org

BTW, this gent’s wiki is worth a bookmark. Stumbled on it before I knew the originator.

Shimitar@downonthestreet.eu on 02 Apr 13:32 collapse

Thanks you, it means a lot. Just to be clear for whomever didn’t go there: there is zero monetization, no ads, no profiling.

BruisedMoose@piefed.social on 02 Apr 14:34 collapse

Yeah, I’m currently using Wiki.js. I will definitely check out how you’ve got things organized. It looks really good!

Shimitar@downonthestreet.eu on 02 Apr 17:14 collapse

I am using wiki. Is for a different project and I can’t say I really prefer it over dokuwiki. They both have good points. I don’t like the php dependency of dokuwiki but wikijs feels a bit overcomplex.

irmadlad@lemmy.world on 02 Apr 12:25 next collapse

  • I use Obsidian
  • Usually, what I do is write the documentation as I am engaged with the project at hand. Then clean everything up, and transfer to Obsidian.
  • I include everything. I don’t leave anything for my mind to wonder about. If I didn’t write it down, it didn’t happen.
  • Date any addenda or changes (4-2-26: Firewall rules review)
atzanteol@sh.itjust.works on 02 Apr 12:30 next collapse

The fun thing about infrastructure as code is that the terraform, ansible and k8s manifests are documentation.

I only really need to document some bootstrap things in case of emergency and maybe some “architectural” things. I use joplin for that (and many other things).

eodur@piefed.social on 02 Apr 12:59 next collapse

This is the way

Semi_Hemi_Demigod@lemmy.world on 02 Apr 13:19 next collapse

Yep. It feels good knowing I can take a few hundred KB of text files and rebuild my whole system.

BruisedMoose@piefed.social on 02 Apr 14:27 next collapse

Without really knowing much about it, I just always figured it was overkill for me. Plus I don’t know that I’d even consider myself much more of a beginner with Docker. But you all are making me consider looking into it.

atzanteol@sh.itjust.works on 02 Apr 14:52 collapse

I get that - it’s difficult to see the point in it until you’ve gone along without it. Especially as a beginner since you don’t have a strong sense of what problems you will encounter and how these tools solve those problems.

At some point the learning curve for IaaC becomes worth the investment. I actually pushed off learning k8s myself for some time because it was “too complicated” and docker-compose worked just fine for me. And now that I’ve spent time learning it I converted over very quickly and wouldn’t go back… It’s much easier to maintain, monitor and setup new services now.

Depending on your environment something like Ansible might be a good place to start. You can begin even with just a simple playbook that does an “apt update && apt upgrade” on all your systems. And then start using it to push out standard configurations, install software, create users, etc. The benefit pays off in time. For example - recently (yesterday) I was able to install Apache Alloy on a half-dozen systems trivially because I have a set of Ansible scripts that manage my systems. Literally took 10 mins. All servers have the app installed, running, and using the same configuration. And I can modify that configuration across all those systems just as easily. It’s very powerful and reduces “drift” where some systems are configured incorrectly and over time you forget “which one the correct one?” For me the “correct one” is the one in source control.

AliasVortex@lemmy.world on 02 Apr 14:38 collapse

That’s the direction I’m moving my lab in. Plus a bit of supplemental markdown to keep track of which guides I’m referencing (and which parts can be ignored because I baked it into the terrafom). It’s really nice to know that as long as I tweak the terraform for changes, I don’t have to worry about forgetting what I changed.

Trincapinones@lemmy.dbzer0.com on 02 Apr 12:35 next collapse

I’m just rewriting everything in Ansible and I think is worth the effort, it’s self-documented and as an added bonus I won’t have to keep backups of the whole VMs, just the ZFS pool with the data/databases.

otacon239@lemmy.world on 02 Apr 12:36 next collapse

At work, since I’m the sole IT, I’ve been putting everything into MkDocs and it’s been working out great for the team. Only complaint is that I can’t seem to figure out how to update anything without just relaunching the Docker container every time. They mention that you can live reload, but not how.

synapse1278@lemmy.world on 02 Apr 12:37 next collapse

  • what you use for your documentation

Markdown files

  • how you organize it

What ?

  • what information you include

The commands that worked and the stuff that didn’t work and the links to the source of information

  • how you work documentation into your changes

I write as I go. I keep it as part of a git repository when relevant

death916@piefed.death916.xyz on 02 Apr 12:38 next collapse

I used to try and do it all in obsidian but I’d forget a lot. Now I use nix and it’s all done for me basically

Decronym@lemmy.decronym.xyz on 02 Apr 12:40 next collapse

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 12 acronyms.

[Thread #207 for this comm, first seen 2nd Apr 2026, 12:40] [FAQ] [Full list] [Contact] [Source code]

panda_abyss@lemmy.ca on 02 Apr 12:47 next collapse

I have compose and a justfile, that’s enough documentation for any project, right??

normonator@lemmy.ml on 02 Apr 12:49 next collapse

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. 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.

ekky@sopuli.xyz on 02 Apr 13:00 next collapse

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!

eodur@piefed.social on 02 Apr 13:01 collapse

I’ve heard really good things about Outline too.

Great idea to print out the most important bits.

esc@piefed.social on 02 Apr 12:56 next collapse

I write everything in text editor first, apply later. 1. emacs + org-roam 2. by using descriptive names for articles and tags 3. everything at the start, trim it down later

hamsda@feddit.org on 02 Apr 12:58 next collapse

It depends on what it is. I do not have a singular documentation-platform or wiki for those things. I’m more of the keep the docs where the code is guy. I also try to keep complexity to a minimum.

All my linux server setups are done with ansible. ansible itself is pretty self-documenting, as you more or less declare the desired outcome in YAML form and ansible does the rest. This way, I do not need to remember it, but it’s easier to understand when looking it up again.

Most of my projects have a git repository, so most of what I need to know or do is documented

  • in a README.md
  • as pipeline-instructions inside .gitlab-ci.yml

This way, I was able to reduce complexity and unify my homelab projects.

My current homelab-state is:

  • most projects are now docker-based
  • most projects have a GitLab CI for automated updating to newer versions
  • the CI itself is a project and all my CI-docker-based deploys use this unified pipeline-project
  • most projects can be tested locally before rolling out new versions to my VMs
  • some projects have a production and a staging server to test
  • those which cannot be dockerized or turned into a CI are tools and don’t need that (e.g. ansible playbooks or my GitLab CI)

On what to include, I always try to think: Will I still be able to understand this without documentation if I forget about the project for 6 months and need to make a change then? If you can’t be sure, put it in writing.

If it’s just a small thing regarding not the project itself or the functionality or setup itself but rather something like I had to use this strange code-block here because of XXX, I’ll just put a comment next to the code-line or code-block in question. These comments mostly also include a link to a bug-report if I found one, so i can later check and see if it’s been fixed already.

eodur@piefed.social on 02 Apr 12:59 next collapse

GitOps with assorted readme files in the repo for various bits.

TrickDacy@lemmy.world on 02 Apr 13:04 next collapse

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.

EncryptKeeper@lemmy.world on 02 Apr 13:10 next collapse

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.

Strider@lemmy.world on 02 Apr 13:17 next collapse

Short: don’t do anything manually, throw it into a ansible playbook. Save it somewhere.

foster@lemmy.hangdaan.com on 02 Apr 13:25 next collapse

Use declarative systems and software, where the configurations files themselves are the documentation. For example, I use Guix and Podman. The entire OS is described in a Scheme file and all the services are described in a YAML file. I just need those two files to get an overview of the entire setup.

communism@lemmy.ml on 02 Apr 13:24 next collapse

Notesnook notebook with whatever info I need to be able to administrate the system. e.g. what different ports are used for and why the firewall policies are what they are, sometimes write-ups after a troubleshooting session, etc.

The Notesnook instance is self-hosted too, but if the server goes down, the notebook will still be available locally.

tobz619@lemmy.world on 02 Apr 13:33 next collapse

NixOS because it’s declarative kind of does it all for me.

The .nix files serve as their own documentation and if I need to do anything outside them I add a comment to the .nix file.

Agent641@lemmy.world on 02 Apr 13:39 next collapse

Why do you have to be like that? Drop the innocent questions and just come right out and call me a piece of shit directly.

BruisedMoose@piefed.social on 02 Apr 14:16 collapse

Trust me, this is all about me being incompetent.

shrek_is_love@lemmy.ml on 02 Apr 13:55 next collapse

All my computers (including servers) share the same NixOS Flake. So my documentation consists of:

  1. The Nix code itself
  2. The commit messages for each change I make
  3. Inline comments in the Nix code
  4. A few readme.md files to explain the contents of certain directories
corsicanguppy@lemmy.ca on 02 Apr 14:00 next collapse

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.

BruisedMoose@piefed.social on 02 Apr 14:18 collapse

Ha. I’ve been reading through thinking, “Yeah, maybe I should finally look into Ansible.” And then I get here. :D

bizdelnick@lemmy.ml on 02 Apr 14:07 next collapse

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.

IratePirate@feddit.org on 02 Apr 16:48 collapse

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.)

magic_smoke@lemmy.blahaj.zone on 02 Apr 17:53 collapse

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.

IratePirate@feddit.org on 02 Apr 18:21 collapse

That’s what I use it for as well. Updating 7+ VMs is no fun. With Ansible? No worries.

AMillionMonkeys@lemmy.world on 02 Apr 14:39 next collapse

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.

avidamoeba@lemmy.ca on 02 Apr 14:59 next collapse

<img alt="" src="https://lemmy.ca/pictrs/image/ef1ed243-a004-46d1-b0d5-90aa284d3daa.jpeg">

Evil_Shrubbery@thelemmy.club on 02 Apr 15:06 next collapse

I just think I do that, but absolutely don’t.

avidamoeba@lemmy.ca on 02 Apr 16:50 collapse

Yeah I also use config-as-code along with wiki but I used to remember things 10 years ago when the setup was simpler and the brain was newer. 😅

Scrath@lemmy.dbzer0.com on 02 Apr 15:18 collapse

I read the title and this was literally the first thing that popped in my head

avidamoeba@lemmy.ca on 02 Apr 16:48 collapse

I’m here to serve.

starshipwinepineapple@programming.dev on 02 Apr 15:05 next collapse

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 🙃

confusedpuppy@lemmy.dbzer0.com on 02 Apr 15:14 next collapse

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.

grimer@lemmy.world on 02 Apr 15:16 next collapse

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.

Scrath@lemmy.dbzer0.com on 02 Apr 15:21 next collapse

I have a bare minimum of documentation as markdown files which I take care to keep in an accessible lovation, aka not on my server.

If my server does ever go down, I might really want to access the (admittedly limited) documentation for it

DetachablePianist@lemmy.ml on 02 Apr 16:03 next collapse

I run Adguard Home containers (the primary auto-syncs to the secondary) and use redirect filters to assign hostnames to each of my containers. I have a “services” folder of bookmarks for each container host so I don’t have to remember each service’s port number. I use KeePassXC to track all my passwords and certificates so authentication is a breeze (someday I’ll get around to setting up an SSO solution). I also keep a .txt file with my basic network info that doesn’t always translate well to dns hostname redirects in adguard. I occassionally remember to update my hosts listed in the file. My individual config files aren’t backed up beyond my automated container backups, but so far none of my services have been that complicated I couldn’t just rebuild from scratch.

It’s not perfect, but combined with my automated backups I have barely enough to rebuild if/when my hardware fails.

uenticx@lemmy.world on 02 Apr 16:05 next collapse

README.md

Goodlucksil@lemmy.dbzer0.com on 02 Apr 17:31 collapse

README_I_AAM_VERY_IMPORTANT.md

Teppa@lemmy.world on 02 Apr 16:26 next collapse

Gitlab has Draw.IO integration, as does Wiki.JS.

magic_smoke@lemmy.blahaj.zone on 02 Apr 17:54 next collapse

I’m surprised no one else has answered mediawiki. Love my mediawiki instance.

heydo@lemmy.world on 02 Apr 18:10 next collapse

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.

github.com/netbox-community/netbox

northernlights@lemmy.today on 02 Apr 19:38 next collapse

draw.io in my nextcloud

<img alt="network diagram on nextcloud" src="https://lemmy.today/pictrs/image/fafadad3-e0ae-42e4-835e-4e58221a9567.png">

And leantime to keep track of what I want to do with notes and such

<img alt="leantime kanban screenshot" src="https://lemmy.today/pictrs/image/fd0adf02-cf38-42e5-8421-66ac1fe4293a.png">

And a mess of notes in Joplin.

VexLogic@feddit.online on 02 Apr 20:04 next collapse

I’m actually in the middle of rebuilding my entire setup right now and one of my major goals is to actually document my processes this time.

I use Obsidian which is a Markdown editor and I have a couple plugins alongside that for QoL stuff and extra features.

I document processes, problems and fixes I encounter, list of active services alongside where/how to access them, and plans for future additions/changes.

As far as working documentation into your flow, realistically that is just a matter of discipline. It is explicitly up to you to stay on top of documentation.

Hope that helps, and good luck with your endeavor! 😁

mrh@mander.xyz on 02 Apr 20:06 next collapse

I use Guix

lightnsfw@reddthat.com on 02 Apr 20:14 collapse

When I set something up I write all the steps I’m doing in obsidian as I do it. The pages get tagged so they’re searchable in the future.