this post was submitted on 17 Jan 2025
117 points (99.2% liked)

Selfhosted

41554 readers
335 users here now

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:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

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

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
 

For this new year, I’d like to learn the skills necessary to self host. Specifically, I would like to eventually be able to self host Nextcloud, Jellyfin and possibly my email server too.

I've have a basic level understanding of Python and Kotlin. Now I'm in the process of learning Linux through a virtual machine because I know Linux is better suited for self hosting.

Should I stick with Python? Or is JavaScript (or maybe Ruby) better suited for that purpose? I'm more than happy to learn a new language, but I'm unsure on which is better suited.

And if you could start again in your self hosting journey, what would you do differently? :)

EDIT: I wasn't expecting all these wonderful replies. You're all very kind people to share so much with me :)

The consensus seems to be that hosting your own email server might be a lot, so I might leave that as future project. But for Nextcloud and Jellyfin I saw a lot of great tips! I forgot to mention that ideally I would like to have Nextcloud available for multiple users (ie. family memebers) so indeed learning some basic networking/firewalling seems the bare minimum.

I also promise that I will carefully read the manuals!

(page 2) 32 comments
sorted by: hot top controversial new old
[–] jj4211@lemmy.world 2 points 1 week ago

It depends on what you want to self host.

As an example, a family member self hosted home assistant. They didn't have to know anything really. That was all they were doing and they bought the canned implementation.

If you have multiple services, you may need to know nginx configuration with virtual hosting.

You may want to use podman or docker or kubernetes.

It all depends ..

[–] ramenshaman@lemmy.world 2 points 1 week ago

Hey OP, I'm just starting my self-hosting journey as well. I can program a little bit in Python and C++ but I haven't needed any of that so far. As others have said, some familiarity with Linux would be very helpful. The things I've done so far:

  • Wireguard VPN server on my router(no programming or linux commands, just some config of my router which I was able to do in the router's GUI.
  • Wireguard VPN client on some of my devices. My phone setup was easy, still working on setting that up on my Windows/Ubuntu laptop.
  • Home Assistant on a Raspberry Pi (WIP).

Eventually I plan to set up a NAS with Immich and some local IP cameras and Plex or something similar.

[–] terminhell@lemmy.world 2 points 1 week ago

Patience, and knowing when to look for documentation. Keep notes of stuff as you go. Just like in real IT, documentation can go a long way. Forgetting simple things can cause everything to fall apart at some point.

[–] reinar@distress.digital 1 points 1 week ago

Programming knowledge is largely irrelevant, as in to gain sensible benefits from it you have to be generalist software engineer with decade+ of experience of seeing it all. Then yeah, you can read any code, any stack traces and figure out the intent of developers of the system and what is undocumented/incorrectly documented.

Focusing on one particular language is the right and wrong answer at the same time. Wrong in a sense that you'll have to pick up other languages along your journey anyway and right because you need to achieve mastery in one of them to get to more advanced programming topics. Pick a language that you have fun using and don't care about anything else.

As for what to learn for self-hosting... Linux (pick a distro, let's say ubuntu LTS w/o gui, ssh there and get comfortable with it. It includes installation, filesystems, RAID setups), networking, HTTP/S (that's the main thing you'll be interacting with as self-hoster and knowing various nuances of reverse proxying is a must), firewalling, basics of security and hardening, docker, monitoring, backups.

[–] possiblylinux127@lemmy.zip 1 points 1 week ago* (last edited 1 week ago) (1 children)

Why are you wanting to use python for self hosting? Python is a programming and scripting language.

There are two big things I would focus on. The first thing is networking, the OSI model and http basics. The other thing I would look into is Linux containers. If you can get both of these you are golden. Learn how to use and write docker compose files and then looking into building your own containers with Dockerfiles. You don't really need to build your own containers but it is good for learning

Programming is generally not needed when self-hosting. At best you might learn Ansible, Puppet, Salt, or Terraform, but that's for advanced scenarios (e.g. easily shifting the workloads between machines or into the cloud).

Learning the ins-and-outs of containers will get you the biggest return on investment. They're not strictly necessary but most tools will expect that is the common use-case and the community won't be as much help. Until you know more about containers I would also recommend Docker over Podman. It has a few more "conveniences" than Podman and orgs like LinuxServer will target Docker as the engine.

[–] _cryptagion@lemmy.dbzer0.com 1 points 1 week ago (2 children)

Patience, most of all.

Also, backups and notes. The solution you use to host might take care of the backups. For example, I use Unraid, so if any drive fails the system can simulate the data on that drive until I can get it shut down to replace it, and then recreate the data on the new drive.

As for notes, those are important so that you can always know what you’ve done, and what you need to do. That way, if you ever have to do it again, say if you’re setting up another server or replacing one that failed, you know the steps you took to get it set up exactly how you like. It’s also handy because you’ll be doing things like assigning services to ports, and you’ll probably at some point want to know what services are on what ports without going through and checking each one. Things like that are handy things to stick in notes.

Other than that, you don’t need a lot of skills to set something like a home server up. You just need to read the documentation for each service you’re planning to use, and get familiar with how it works.

load more comments (2 replies)
[–] SpeechToTextCloud@discuss.tchncs.de 0 points 1 week ago* (last edited 1 week ago) (2 children)

If you have a VM, there is no need for docker. Start by installing ssh. Enable public key auth. Disable password authentication. Set up fail2ban with ssh. Set up ufw. Set up nextcloud. Avoid hosting your own mail, that's another level of complexity. If you really need it, try mailcow.

If you have all that and didn't touch a GUI on your way, you're good to go.

[–] avidamoeba@lemmy.ca 0 points 1 week ago

Absolutely can and should use docker in a VM. ☺️

[–] possiblylinux127@lemmy.zip 0 points 1 week ago

I would not run anything outside of docker honestly. Docker is so much easier to setup and maintain.

[–] ALERT@sh.itjust.works 0 points 1 week ago

attentiveness

load more comments
view more: ‹ prev next ›