autumn orange logo
  • [Landing]
  • [Letters]
  • [Crafts]
  • [Collections]
  • autumn orange logo
  • [Landing]
  • [Letters]
  • [Crafts]
  • [Collections]
  • pfp
  • [Coven]
  • [Profile]
  • pfp
  • [Coven]
  • [Profile]
  • a orange logo

    A beginners guide to homelabbing / self-hosting

    Small disclaimer, this article assumes you're proficient with basic systems administration and are looking to try self-hosting for the first time. While you don't need to be an expert, a bit of prior knowledge and comfort with googling goes a long way.

    Tired of subscriptions?

    If yes, and you’re cool with adding a few bucks to your power bill instead, try running software on your own server! Don’t have a server? You can turn any ol’ computer into one with a few easy steps.

    You can host Git repositories, file backups, and more. While there are more complex guides out there, this is mean to be a bare-bones setup you can get running quickly.

    Materials

    1. 1x computer you’re cool with leaving on all the time (or most of the time) (optional*)

    *If you don’t have a computer you’re cool with leaving on already, I recommend spinning up a cloud VM, Digital Ocean has good rates for a simple server and offers $200 of credit for students through the GitHub student developer pack. Alternatively, use an old PC or laptop.

    Overview

    We want to do two things:

    1. Run applications or store files (which any computer can do)
    2. Access software running on said system securely from other devices

    We’ll start with the second part so that you’re free to pick and chose apps later.

    If you're on Windows looking to dual boot it with Fedora, see the advanced setup guide! I'll also cover setup on just Windows as well.

    Tailscale Configuration (Server & Clients)

    You’ll want to be able to log into your computer from anywhere, but don’t want it to be publicly visible to the open internet. The easiest way to do this is to configure a VPN, which is basically like having a virtual living room where both of your devices can talk face to face… even 1800 miles apart.

    It’s easy to set up, I promise.

    1. Install tailscale on your server system
    2. Log in (either through the app, or by running sudo tailscale up)

    If you’re on Linux, you’ll need to enable and start the daemon after installation by running sudo systemctl enable --now tailscaled.

    1. Repeat on another device, such as a laptop or phone.

    Once Tailscale is installed on your server and other devices, they’ll be assigned virtual IPs which only exist within your private network, and with that most of the work is done!

    As long as the correct ports are open for the tailscale device on your server, you’re free to start hosting applications. I’ll walk you through that for Posix based systems and Windows below.

    If your server is running Linux or Unix (MacOS)

    Make sure OpenSSH-server is installed, then run sudo systemctl enable openssh --now. To enable SSH connections from Tailscale devices, run sudo tailscale set --ssh=true

    If your server is running Windows

    Run Add-WindowsCapability -Online -Name OpenSSH.Server* in powershell

    or

    Launch the ‘services’ app and find the OpenSSH SSH server service, then right click it and hit START. Next, right click again and open properties, then set startup to behavior to Automatic. Repeat this for the OpenSSH SSH authentication agent as well. Just use Powershell. Nobody should be spending their time on all this.

    Windows should allow inbound connections from Tailscale by default because TS uses NAT traversal. While just having port forwarding disabled and keeping your server on a secured network should be fine, you can additionally bind your firewall to only allow SSH connections from the ts interface.

    You’re all set

    At this point, you can start hosting applications or sharing files, assuming the right ports are open for your app on the Tailscale interface such as SSH, FTP, 25565 for Minecraft, etc.


    Advanced setup (Windows → Fedora dual boot)

    How to dual boot your Windows system with Fedora (Linux) (recommended because almost anything is better than Windows)

    Grab a USB stick, download the Fedora media writer (scroll down on the linked page!) and burn the Fedora Server ISO to your USB by following the in app instructions. Then, if it’s not already on, boot your soon to be server into Windows, open the “partition manager” tool and click on your main disk block (which must have at least 20GB of open space btw) and hit “shrink partition”. I recommend taking at least 50GB off of it.

    Next, plug in the Fedora USB, reboot your system and launch the boot menu for it (google launch <computer model> boot menu) and select the USB stick. Set your timezone, keyboard layout, and select automatic partitioning. Setup your user profile, set Cockpit, Tailscale, and Podman to install automatically (if offered, or install them after you finish setting up Fedora) and then confirm to install the OS. After booting, install and setup Tailscale if you didn’t during OS installation (sudo dnf install tailscale, sudo systemctl enable --now tailscaled, sudo tailscale up, tailscale set --ssh)

    Cockpit should be running at <serverip>:8080 already because we set it to install with Fedora, so boom. If you have the Podman tab enabled in Cockpit, you’re free to go wild launching containers from literally anywhere.


    Using SSH via Tailscale

    You can get your Tailnet IPs either by running tailscale status or by checking the devices list in the web console. You can now connect to your server by running ssh <username>@<tailscaleIP>.

    Doing stuff (Git, Cockpit, Filezilla, etc.)

    The commands for this section are assuming you’re on Unix or Linux. If you’re on Windows you’ll need to either use the absolute path of the tool, or launch it as a dedicated window if that’s available (eg, Git Bash)

    Git

    Make sure Git is installed on your server first. It comes preinstalled on most computers, but can be downloaded here if you need it.

    To use your server as a Git remote, just create a folder on your server for one of your repositories and initiate a bare repo with git init --bare, then add it as a remote with git remote add origin <username>@<tailscaleIP>:</path/to/repo/here>, then you can run git push and you’re off!

    Cockpit

    Remote server admin dashboard, I love it. It’s only available on Linux for specific distros, but comes as an install option for Fedora (which is my preferred server distro). After installing and launching it on your server, you’ll be able to access it on any device connected to your tailnet by going to https://<tailscaleServerIpHere>:8080.

    Windows has Windows Admin Center available but I can’t speak for the user experience.

    Docker (Podman)

    If you’re looking to launch containers, I recommend doing so with Podman rather than Docker, Podman has all the same features (and commands) as Docker but runs at a user level rather than a system one, meaning if a container is compromised your server is still alright. If you’re on Fedora Server, or otherwise have SE Linux installed, make sure to set a SE Linux flag so that mounted volumes don’t cause errors.

    FileZilla

    If ls isn’t cutting it for you, I recommend trying FileZilla. Simply install it on your client, then add your server as a remote under the known hosts list (book icon near the top left corner of the app). Set it to use SFTP (SSH File Transfer Protocol) on port 22 (or whatever you have it set to if you changed it), enter your credentials, and from there you’ll be able to push and pull files as you please.

    I use FileZilla a lot especially for university assignments, because it comes pre-installed on all computers at my university.

    Fusion (RSS)

    If you’ve ever wished you could follow people across all social media platforms in one place, or get your school newspaper next to hacker news, you can! RSS feeds let you follow just about anything, including people on BlueSky, Mastodon, Youtube, Tumblr, websites like the New York Times, Associated Press, governments (the U.S. has many feeds!) and even individuals on the web (like me!)

    My favorite reader is Fusion, which can be hosted as a Podman (user scoped Docker fork) container. Here’s a link to the git repo!

    Actual (budgeting software)

    It’s just good. And you can hook it up to your bank with a separate (trustworthy) $1.50 / month API. I personally spun it up with Podman mounted to a volume, if you’re going to do that as well make sure you install it from an official repository. Here’s a link to it! You’ll need the server end to be running on your home lab, and can optionally install the client on your other devices.

    Thanks for reading, I hope this was helpful :)

    Back to articles