talks/homeserver.md

4.5 KiB

inlineSVG
true

The Home Server Talk

- nemo


about me


agenda

  1. the hardware
  2. the software
  3. the alternatives
  4. the CTA

motivation?

  1. owning your data
  2. de-googling
  3. backing up your data locally
  4. learning/experimenting with tech
  5. playing mario

time?

<5 hr a month


drop-shadow


bg vertical bg bg


Raspberry Pi 3

  • 📝 1GB RAM
  • 🌐 Wireless/BLE/Ethernet
  • ⛓️ 4 USB ports
  • 🎵 Audio/HDMI/Composite VGA
  • 2.5A
  • 💸 ~3k INR
  • 📷, GPIO

bg right


A VM on the ☁️

  • Scaleway: 4ARMv8/2GB/50GB - 300 INR
  • AWS Lightsail: 1vCPU/512MB/20GB - 250 INR
  • Digital Ocean: 1vCPU/1GB/25GB - 350 INR

Beware of Persistent Storage cost


Other Alternatives

bg right

  1. Intel NUCs
  2. Hetzner Server Auctions (20-50USD/mo).
  3. NAS/Network device.
  4. Gamer? r/pcmasterrace/wiki

system76 Meerak

bg


my build

  • TODO

software

  1. docker
  2. kubernetes
  3. ansible/puppet/chef
  4. tool-of-your-choice

software

  1. docker *
  2. kubernetes
  3. ansible/puppet/chef
  4. helm?

containers?

  • secure
  • declarative configuration
  • orchestration is 100x easier

what I run

Monitoring

  • Prometheus
  • Grafana
  • speedtest-exporter
  • ACT Exporter
  • CAdvisor

Media

  • Airsonic (🎵)
  • Jellyfin (🎥)
  • Kodi (📺)
  • Audioserve (🎙️ 📖)

Content

  • NextCloud ☁️
  • Miniflux (🗞️ RSS)
  • Timemachine (💻 ⏮)
  • wiki.js
  • Radicale 📅 🗂️
  • RSS Bridge
  • Resilio 🔄
  • Gitea

networking

  • Public+Static IP Address
  • Floating/Elastic IP

bg cover


really into networking?

bg cover


really into networking?

bg cover


really want a cluster?

bg cover


configuration

  • terraform + docker
  • kubernetes + helm
  • ansible + galaxy
  • docker-compose

terraform

module "requestbin" {
  name   = "requestbin"
  source = "./modules/container"
  image  = "jankysolutions/requestbin:latest"
  web {
    expose = true
    port   = "8000"
    host   = "requestbin.bb8.fun"
  }
  networks = "${list(module.docker.traefik-network-id)}"
}

docker

"Labels": {
    "traefik.docker.network": "traefik",
    "traefik.enable": "true",
    "traefik.frontend.headers.STSSeconds": "2592000",
    "traefik.frontend.headers.browserXSSFilter": "true",
    "traefik.frontend.rule": "Host:requestbin.bb8.fun",
    "traefik.port": "8000",
    "traefik.protocol": "http"
}

docker run --tags ... --network traefik jankysolutions/requestbin:latest


OTA Updates

provider "docker" {
  host      = "tcp://docker.vpn.bb8.fun:2376"
  cert_path = "./secrets/tatooine"
  version   = "~> 2.0.0"
}

Docker API

  1. Manage networks,
  2. Containers,
  3. Configuration

All over a API, but only for one host.

docker swarm, but


self-hosting references