====== A) The Approach ====== **Self-hosting** and **Home-Automation** are something that grow over time, getting more complex and elaborated. You start small, with some recycled hardware and makeshift cables to host some experimental services, then you start self-hosting important stuff. You add sensors, devices, IP cameras, and so on as yo udiscover new toys and interesting stuff to try out. But then... * One day your home internet connection is down and so you find out about **reliability**... * One day power goes out at home, and you find out that an unexpected server reboot might cause side issues... * One day, maybe during a hot summer day, your USB network card fails on you, when you are on vacation... * One day that critical CalDAV service stop working due to a Python update and you miss an appointment... * One day maybe you get hacked.... So you start studying and investing in UPS, reodundant ISPs with failover capability, advanced routing for your services, containers, backup techniques... I went trough the process (except i never got hacked, maybe my security measures where good from the beginning, or i was lucky, o maybe i just never noticed?), and you will as well go trough it. At the beginning i started out with a very simple approach, spent one year and half more or less expanding to the point where something a little bit more advanced was actually required. I will describe my final implementation (which, actually, is in constant evolution) and, along the way, also describe simpler ways to achieve similar results. ===== Basic Requirements ===== The following are the **very basics** that i assume you will take into consideration, on which you should not even think to skip: * Have a **proper backup plan** in place (see [[selfhost:backup|here]]), and **verify your backups** regularly. * Have **two** ISPs to provide a failsafe internet connection (see [[networking:opnsense_multiwan|here]]) * Stored your data on some redoundant **RAID array** (see [[gentoo:storage|here]]) * Have an **UPS** solution to protect your server / disk RAIDS from blackouts ===== Architecture ===== Focusing on your technological home architecture, here is composed of: * A //home server// which hosts all the private services you need (see [[selfhost:home_server|here]]) * An //automation server// which takes care of the home automation itself (see [[homeautomation:start|here]]) * A //network gateway// which connects your home network to the outside world (see [[selfhost:gateway|here]]) * One or more //WiFi access points// to provide reliable WiFi coverage to your home (see [[networking:wifiplanning|here]]) * An //external server// which hosts your public services, if any, and ensure external accessibility to your private services ([[selfhost:external_server|here]]) This approach separates the main pillars of the setup in a way that makes the overal environment more resillient and each pillar less critical if (when) it goes down for any reason like an hardware failure, software bug or just **un**planned maintenance. ┌───────────────┐ │ │ │ External │ │ Server │ │ │ Internet └───────────────┘ │ ▲ │ │ ┌─────────┼───────────────────────┼─────────────────────────────────┐ │ │ │ │ │ │ ┌────┼────────┐ │ │ │ │ │ │ │ │ │ Gateway ◄┼──────┐ │ │ │ │ │ │ │ │ ┌───────▼───────────┐ └──▲──────────┘ │ │ │ │ │ │ │ │ │ │ home server │ │ │ │ │ │ │ │ │ │ │ └───────────────────┘ ┌─────┼─────────────────┼────────────────┐│ │ │ │ ┌────┼─────────────┐ ││ │ │ │ │ │ ││ │ │ │ │ Automation │ ││ │ Home │ │ │ Server │ ││ │ │ │ │ │ ││ │ │ │ └──────────────────┘ ││ │ │ ┌───┼───────────────┐ ││ │ │ │ │ ││ │ │ │ WiFi Access │ ││ │ │ │ Point(s) │ ││ │ │ │ │ ││ │ │ └───────────────────┘ ││ │ └────────────────────────────────────────┘│ └───────────────────────────────────────────────────────────────────┘