Personal project

View GitHub profile

A self-built homelab for hosting and deploying projects

I built my own server and designed, modelled, and 3D-printed a custom rack-style case to house it. Running Ubuntu Server and Docker, the homelab hosts my personal website and provides a platform for deploying future projects while developing my practical experience with Linux, networking, and infrastructure.

Current focus
Self-hosted infrastructure
Core stack
Ubuntu Server, Docker, Cloudflare Tunnels
Hosting
Personal website and future projects

Built from the ground up

Hardware and custom case

I assembled the server hardware myself, using a Gigabyte A520M DS3H V2 motherboard and an AMD Ryzen 5 3600 processor. I also designed the enclosure rather than using a pre-built case: I modelled the assembly in Fusion 360 and 3D-printed the components to fit the hardware and networking equipment.

Server hardware
A self-assembled system built around an AMD Ryzen 5 3600 and Gigabyte A520M DS3H V2 motherboard, running Ubuntu Server without a desktop environment.
CAD design
Designed and modelled the custom rack-style enclosure in Fusion 360, working around component dimensions and allowing space for rear cables.
Fabrication
3D-printed the case components, considering practical constraints such as airflow, hardware access, and space for networking equipment.
Fusion 360 case assembly
A screenshot of the Fusion 360 assembly showing the custom server enclosure and how its components fit together.
Finished homelab server
A photograph of the completed server in its custom-designed and 3D-printed enclosure.

Under the hood

Architecture and technology

The homelab provides a headless Linux environment for running applications and services. Docker and Docker Compose keep services separated into containers, while remote access and an automated image build process make it practical to maintain the applications hosted on the server.

  • Operating system: Ubuntu Server, administered remotely over SSH without a desktop environment.
  • Containerisation: Docker and Docker Compose run applications and supporting services independently, making deployments easier to configure and maintain.
  • Website deployment: My personal website runs on the homelab in a Docker container, with PostgreSQL running as a separate service. GitHub Actions builds the application image and publishes it to GitHub Container Registry (GHCR) for deployment.
  • Remote access: Cloudflare Tunnels provide access to configured services through hostnames without requiring inbound ports to be opened on my home router. SSH is used for remote server administration.
  • Hardware and fabrication: AMD Ryzen 5 3600, Gigabyte A520M DS3H V2, Fusion 360, and 3D printing.

What I am practising

Skills developed through the project

  • Linux systems administration: installing and maintaining a headless Ubuntu Server environment and administering it remotely over SSH.
  • Deployment and containerisation: running services with Docker Compose and using a GitHub Actions and GHCR workflow to build and distribute application images.
  • Networking and remote access: configuring Cloudflare Tunnels and hostnames to make selected self-hosted services accessible remotely.
  • Hardware and CAD: assembling a computer from individual components, modelling a custom enclosure in Fusion 360, and manufacturing it through 3D printing.
  • Troubleshooting: diagnosing issues across the server, container configuration, application builds, and network access.

Next stages

Where the project is going

The homelab is an ongoing project that will provide hosting for my future applications and experiments with self-hosted services. Rather than treating each project as a separate deployment, I want to use this server as a shared platform for running and maintaining the software I build.

As the setup develops, I plan to explore further automation, additional services, and ways to manage deployments centrally. This gives me a practical environment to develop skills across hardware, Linux, networking, and application infrastructure.