6 ms·
At the end of the article, there's a link to a script[1] that does the steps covered in the article. That got me thinking: how do other self-hosters/homelabber
by jw_cook 2y ago
At the end of the article, there's a link to a script[1] that does the steps covered in the article.
That got me thinking: how do other self-hosters/homelabbers here go about automating their server setups? None/purely manual? One big shell script? Multiple scripts wrapped in a Makefile (or justfile, or other command runner)? More enterprisey provisioning/automation tools like Ansible, Puppet, etc.?
[1] https://git.sovbit.dev/Enki/sovran-scripts https://git.sovbit.dev/Enki/sovran-scripts
- jmathai 2y agoOne big shell script has worked really well for me. One project on AWS ran the script when new EC2 instances with a particular tag/label were spun up and that's how we scaled horizontally. What's nice about is that it doesn't require any specialized knowledge beyond bash - and that's something which is pretty easy to learn and great to know. It also attracts, IMO, the type of developers who avoid chasing new trends.
- Sammi 2y agoI have a folder of scripts. One main script that calls into the other scripts, just so I can keep my head straight. But one large script might work just as well for you. This sets up everything I need so I can treat my servers as livestock instead of pets - that is, so I can easily slaughter and replace them whenever I want, instead of being tied to them like a pet.
- atoav 2y agoFor my use cases I found that just having a (updated) note with the things I would usually do works best. This is because I would not deploy everything anywhere and manually being aware of each step instead of hiding it within a script is somewhat a feature (e.g. you can easily insert a custom extra step etc). If I would do basically the same over and over I'd probably go with a script, ansible cookbook or similar, but as of now the manual route is totally fine.
- ranger207 2y agoYeah I just have a note with my steps because other than the real basic stuff (set IP and DNS, set hostname, install tmux/htop/vim) the rest depends on what exactly I'm doing with that server. I have other notes for common stuff that could probably stand to be automated but it's not worth the effort in a https://xkcd.com/1205/ https://xkcd.com/1205/ sense. Like, having a checklist is necessary, but fighting bash or whatever other automation tool isn't necessarily valuable since I'm only standing up one server every few months at most
- bpye 2y agoI use NixOS on every machine I have running Linux. My config for every machine is in a git repo, and it is super easy to deploy changes via ssh. It took some work to get started - but I would never go back.
- Jedd 2y agoMost of my server configuration is defined by Saltstack recipes. Most of my actual tools now are running in docker via Nomad.
- duckmysick 2y agoI'm using a combination of pyinfra for provisioning and justfile for one-off operations. In fact, I also have separate pyinfra scripts for provisioning my desktop and laptops, so I can have a fresh install and they will set it up with proper apps and desktop environment settings. https://github.com/pyinfra-dev/pyinfra https://github.com/pyinfra-dev/pyinfra https://github.com/casey/just https://github.com/casey/just
- ricardo81 2y agoI've written a couple, covering a bit of what's mentioned in the article but also setting up wordpress. Written in bash also
- tobijkl 2y agoPersonally, I use Cloud-Init for automation. Its wide support across various cloud platforms and ease of use make it my go-to tool for initial server provisioning. It simplifies the process, allowing me to get things up and running quickly without needing additional dependencies.
- everforward 2y agoI’m using PyInfra [1] these days (no affiliation, just think it’s cool). It’s like Ansible, but you write Python directly instead of a YAML DSL. Code reuse is as simple as writing modules, importing them, and calling whatever functions you’ve written in normal Python. I find it almost as easy as writing a shell script, but with most of the advantages of Ansible like idempotency and a post-run status output. 1: https://github.com/pyinfra-dev/pyinfra https://github.com/pyinfra-dev/pyinfra