Uncategorized

The ULTIMATE home lab project: high availability self-hosting

The Ultimate Home Lab Project: Achieving High Availability Self-Hosting

A Journey to Create a Resilient and Distributed Home Network

As I sit here, surrounded by wires, servers, and various gadgets, I’m reminded of the countless hours I’ve spent trying to create the ultimate home lab project. My goal is to achieve high availability self-hosting, where all my devices can communicate seamlessly, and my data is safe and accessible at all times. It’s a daunting task, but one that I’m passionate about, and I’m excited to share my journey with you.

The idea of self-hosting is not new, but it’s becoming increasingly important in today’s digital age. With more and more internet censorship and lack of access to important resources, having control over our own data and devices is crucial. Initiatives like Betanet and Anna’s Archive are great examples of this movement, and I’m inspired to create my own self-hosted network.

So, where do I start? I’ve begun by setting up a network of six physical machines, including four proper servers and two smaller devices, a Raspberry Pi and a NUC. These devices are all connected through a Nebula overlay network, which allows them to communicate with each other seamlessly. I’ve also set up Docker containers on each machine, which makes it easy to deploy and manage various services.

However, as I delve deeper into this project, I’m realizing that going distributed is hard. I’ve managed to get the networking part down, but replicating services and keeping them synced across locations is a challenge. I’ve tried using Docker Swarm, but it’s not the solution I’m looking for. I’ve also looked into Kubernetes, but it feels like overkill, and I’m not sure if it’s the right fit for my project.

The Services I Want to Host

I have a long list of services I want to host, including Home Assistant, PiHole + DNS, Jellyfin, Wireguard, Nextcloud, and many more. The problem is, there’s no easy way to duplicate these services and keep them synced across locations.

Take something like NGINX, for example. In theory, it’s easy to deploy multiple containers and connect them together, but when you start looking at the various front ends and Docker containers, it can get overwhelming. I’m still running on my old Apache + Certbot configs and struggling to make the switch to NGINX.

My Questions and Concerns

So, I’m turning to the community for help. What services would you replicate in my shoes? Do you know of any good ways to host these services in a distributed fashion? Am I the only one fearing that this may lead to a complex and difficult-to-manage system?

I’m also concerned about the storage part of my project. I’m currently using a node running Nextcloud, but it’s hard to change, and I’m not sure what tools to adopt to replicate these services.

My Current Architecture Idea

I’ve sketched out an idea for my architecture, which involves using multiple A records in the DNS to create a round-robin setup for load balancing on three NGINX nodes. These nodes would communicate with the underlying services using the Nebula network.

The problem is, I don’t know which tools to adopt to replicate these services, especially the storage part. I’m open to suggestions and ideas from the community.

Conclusion

My goal with this project is to create a guide for anyone who wants to self-host their services and have the ease of use of everyday applications without selling their soul to Google or having 10 years of expertise in Kubernetes. I believe that self-hosting is the future, and I’m excited to be a part of this movement.

If you have any help or advice to offer, please let me know. I’m eager to hear your thoughts and ideas on how to achieve high availability self-hosting.

Polska wersja artykułu

Projekt domowej laboratorium: osiąganie wysokiej dostępności samodzielnego hostingu

Jak siedzę tu, otoczony przewodami, serwerami i różnymi gadżetami, przypominam sobie niezliczone godziny, które spędziłem próbując stworzyć ostateczny projekt domowej laboratorium. Moim celem jest osiągnięcie wysokiej dostępności samodzielnego hostingu, gdzie wszystkie moje urządzenia mogą komunikować się bezproblemowo, a moje dane są bezpieczne i dostępne o każdej porze. To是一 zadanie, ale jedno, które mnie pasjonuje, i jestem podekscytowany, że mogę podzielić się nim z Tobą.

Pomysł samodzielnego hostingu nie jest nowy, ale staje się coraz bardziej istotny w dzisiejszych czasach. Z coraz większą cenzurą internetu i brakiem dostępu do ważnych zasobów, posiadanie kontroli nad własnymi danymi i urządzeniami jest kluczowe. Inicjatywy takie jak Betanet i Anna’s Archive są wspaniałymi przykładami tego ruchu, i jestem zainspirowany, aby stworzyć własną sieć samodzielnego hostingu.

Więc, gdzie zaczynam? Zacząłem od ustawienia sieci sześciu fizycznych maszyn, w tym czterech prawidłowych serwerów i dwóch mniejszych urządzeń, Raspberry Pi i NUC. Te urządzenia są wszystkie połączone przez sieć Nebula, która pozwala im komunikować się bezproblemowo. Ustawiałem również kontenery Docker na każdej maszynie, co ułatwia wdrożenie i zarządzanie różnymi usługami.

Jednak im głębiej wchodzę w ten projekt, tym bardziej zdaję sobie sprawę, że rozproszenie jest trudne. Udało mi się tylko częściowo rozwiązać problem sieci, ale replikacja usług i ich synchronizacja w różnych lokalizacjach jest wyzwaniem. Próbowałem używać Docker Swarm, ale nie jest to rozwiązanie, którego szukam. Zajrzałem również do Kubernetes, ale wydaje się to rozwiązaniem nadmiarowym, i nie jestem pewien, czy jest to odpowiednie rozwiązanie dla mojego projektu.

Usługi, które chcę hostować

Mam długą listę usług, które chcę hostować, w tym Home Assistant, PiHole + DNS, Jellyfin, Wireguard, Nextcloud i wiele innych. Problem polega na tym, że nie ma łatwego sposobu na replikację tych usług i ich synchronizację w różnych lokalizacjach.

Weźmy na przykład NGINX. W teorii jest to łatwe do wdrożenia wielu kontenerów i połączenia ich ze sobą, ale gdy zaczynamy przyglądać się różnym frontendom i kontenerom Docker, może to być przytłaczające. Nadal używam starej konfiguracji Apache + Certbot i walczę z przejściem na NGINX.

Moje pytania i obawy

Więc, zwracam się do społeczności o pomoc. Jakie usługi replikowalibyście na moim miejscu? Czy wiecie jakiegoś dobrego sposobu na hostowanie tych usług w sposób rozproszony? Czy jestem jedynym, kto obawia się, że to może prowadzić do skomplikowanego i trudnego do zarządzania systemu?

Mam również obawy dotyczące części składowej mojego projektu. Używam obecnie węzła z Nextcloud, ale jest to trudne do zmiany, i nie wiem, jakie narzędzia przyjąć do replikacji tych usług.

Moja bieżąca idea architektury

Narysowałem ideę architektury, która polega na użyciu wielu rekordów A w DNS, aby utworzyć rundę losowania dla równoważenia obciążenia na trzech węzłach NGINX. Te węzły komunikowałyby się z podstawowymi usługami przy użyciu sieci Nebula.

Problem polega na tym, że nie wiem, jakie narzędzia przyjąć do replikacji tych usług, szczególnie części składowej. Jestem otwarty na sugestie i pomysły ze strony społeczności.

Podsumowanie

Moim celem w tym projekcie jest stworzenie przewodnika dla każdego, kto chce hostować swoje usługi i mieć łatwość użycia codziennych aplikacji bez sprzedaży swojej duszy Google lub posiadania 10 lat doświadczenia w Kubernetes. Wierzę, że samodzielne hostowanie jest przyszłością, i jestem podekscytowany, że mogę być częścią tego ruchu.

Jeśli macie jakąś pomoc lub radę do zaoferowania, proszę, dajcie mi znać. Jestem podekscytowany, aby usłyszeć Wasze myśli i pomysły na to, jak osiągnąć wysoką dostępność samodzielnego hostingu.

Leave a Reply

Your email address will not be published. Required fields are marked *

WordPress Appliance - Powered by TurnKey Linux