I want to start using Linux but I am not sure how to get started. I just want to set it up a server for my mvies and such. Maybe I am starting too big. I don’t know. I use to think I was moderately good at computers but I feel left behind. Just looking fro advice on my first build.
Installing Linux is super easy. Just set up a boot USB stick, then boot to it and follow the instructions. Make sure there’s no data on the computer you need, cause you’ll be reformatting the drive.
Then start by learning Docker and Docker Compose. Watch some YouTube tutorials. Docker will make everything easier for you. Docker Compose is like magic.
You should also learn how to use your firewall. UFW is easy to set up and use, but whatever comes on your OS natively, if it has one, should be fine.
If you want to set up a RAID, use something that is self-healing, like btrfs.
The more comfortable you get with the terminal, the better time you’ll have. Learn all the little programs, like ls, cat, grep, nano, tar, ps, df, du, dd, find, etc. Learn how to read Man Pages because they will help you a lot.
Don’t be afraid to try things out. If you’re worried you’ll hurt something on your real server, try it out in a virtual machine.
Compartmentalize everything with Docker. The only server running on your bare metal should be your SSH server, and maybe an administration service like Cockpit. Everything else can be reverse proxied with something like NPM (Nginx Proxy Manager). And of course, run that in Docker Compose too. That would listen on ports 80 and 443, and everything else would get its own port that only NPM connects to.
As for the OS, I’d recommend Fedora, but really any of the big distros should work fine for you. The nice thing about Docker is that you don’t need to worry about the environment for your services. It runs almost everything virtually, so as long as Docker runs on your OS, everything should run fine (given there’s an image for whatever architecture you’re running, X86 or ARM).
If you want a domain name, you can set up something like Cloudflare with ddclient to point to your IP address even if it changes. You can read more about Dynamic DNS to learn how to set it up with whatever registrar you have if you’ve already got a domain name. You don’t need ddclient if you’ve got a static IP from your ISP.
Then for encryption, you can set up Let’s Encrypt certificates. They can be set up and renewed automatically with Nginx Proxy Manager.
If you’re not yet familiar with it, learn how to set up a reserved IP address on your router for your server. That way DHCP will always give it the same IP address. Then you can forward ports to your server so you can access it from outside. I’d recommend against forwarding your SSH port, and instead use an OpenVPN server (there’s a Docker image for it) to connect to your internal network remotely.
If everything is behind NPM, you can use different subdomains for your different services. You use a wildcard SSL certificate, and assign each host to whatever port you configured your service to in its Docker Compose file. So, you might have an Immich server listening on port 8100, and a Jellyfin server listening on port 8101. Then, you can set up reverse proxy hosts in NPM for immich.yourdomain.com pointing to http://localhost:8100/ and jellyfin.yourdomain.com pointing to http://localhost:8101/.
I hope that helps. Good luck and have fun! :)