I wait for something to break. Then I yell "God fucking dammit, I don't have time for this right now!" and spend an hour triaging things before I just try docker down, pull, up and everything works.
same. or i just df and see / 100%
Early on I wrote a script for my user account to run df and save the output to a file, then a second script to read that file and if the drive was full send me an email.
First, it failed because it couldn't send the email because the email service failed under full disk conditions.
Second, it failed because it couldn't write the file to disk because the disk was full.
Third, it failed because outbound SMTP was blocked by my ISP.
I learned a lot about how well you can fail if you really put your mind to it. Now I have Home Assistant grabbing the disk stats for my machines and flagging anything over 90%.
Poorly.
Hear hear
Hell yeah
I just use ssh and manually type commands. Keep doing it and you will get good and it will become second nature.
No need to burn tokens on basic tasks.
Master your tools. Learn awk, sed, just, etc.
Some shell customisation can help. For example I'm fond of zsh-auto-suggestions and skim. Makes me quicker.
Ansible is one way to "code local, push to remote(s)". Can define so-called playbooks, which is basically just a script, to do reoccuring tasks like e.g. updates.
Ansible is great, I just wish it would automatically cleanup stuff on the server when I remove parts of the config. I know it's not the goal, but I dream about a tool that works this way. I get many leftover stuff over years
That sounds like NixOS to me.
I have yet to try it but apparently

We fixed that with roles that manage both install and uninstall
I use ssh with tmux
I write my NixOS configs in my PC, commit to the repo, then push it to the server. Then SSH in, and apply it. Or more likely, MOSH in.
"code local and push remote" is only more efficient if you have a faulty connection with ssh or want to use a GUI editor that doesn't support remote connections. What you're doing is good. You can scoure for more "modern" ways that might have more glimmer and sparkly lights, but it won't improve efficiency.
Declarative configuration (like docker compose) is basically "code local, push remote", and it has a lot of benefits, including improving efficiency because you have a clearer idea of exactly what is set up on the server, to make it easier to debug or make changes.
Contrast this with just sshing in and running a bunch of commands to install something. Then coming back months later and wondering "what files did I touch? what packagea did I install? Hmm dpkg log says I added X but then later I removed it, so was it important?" Etc.
It’s good to get comfortable in the command line, including over ssh.
Especially considering ai and documentation along the way?
If I am going to ask AI or Google about something, I just do that to help me find the answer and then apply the answer myself. That way I learn, and can double check the AI isn’t hallucinating, at least on in obvious ways.
As for documentation, I keep a notes folder with detailed notes on manual configuration I’ve done, how and why, and the things I’ve learned along the way. I’ve found it’s both useful to help remember the things I’ve learned, and it is useful to go back to refer to.
I created git repos on my main workstation for each homelab server/service I maintain that keeps:
- documentation
- notes
- lessons learned
- scripts, configs
- runbooks
- backup details
- security audit details
- log items that need attention
- infrastructure
I just point a local LLM (offline model that runs on my workststion) into those repos and ask it to perform certain things on those servers. It can do things like update packages, install packages, make config changes, set/check permissions, read logs (and fix errors in real time), and check the health of the overall system.
I have it run pre backups before making changes, then post backups once its done.
Once changes are in place and everything is running okay, I ask it to update documentation in the repo and tag the release.
I use opencode that connects to a llama.cpp service. opencode lets me gate the AI so that any elevated commands that it needs to run (e.g. sudo or ssh), I have to approve it. It cant just go around making changes without permission.
What models are you using? What hardware are you running them on? I’m curious if I can replicate your success
Hardware I'm running:
- 8/16 AMD CPU
- 32GB system RAM
- 12GB GPU VRAM (AMD)
I'm mainly using these MoE models:
Qwen-3.6-35B-A3B
- Q4_K_M quant quality
- 128k context (conversation length before it compacts)
- Gives me about 260 prefill and 19 token gen speeds
Gemma4-26B-A4B
- Q8 quant quality
- 128k context length
- Gives me about 190 prefill and 14 token gen speeds
A mix of prayer and bash scripts.
Remove bash scripts and add poorly configured logging and that's me!
I've been using a program someone on Lemmy has been writing: SSHPilot. It helps keep my server list organized and can easily ssh to the machines or open up a file browser for easy drag and drop of files if I have some quick files to move around. It copies ssh keys easily as well.
I ssh into it twice a year to perform updates but otherwise i leave it alone. Server's been chugging along for like a decade now.
Similar, but you might want to update more frequently with the huge number of critical security bugs being discovered by AI recently
I have unattended upgrades configured
Hmm I need to figure out how to do that
nixos, mostly. It has a very steep learning curve but if it breaks I’m just "whatever, rollback now, fix properly later".
Nothing wrong with good old ssh. My VMs are different enough that building and maintaining ansible playbooks or something similar would be a bigger task than actually doing it in the traditional way. Maybe I could benefit by building simple playbooks to populate user accounts, ssh keys, smtp relay settings and other common things, but I don't really set up new servers that often that it would justify spending time to set up tools for that.
Ansible.
My target is terraform to provide VMs on my miniPC and ansible to configure them. For my nas, probably a basic distro then some ansible stuff to setup stomate.
I spent a while getting Ansible to be able to setup and maintain my server(s). And ended up not using it as much as I should, mostly because the computer I used to run Ansible from became a "Steam Machine" so I'm rarely sitting on it with a keyboard now and I don't want to have personal info and keys on my work computer.
But it was a good learning, and useful while I used it. Now I just use ssh and compose files directly.
self hosted gitlab. each server has a repo with all the docker configs and application configs. also have any scripts for the server itself on there as well, things like required libs, network configs, etc.
I also have a repo dedicated for let's encrypt SSL that retrieves new certs every month. then on each server is an install script scheduled that pulls the certs down, installs them, and restarts any services automatically.
should anything go wrong, I have a siem monitor that will alert me that a service failed to start etc.
currently running four servers like this with varying degrees of complexity.
Maybe a bit more on the overkill side, but I use Talos Linux (declarative K8s distribution), then Terraform for initial setup and FluxCD for everything else (including VMs via Kubevirt). It's a hell of an initial learning curve, but afterwards I just do my talosctl upgrade and upgrade-k8s from time to time, and don't have to worry about anything else. Upside is, Kubernetes provides a unified, extensible API for everything, for example:
- reverse proxy via Ingress or Gateway-API
- firewall via NetworkPolicy
- even databases like Postgres through an Kubernetes Operator like CNPG, with a similar simplicity as with the big cloud providers (just a single yaml file with the specs like storage capacity, CPU and memory limits, backup target and schedule etc.)
- it is very scriptable (everything is managed via the API)
- automated image updates via either FluxCD itself or just dependabot/RenovateBot creating PRs to your GitOps repo
Downsides:
- you have to figure out persistent storage (CSI), which is slightly more complicated than just a single filesystem and manually specifying volume mounts like with docker, but if done right, you have a simple interface with powerful capabilities via the Kubernetes API
- there are simple CSI implementations that just expose node local disks via LVM or ZFS, so if you just have a single node, or don't care about replication, it's fairly easy to get started
- initial learning curve is quite high, especially if you have no prior experience with container orchestration in general
- definitely overkill if you just want something simple that "just works"
I assume this is on your own physical hardware? What parts do you set up with terraform?
Ansible and terraform can bath do with you want though for a single server I'd consider them both to be a somewhat overkill. But then again homelabbing often is about overkill.
Depends what you're trying to do, really
If you're talking about going in and restarting containers and checking logs, there are tools like Portainer that give a nice UI you can quickly use from your phone
If you're talking about repetitive tasks, sometimes there's a tool to automate it already (e.g. updates via watchtower, unattended-upgrades), and if not, you can write a script and possibly run it via a cronjob if that makes sense
If you're talking about doing new stuff, you either stick with the SSH & shell commands, or you look into IaC tools like ansible as another reply mentioned. Another option is something like Nix where the setup is defined in config, so you make your changes there
set the server as git remote and push there directly. set hooks to deploy. I do that for a static site. Is my little iac solution. Search for alternatives to "infrastructure as code". It can go from simple dockerfile to swarms or kubernetes..
I use Gitlab for all configurations ans then I have a Gitlab runner in my K3S cluster so I can deploy locally for free
I deploy with ansible keys and install ssh with a keys-only config and only ansible access.
Then I run some standard installs and configs with ansible and all future updates to apt, apk and docker are done with one ansible playbook.
I don't include the ansible host itself in the automation, nor my workstation, just to prevent everything from being broken at once if something goes wrong.
I have a kubernetes cluster inside of Proxmox vm's, generally I write a deployment, commit it to a git repo and then use argocd to deploy it in the cluster.
This is not something I would advise to anyone but the clinically insane, but for me there is a certain zen in having everything in git like that. It's for me the only way I can manage the 60ish applications I run without it having a permanent spot in my brain.
I'll take the maverick and share my niche position. I did most if not all my proxmox setup and configuration via complete reliance on LLMs. Now, before anyone says "why would you do that", and I'll be straight up. I was high for all of it, and not a small blaze I'm talking regularly stoned for months. And I'll say it "got me by" for the frame work. It worked? Sorta. Music, Plex, immich, docker, arr stack, podman. Now, I can't say I fully understand it still and I've done a lot of changes since that point last year and I figured it out by asking the model to backtrack what we did and I wont lie it helped me better learn how to question the models for my job, and It did decent documnetation over my server. But again, I was literally high doing it
If you're connecting from a system that's a long distance away from your server in terms of latency, mosh can be more comfortable to use than ssh.
Mosh is pretty good!
Local ansible playbook, easily replayable and documented. This in a git repo and you're fine.
Ansible to deploy services in docker compose stacks and backups with resticprofile.
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.
-
No spam.
-
Posts are to be related to self-hosting.
-
Don't duplicate the full text of your blog or readme if you're providing a link.
-
Submission headline should match the article title.
-
No trolling.
-
Promotion posts require active participation, with an account that is at least 30 days old. F/LOSS without a paywall has exceptions, with requirements. See the rules link for details. Tags [CBH] or [AIP] are required, see the links in Rule 8 for details.
-
AI-related discussions and AI-involved promotional posts have additional requirements for tagging, as noted in Rule 7 and the AI & Promotional Post Expanded Rules post, and find example disclosures here.
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!