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.
Install a Linux Mint flavor. Mint is a rock solid platform that just works on 99% of the computers out there, and there is even a 32 bit if you are on a sllloooooow laptop like mine. The best way to learn Linux is to use it. You, more than likely, have been using Windows all your life, and while modern day Linux has some of the same looks to it: Icons, taskbar, et al, it’s quite different under the hood than what you are used to.
If you foresee setting up a server, then you are going to have to learn how to set up your server, secure your server, monitor your server, and all these things take experience. Experience takes time. Servers take a lot of administering and securing. There are thousands of bots just waiting around the periphery of your server, salivating, at the prospect of a fresh meat starting up. So you’ll have to learn how to keep the good stuff in, and the bad stuff out. Just keeping the bad stuff out is a constant vigil. These modern bots are very capable and can do cve vulnerability scans, scan attack surfaces, any little crack in the armor to get a foot hold in.
So, after you learn your way around a Linux desktop, then need to study up on how to set up and secure a server. What software to put in place to do security, using no root login, ssh keys, a long list. If you get stuck on something or just want to bounce some ideas off of someone, I’m no guru but I’m willing to share what knowledge I have with you.
I think you’re starting too big, to use your phrase.
Get used to the basics first: what’s different, what’s the same. They all have GUIs (KDE, GNOME).
Run a live USB version from a usb stick to get used to it until you have the confidence to install it on an old pc.
Choose one of the top few from distrowatch.com/
I started by installing a VoIP product into a VM on Windows 2000, but there are better ways now.
What I always tell junior devs that want to get familiar:
- Find a use-case. Don’t just use it because you have FOMO
- Run a desktop environment as your daily driver when you can. You’ll learn a lot.
- Try installing packages first, and after you’re comfortable with that, try building a project you intend to use from scratch. It’s a get primer, and gives a ton of context of how software development works along with the dependency chains with the operating environment.
- Don’t take a GUI as the “easy route” in spite of non-GUI sokutions. Get familiar with what makes the software run, and customize accordingly.
Go with Raspberry Pi and install a distro called DietPi (it’s based on Debian).
You can run a whole bunch of useful service (Pi-hole, NAS, Media server and much more) on your local network.
It’s aimed at headless usage, so you get a chance to learn about Linux commands and OS structure. That being said Diet-Pi has a whole suite of easy to use command line “applets” to configure everything.
They also have an active forum and I’ve even been able to submit some (minor) UX improvements.
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! :)
If you want to set up a “movies and stuff” server, if you have them as digital files (rather than on disks) then you can try setting up JellyFin as your media server on any Linux distribution of choice.
Try playing around with it on a machine and disk that you won’t mind screwing up and losing everything on. Not because you’re bad at it, it’s how you learn, everyone makes mistakes.
Find an old laptop. Install TrueNAS community edition. Read about containerized server apps. There are alternatives like Mint if you still want to have and learn a desktop experience. Read online blogs. Ask here if any further questions arise. Avoid dual booting until you are comfortable with installing an OS and handling grub.