Rant: I keep seeing people run their whole stack on a single Raspberry Pi and then act surprised when an SD card dies and six months of data and config evaporate. Selfhosting is awesome, but if you actually depend on services (Nextcloud, homeserver, backups, VPN) you need a tiny bit of ops discipline, not just duct-taped enthusiasm.

Reality check and a practical plan I actually use: run a small hybrid setup so failures are contained and restores are trivial.

Hardware picks (budget to sensible):

  • Budget: reused Intel NUC i3/i5 with 16 GB RAM and an NVMe SSD for the orchestrator. Cheap, low-power, and reliable. Use a Pi for low-risk experiments only.
  • Storage: Odroid HC4 or an entry-level mini NAS with SATA bays for bulk storage. Prefer drives in a simple mirrored pool - ZFS if you want checksums and snapshots.
  • For production-y reliability: small rack 1U or a used Supermicro with ECC RAM and an E3 CPU if you plan ZFS and many VMs.
  • UPS: a small APC/back-UPS with USB shutdown support. Test it quarterly.

Software stack I run and recommend: Proxmox as the hypervisor, LXC containers for lightweight system services, Docker for apps that expect it, Traefik as the reverse proxy, Unbound for local DNS, WireGuard for remote access. Use Nextcloud or Syncthing for file sync, Postgres for databases, and MinIO or an S3-compatible object store for backups/uploads.

Backup and restore policy (do this, now):

  • Files: Borgmatic with encrypted backups, rotated, stored locally and mirrored offsite with rclone to an S3 target.
  • Databases: regular logical dumps (pg_dump/mysql dump) pre- and post-backup to ensure consistent snapshots. Run these with cron or systemd timers.
  • Images: monthly full disk image with Clonezilla or a simple image tool so you can rebuild a dead disk quickly.
  • Test restores monthly. A backup that you never restore is just noise.

Operational rules and troubleshooting cheats:

  • Staging host: have one small “canary” VM/container where you apply updates first. If it survives a week, roll to prod.
  • Version pinning: pin docker images and keep a changelog. Don’t auto-update everything blindly.
  • Monitoring: run simple Prometheus + Grafana or even a tiny healthcheck script that alerts to failing services, full disks, and high load.
  • Common fixes: if Traefik gives 502, check backend container health and socket permissions; if ZFS reports I/O errors, isolate the drive and scrub the pool; if Docker volumes have permission issues, check UID/GID and use chown -R on the mounted path from the host.
  • Time: ensure NTP/chrony is working. Time skew breaks cert renewals and DB replication.

Final note: treat your home services like a small business - SLAs, backups, canaries, and a maintenance window. It makes selfhosting feel slightly less like playing with Lego and way more like owning your data for real. What did you learn the hard way when your single point of failure finally failed?

    • FauxLiving@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      7 hours ago

      It gets weirder the longer you look at it.

      Sure, let’s just say the guy was overzealous with the (silicone caulk? lol) adhesive compound. Maybe the white cord is DC power, replacing the battery… but the red wire that’s right beside the ‘power’ wire is a USB cable plugged into the phone’s USB port.

      What is plugged into the other end? It’s Zalgo isn̴̝̂’̶̯̾ṭ̷̆ ̶̫̈i̷̹̚t̴̩̉?̶͊͜

      • poVoq@slrpnk.net
        link
        fedilink
        English
        arrow-up
        4
        ·
        7 hours ago

        Probably some hack to make it look to the OS like it is charging the battery.

        But yeah, why all the silicone? 😱

        • tburkhol@lemmy.world
          link
          fedilink
          English
          arrow-up
          2
          ·
          8 minutes ago

          It looks like he’s split out the individual USB wires, run the power to the USB port, and the signal wires to different places on the exposed board, maybe to force fast mode in the charger. Then just buried everything in silicone for insulation and to keep wires from pulling loose.