Hello, I'm Alex from Tailscale and in this video series I want to introduce you to the wonderful world of self-hosting.
The idea of taking a cloud service, so something like a Google Photos or a Netflix subscription,
and bringing that stuff in-house behind your firewall.
Of course, I will show you how to use Tailscale to connect all of this stuff together
and build your own personal, private, secure network.
Now, you could, in the old days, pick up a Raspberry Pi really cheap and affordably.
This is a Raspberry Pi 4, so it's a few years old now.
But the idea with a Raspberry Pi was that this is a single board computer.
This has got a CPU.
That's what's under this blue thermal pad right here.
You've got a CPU.
I'm destroying this thermal pad.
And you've got the RAM on here.
You've got network ports.
You've got USB.
You've got everything you need in a little single board compute package.
the trouble is they're kind of slow and it's kind of hard to connect things to them so where would
you plug a hard drive into this right you can't do it any other way except usb which is kind of slow
it's kind of not the most reliable thing to do and especially on the raspberry pi 4 at least you're
sharing bandwidth between the usb bus and the ethernet bus so again performance is it's just
not very good on a raspberry pi not to mention that a raspberry pi 5 these days starting price
kit on Amazon is like $130 or something. So let me introduce you to this. This is a one liter
small form factor PC from Dell. I think I picked this up off of dellrefurbished.com for about $150
and this is a fully fledged what's called x86 PC. Now the nice thing about this first of all is it's
really cheap but it's also really expandable. So in here in this blue caddy I have a 512 gigabyte
SATA SSD. You can see there's a couple of ports on here, one for data and one for power. Small
ones for data, the big ones for power. And this is a 512 gigabyte SSD, but you could very easily
pick up a 1, a 2, a 4, even an 8 terabyte variant of one of these for not a huge amount of money.
Inside, we've got the CPU, which is what's underneath this fan here. And because these
CPU units were kind of designed to go in office buildings and sort of on the back of monitors and
stuff. They're designed to be really easily serviceable without tools. So you can see the
fan here just comes out with just a couple of plastic tabs. You can upgrade the RAM on these
things, which is another problem with the Raspberry Pi. The RAM that these ship with from the factory
is all soldered directly onto the Raspberry Pi, so they're not very flexible. But here it's just a
couple of laptop dims. So I've got two 16 gigabyte sticks of memory for 32 total gigabytes of memory
in this system. And that's useful if you want to run things like machine learning models to run a
self-hosted Google Photos backup software called Image. And so that's going to be the target for
this video series, taking real problems that you have in your digital life and figuring out how to
self-host them. So we're going to put Image on here, which is a self-hosted Google Photos clone.
Also, we'll probably take a look at Jellyfin or Plex or maybe even Audio Bookshelf to solve some of
your media needs. And then I'll also introduce you to one of my absolute favorite open source
projects of all time, to be honest, Home Assistant, an open source home automation platform that will
very comfortably run on a box like this. So get subscribed. This is part one in this video series
where we're going to install Proxmox and kind of get you out of the ground and build the foundations
for this. And then part two and the ones that follow will be how to set up a few basic self-hosted
applications to dip your toe in the beautiful pool of self-hosting. So first things first,
we're going to need to install an operating system onto this computer. And to do that,
we flash an ISO onto a USB stick and turn it into a bootable medium. So head over to
proxmox.com and click on downloads and then download the ISO file. Whilst that's downloading,
we're also going to want to search for something called Bellina Etcher. Now, if you're on Windows,
I would recommend not using Etcher. I'd use something called Rufus instead. This is a way
of turning USB sticks into a bootable USB drive. So if you're on Windows, use Rufus. If you're on
macOS, use Bolina Etcher. If you're on Linux, well, you probably already know how to make a
bootable USB because you probably installed Linux yourself. So head on over to your downloads folder,
wherever that may be, and you can see I've got Bolina Etcher already downloaded here.
Drag that into your applications folder. We're going to replace the existing one that's there to make sure that what we downloaded gets installed and so that the Bellina Etcher is the most up-to-date version it can be.
And then I'm going to launch Bellina Etcher just by double clicking on it. I'm going to click on open, followed by flash from file. I'm going to select the Proxmox ISO that we just downloaded, click on open, and then I'm going to put my USB drive into one of the USB ports on my laptop.
Next, I'm going to select a target disk to flash.
So in this case, this is the USB SanDisk 3.2, 123GB drive.
This is going to completely override everything that's on that USB disk.
So make sure this is a spare drive and there's nothing important on it.
It's going to ask me for my password, which I've just entered.
And then it's going to flash the Proxmox ISO onto the USB stick.
Once that's complete, we then want to put it into here.
But before we get there, I've got to finish reassembling it.
So I'm going to put my SATA SSD back into the case.
This is a hot swap type deal, tool-less type deal.
So it can be a little bit fiddly to line it upright.
But once it's in, it's just a case of sliding it in until it clicks.
Then I get my lid and put that back on.
And again, just tighten the thumbscrew.
All right, so now the flash is complete.
There's a few things we're going to want to do before we power this on.
First of all, we're going to need something in the way of networking.
This is a Ubiquiti switch, and you absolutely don't need to use Ubiquiti,
but I like them because these are what's called managed switches.
So you can buy very cheap, unmanaged gigabit switches off of, well, any online retailer.
Unmanaged means it's kind of dumb.
There's no way of routing packets around cleverly inside.
This is basically a mini computer inside a switch,
so I can carve up this switch into multiple different
what are called VLANs.
It's well beyond the context of today's video.
Essentially what we want to do is grab an ethernet cable.
This is gonna represent our internet into the building.
So I'm gonna just put that into the first port here
until it clicks.
And then I'm going to grab another ethernet cable.
So this is a Monoprice Slim cable.
Again, you can find these online very readily available.
And I really like these because just look at how malleable they are.
And I'm going to put this into one of these ports here.
In fact, I might undo my very pretty knot right here.
I'm going to put this into one of the ports on the Ethernet switch.
And then on the back of the Dell box, you can see there is an Ethernet port right here.
So that just plugs in like that.
Now, the next thing you probably want to consider is a keyboard, a mouse maybe,
although for a headless server, you probably don't need a mouse,
and some kind of a monitor.
And I have a bit of a trick up my sleeve for this today.
This is called a Jet KVM.
This is a little, basically, keyboard, monitor, and mouse in a very tiny sort of little Apple Watch-sized device.
This is going to emulate, effectively, what a full-size keyboard and mouse would do,
and do it in such a way as that I can record the screen of this laptop and show you what's going on here.
So, for demonstration purposes, it makes life a lot easier.
But essentially the way this works is there's a USB cable here which connects into the back of the Dell box just in one of the standard USB 3 ports like so.
Then there is this little splitter here and one side of this goes to a wall outlet so this connects to a charger of some description.
And then the other half obviously goes into the back of the Dell box right here.
On the back of the JetKVM, there's a USB-C port, and this is kind of like a two-in-one deal.
So this does power and control as well.
So the JetKVM should power up any second now.
We're going to need to connect this with another Ethernet cable into our switch over here.
So in we go over here, and in we go into the back of the JetKVM.
Now there's one thing missing.
How do we get the video out of this box into the JetKVM?
And we need to use an HDMI cable.
Very straightforward.
The back of the Dell box here has an HDMI out.
And then that just goes into the HDMI in on the Jet KVM.
Obviously, if you're hooking up a real keyboard, a monitor and a mouse, it's going to be very straightforward.
But this little box here, as I say, emulates all of that functionality for us.
And now it's time to take our bootable USB stick out of our laptop and put it into the back of our little Dell computer right here.
So once we've done that we're now ready to switch this thing on and get it booting
But before we do that I want to pull up the interface for the Jet KVM
So in my case this is running on 192.168.1.70
And this prints that out beautifully simply on the little screen for me right here
And this is it right so this is the Jet KVM interface
This is just replacing the keyboard video and mouse that you would have physically on the desk in front of you
So here's the power cord for the Dell box.
It's just a standard 19 volt kind of barrel jack,
you know, laptop power supply type situation.
With that connected up, we should see any second now
that the Dell box boots.
In fact, there we go.
And it's now going to boot from the USB stick instead.
So it says, welcome to grub.
And don't worry about these error messages.
They just unfortunately happen sometimes.
And we can click on either graphical or terminal.
I'll just do graphical right now
because I think that's probably the easiest thing.
So what we're doing right now is we're installing Proxmox.
And this is going to be the sort of base layer,
the foundational layer of our sort of mini self-hosting
HomeLab platform that we're doing here.
And Proxmox is what's called a hypervisor.
Basically, in simple terms,
this means it can run virtual machines and containers for us.
Those are logical ways of slicing up this one machine
into multiple machines.
So we could have one container for image,
we could have another container for Plex or Jellyfin
or something like that, and so on.
and so on. And the reason I pick Proxmox is because I use it in all of my tail scale videos.
In fact, if you look on the HomeLab subreddit, it's probably one of, if not the most popular
projects out there. Now, in terms of installing Proxmox, it's quite straightforward. We can just
click our way to victory here. I'm going to select, I agree to the license. I've got two drives I can
install Proxmox onto. I'm just going to select the NVMe drive because that's going to be the most
performant for us and then I'll leave the other 500 gigabyte disk just for data that kind of thing
so in terms of countries I can type in you know standard way United States here we go time zone
I'm going to pick America New York and then keyboard layout leave that as US password I'm
just going to set a random password and then for email just pick an address that you don't mind any
alerts going to from Proxmox. I'm just going to call this one admin at test.com. Now on this page,
this is important. We pay attention to the various networking things that are going on.
This particular box only has one network interface. That's this gigabit ethernet port right here,
but some of them have multiple. So you do need to pay attention potentially to which interface
you plugged into. In terms of a host name or a fully qualified domain name, this is up to you.
You can buy a domain very cheaply.
I just released a video a couple of weeks ago on how to do that with a custom OIDC provider in Tailscale.
But for now, I'm just going to call this one proxmox.alexshouse.com.
I don't own alexshouse.com, but maybe that will come back to bite me later.
But for now, that will do just fine.
Now, we're also going to want to set a static IP address for this system.
And I typically do, for the primary server on my network, 1.10.
It's personal preference entirely, but that's what I like to do.
The default gateway on this particular network is 192.168.1.254.
And that also happens to be the DNS server as well, at least for now.
One of the other things you can start doing with self-hosting is hosting ad-blocking DNS servers.
So you don't have to worry about, you know, you probably had a pie hole.
You can self-host that on here as well.
And the beauty of modern hardware is that it's so insanely overpowered.
powered for a lot of the stuff that we want to do at home. So whilst the install is running, let's
cover a few basic network fundamentals, like things like where did I get my gateway IP from, how do I
know what my DNS server is, all that kind of stuff. So in the Unify world at least, it's fairly
straightforward. It's all presented to you in a dashboard that you can see right here, and this is
one of the reasons I like Unify personally, is because, you know, my switch here can talk to the
firewall or the router, and just get all of that information kind of all in one place, and it's all
in one dashboard. But if you have a different router or an ISP provided one, get yourself logged
into the admin page of that router and look for something along the lines of DHCP range or IP range
or subnet mask or something along those lines. And what you're looking for really is this information
right here. It won't look exactly like this, but this should give you a starting point at least as
to where to find it. So in my case you can see that my gateway IP is 192.168.1.254 and that refers
to the actual firewall in this case itself that's doing all the routing into and out of my network
to my internet service provider. Now this box also the unify box also happens to be my DNS server and
that's a pretty common setup for most networks to be honest. Most firewalls are set up to be what's
called a DHCP server. And as part of DHCP, which is the process of automatically handing out
addresses to devices that connect to your Wi-Fi or your network, you will get a bunch of information
automatically through DHCP. So you get the gateway, you get the DNS, all that kind of stuff.
You can see here the DHCP range is 1.6 all the way through to 1.254. So when a client requests
to connect to your network, it will say, hello, I exist. Can I have an IP address, please?
The DHCP server will then give it an address with all that information in.
Proxmox, though, needs a static IP address.
So it doesn't announce itself and say, hi, I'm Proxmox, I need an IP.
We need to manually configure that, which is what we did in the previous step a few minutes ago.
And typically speaking, the gateway IP is either 192.168.1.1 or 1.254, depending on how your network is configured.
There's a bunch of other stuff you can typically configure in DNS and all the rest of it.
You can see here that the DNS server will be assigned to client devices automatically by DHCP.
So in this scenario at least, the DNS server and the gateway are one and the same.
So as we can see, Proxmox has now installed and rebooted this computer so we can remove our USB stick.
Now the first thing I like to do is get logged in via SSH because this tiny little writing is not good for anybody's eyes these days.
So what we need to do is do ssh root at and then the IP address of the box that we just installed.
So in my case, that's 192.168.1.10.
We also set a root password as part of the installation process.
So go ahead and enter that now.
Now over at helperscripts.com, there'll be a link to this in the description down below.
There are a bunch of basically fresh out of the box Proxmox things I like to do before I do anything else.
So I'm going to search up here for Proxmox post install.
And here we go, Proxmox VE, Virtualization Environment, Post Install.
I'm going to copy this onto my clipboard, go back to my terminal, and paste this script into my terminal.
This is going to do a few things for us. Let's talk you through it.
It's going to correct the Proxmox Virtualization Environment sources.
Proxmox, by default, will nag you that you need a subscription.
And it's a fantastic project, and if you get a lot of utility out of it,
you should go and support the project by buying a license or getting some support from them.
But they have a bunch of enterprise repos, which by default are configured and require a subscription.
Now, we don't have a subscription, so we need to kind of correct those.
So let's remove those. Let's remove the enterprise repository.
Let's correct the Ceph package sources.
And the PVE test repository can, yes, fine, I'm going to add it as disabled.
I'm going to disable a subscription nag, and as it says here,
you should support your local friendly neighborhood software projects.
I'm going to disable high availability right now because we've only got one of these boxes.
And I'm not going to update Proxmox and I'm not going to reboot because I like to do these things manually.
So what we want to do now is an apt update.
This is going to fetch down the latest versions of all of the packages from Debian.org,
but it's not going to install them.
So essentially how the Linux package management system works
is you have on your system a local copy of all the latest.
It's like a long list of all the latest versions of all the packages available that make up a Linux distribution.
When I do apt update, it downloads a new list, the up-to-date list of what the current version of packages is.
There's a delta probably between those two things, and you can see here that there are 11 packages in that delta.
So to install them, I want to type pveupgrade.
This is going to bring our Proxmox installation completely up-to-date,
and you can see there's a bunch of stuff going on here.
We're going to install a new kernel.
We're also going to update Python and Proxmox and PVE itself a little bit
because the ISO is a little bit behind what is the most current version.
Once this is done, we should actually, in fact, we can probably go there now.
We can go to HTTPS 192.168.1.10,
and then we're going to go to what's called a port number.
So you see the colon in here?
We're going to go to port 8006.
This basically means that Proxmox is advertising a website on the IP address of 1.10 on port 8006.
But because this is a self-signed certificate, we get the scary your connection is not private message.
It's okay, we can proceed past that.
And again, log in with our root username and password using the standard Linux PAM authentication.
And this is it.
We now have a fully functional Proxmox box.
We can create virtual machines, we can create containers, and start our self-hosted journey.
But before we do, I do want to just reboot the box because I remember there was a fresh kernel applied here.
So let's do an apt auto-remove.
This is going to just clean up anything that's there.
In this case, there was nothing.
And we're going to reboot the box.
Now, we can jump back to our JetKVM and watch the reboot process happen in real time.
Don't forget, if you had a monitor, you could just watch that.
But in my case, JetKVM will do the same thing.
okay and now the box has rebooted it's time to install our very first application but that's
going to come in part two sorry to be such a tease but it's going to come in part two part one is all
of the software and getting kind of out of the ground our foundational stuff part two is where
we're going to start installing the image container home assistant jellyfin or plex or whatever we pick
and how to configure our phone to talk you know take a picture and have our phone send it back to
home base over tail scale all completely encrypted and all that kind of good stuff so
get subscribed there'll be a link in the playlist down below and part two should be out sometime
next week thank you so much for watching and until next time i've been alex from tail scale