How to set up a home server for my business and family
I am trying to set up a home server for my business (run Nextcloud) and my family (Plex). I have an old dell server which I am planning to use. I am not sure which one is better on the long term running and update, a server with docker installation and docker containers (not sure how to maintain it) or a typical Linux server installation then install each package on it. I also want flexibility in future adding and removing applications.
I have used Linux server before to provide local file sharing and Plex local streaming, but I have heard about dockers and preset containers and Portainer app that I have heard is helpful in dealing with dockers.
Your insight will be much appreciated
@mido thank you for joining the forums and glad you posted the question here. Definitely, I think your use case is very common for those running a home server/home lab. You could run Linux directly on your Dell server and then install applications in Linux natively. However, I would recommend running some type of hypervisor on your Dell hardware, as that will allow for lots of capabilities in terms of management, backups, etc. What type of storage are you using with your Dell server. Is it all local storage?
@mido great to have you here! i tend to shy away from one "machine" (or 1 VM) doing everything. yes, you can install all the apps on it and they'll work, but compartmentalizing via multiple VMs or containers is easier to manage. for example, the more you install on one instance, the more services you would affect if/when you have to restart that machine (or if you break the machine).
docker/VMs are also great because if you mess something up (like i do constantly) it's easy to start over with a clean slate.
with regards to Plex... it can have some hardware requirements depending on your use case. if you're going to be transcoding media, a dedicated GPU (or a CPU with Intel QuickSync) will be your best option.
Can I save app state in docker containers (much like VM machines) and back them up, in case I messed up something and need to move to new machine or reinstall Linux and docker. I am completely new to docker and containers
I had Plex on Linux before to stream to TV and it worked fine. I tried installing Nextcloud on Linux server directly and it started but was very slow. I was told then that there are docker containers almost everything and there is Nextcloud container with recommended optimization.
I am expecting degraded performance when I have several services running together, whether on Linux directly or using Dockers, but I am either working (Nextcloud) or watching TV.
I just want to make sure there is an easy way for upgrading and moving to a new machine if I want or have to.
I can use command line, not my strength, but if there is GUI for running and installing, that would be better
@mido one of the reasons I like to run containers inside a virtual machine is you can backup your VM container hosts. This provides easier protection for containers and their data, using Proxmox Backup Server if running Proxmox or other tools with different hypervisors. Typically you don't worry as much about your container app state as you do your data anyway.
As a case in point, I use a tool called Watchtower to keep my Docker containers updated. Each night it checks for a new image for the specific container I'm running and respins the container with the new image, not affecting your data.
There is also a really cool Docker data backup tool called Duplicati that I wrote about recently where you can schedule backups of your container data and even copy backups to the cloud and other modern locations, in addition to local backups. Check out my post here: https://www.virtualizationhowto.com/2023/12/backup-docker-volumes-with-duplicati-and-docker-compose/
What you might think about doing is creating a little test Docker container host for yourself and play around with a few containers for a couple of weeks in that environment to get yourself familiar with how they work, using tools like Portainer, and even how volume mounts work 👍
Also, just another plug for containers....when underlying requirements or prerequisites change like different Java versions as an example, or others, the new container app image contains all of these in a nice neat container image, so you don't have to worry about it. Contrast this with running things in a VM where you have to update all the underlying components and you may even have conflicts with other services when you need to update those components. I really like this about containers. However, both are really needed (VMs and containers) in my opinion for the best overall experience with a home server and self-hosting.
@Mido, it's great to have you here!
I'm in full agreement with my cohorts, here, that a combination of virtual machines and containers, under a suitable hypervisor is the way to go.
VMs treat machines as files, which makes them very easy to backup, clone, move (even while running!), destroy and replace.
Containers take away some of the overhead that virtual machines have by virtualizing the operating system and environment an application runs in, allowing a single OS instance to run multiple applications (VMs each have an instance of an operating system, containers share their OS.)
It's common to spin up, say, an Ubuntu Server virtual machine, install Docker on it and then install a couple of applications inside Docker. Docker apps can use persistent storage, which can be backed up and which survives server reboots, application upgrades, etc.
Some hypervisors support containers -- Docker and other containers -- natively, without creating a virtual machine to host them.
Most servers built in the last decade or longer have really been built to run a hypervisor rather than a single operating system, like Windows Server or Linux. This keeps the hardware useful and busy rather than having multiple expensive servers sitting around, each with minimal load.
Once you get your server and environment up and running, you'll come to realize that you have a performant little data center all sitting on your one box.
There are some ways to minimize the impact of multiple applications running on the same machine and competing for resources. Some consider this as much an art as a science. It's something to discuss as you build your environment and bring it online.
More information about your server and it's hardware configuration (I'm a server guy!!) would aid discussion going forward, as would you sharing your thinking on hypervisors and which one(s) you're looking at.
My homelab journey started with a single server running a desktop linux OS (Linux Mint) and docker containers. Nearly every service I wanted to run at the time (Plex, Mattermost, Jenkins, etc) were in Docker containers with local storage mounted in where necessary. Don't use a desktop OS... the rest was fine for a first run.
The next iteration of that single server was ProxMox. I made an image of the original OS and turned it into a virtual machine on that same server. This gave me the ability to clone the VM and make changes without disrupting services in the first VM. I added Portainer to the VM to manage the Docker containers in a GUI.
When hosting services for family, I can say that the most important thing is always maintain the ability to keep something up and running. They don't understand downtime and while admin stuff is fun, admin with impatient family is less fun.
I quickly realized that I needed two servers... one to play on, spin up services, test things out, etc. One that has the services the family uses. I would promote configurations and VMs to the "family" server once vetted and working in my sandbox.
For your case, start simple. ProxMox is super quick and painless to install onto almost anything and presents a pretty usable Web GUI for 94% of the things you'd ever need to do.
- Build a VM in ProxMox. (I personally like Debian, there are plenty of distributions to use.)
- Maybe install Portainer (This helps manage docker containers in it's own Web GUI)
There are many tutorials and guides which document how to get a service up and running with a Docker Compose file. Portainer can use those too, making it fairly straight-forward to get a container running your preferred service. Once you have a baseline, there are number of ways to back things up. @brandon-lee mentioned Duplicati, something I need to try myself. I use ProxMox Backup Server... it's running in a VM on my server and has its own storage mounted for keeping backups. If you decide to set up a second server, you can use ProxMox Backups to restore VMs and containers to that second server.
All in all, have fun, tinker and feel free to ask questions.
@t3hbeowulf Excellent insights and I love your whole methodology of STG and Prod at home