I have several years of Linux experience and I know how to fix my own problems, and I have experience self-hosting using Docker and Docker Compose, but I really feel that I don’t know how to self-host and that I just copy and paste commands without understanding it, I would really like to learn how to self-host by myself but I don’t know how I can start or with what resources for newbies I can start with.
I am interested in self-hosting several services, but the one I am currently most interested in is changedetection.io, as there are multiple such services but they all require a membership fee, and I prefer to self-host on my own.
May not be ideal for everyone but most of the time I want to learn something, I just start doing it.
Last year, I basically had no idea about self hosting and I started off with immich. Problems started to arise, but is solvable by searching online.
I also read Lemmy a lot and sometimes from this very community I get tips (such as fail2ban)
Day 0 - Get Your Own Server - https://linuxupskillchallenge.org/00/
Learn about zero trust, least privilege, reliability, and basic security for each service you want to expose to the Internet, then just try it out.
Just jump in tbh. Choose one service you want to try, get it up and running, and play with it
Few bits of advice I have is to plan that you will tear it down a few times. Couple of reasons. One, that way you don’t have to plan to have it perfect the first time. Play with spinning up a VM/container, installing stuff, getting something working, without the stress of needing it to be perfect. Second, because it’s good to know how you did something and know you can repeat it.
Write everything down as you go. For me, I made a huge readme to keep track of things I did, again this helps with if you fuck up you can always redo it. Trust me, this will save you. Readme in git, Google docs, something you can reference when everything is down.
Finally, DO NOT choose something your first time that is open to the public. Start small. Something private like Plex/jellyfin, or tandoor, something just for you. Public services are a can of worms. Maybe you want to start with Lemmy, but work up to it. For more obvious reasons like you have an expectation of uptime and you need monitoring, which will require knowledge of all of that, but also more nuanced reasons, like, we’ll do you know how to register csam? Because I didn’t know the process until I started hosting services for the public. Just don’t for now. Hold off until later.
Anyway, hope that helps! Have fun, and don’t be afraid to fail. Remember, we can’t ever plan not to fail, but if we must fail, fail fast
This is a recent version of a guide I used to get started with home servers. I learned a lot following it and I can now manage my own home server with a lot of apps.
https://www.smarthomebeginner.com/traefik-v3-docker-compose-guide-2024/
Start with a simple, basic service. Think of something like a web server or ntp. Understand how these services affect your environment with respect to security, performance, availability, maintenance, backups, other services, firewalls, routing, DNS, monitoring and notification, documentation, change control, etc. Those are the hard parts of hosting and if you find ways to be effective with a simple service the others will be less daunting.
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:
Fewer Letters More Letters DNS Domain Name Service/System Git Popular version control system, primarily for code Plex Brand of media server package
[Thread #779 for this sub, first seen 3rd Jun 2024, 05:05] [FAQ] [Full list] [Contact] [Source code]
https://github.com/awesome-selfhosted/awesome-selfhosted - just pick one or more services from the list and start looking into their documentation.
YouTube and the web are full of information and guides how you can do it. Me personally I would suggest you to use Docker container and Docker compose if possible. You can see how you can install Docker or Podman to run the containers.
Get to grips with Docker. OCI containers are the standard method of self hosting basically everything now, so once you’re comfortable with Docker and compose files, literally anything you could want to host is available as a drop in component for your system.
An excellent way of playing around with Docker is to install Dockge. It’s a web UI with some really helpful features. First, it can convert Docker Run commands into compose files for you (once you start to play around with this it’ll be clear why that matters), and second, its very good at pointing out where and how you’ve made errors in your compose files. But most importantly, unlike Portainer (the most popular Docker UI) it works with the Docker command line rather than trying to replace it. With Dockge you know exactly where all of your files are and if any part of your setup breaks you can repair it very easily. It also doesn’t have Portainer’s problem of flashing error messages on the screen for 0.3 seconds then whisking them away. It exposes the entire Docker terminal output so your debugging process is much, much easier.
You’ll also want to learn about reverse proxies (I reccomend Caddy for its unbelievably simple config file; an entire site is three lines). These are really important for serving multiple different services from one source.
For anything that you can’t run in Docker, VMs are an acceptable solution, and LXC containers are a better solution, but one that requires a little more work to get to grips with (fun fact, LXC has its own web UI, which is fantastic, but almost nobody seems to even know it exists). Since you’re already familiar with Linux, you may want to ignore the suggestion to use Proxmox and just set up a server with your preferred flavour and go from there. All of this can be done with any modern Linux distro, so you might as well work in an environment you’re comfortable in.