2019-04-03 15:06:59 +00:00
|
|
|
---
|
|
|
|
inlineSVG: true
|
2019-06-20 20:05:14 +00:00
|
|
|
paginate: true
|
2019-04-03 15:06:59 +00:00
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
# <!--fit--><!-- _class: lead white -->the homeserver talk
|
2019-04-03 15:06:59 +00:00
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
![bg](https://fakeimg.pl/1920x800/8e44ad/fff/?text=+&npsp;)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
# `whoami`
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
- Nemo
|
|
|
|
- [@captn3m0](https://twitter.com/captn3m0)
|
|
|
|
- [@razorpay](https://razorpay.com) (:money_with_wings: :credit_card:)
|
2019-06-20 20:05:14 +00:00
|
|
|
- me@captnemo.in
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# agenda
|
|
|
|
|
2019-06-21 03:18:31 +00:00
|
|
|
0. What counts as a homeserver?
|
2019-06-10 12:28:18 +00:00
|
|
|
1. Why you should run one?
|
|
|
|
1. How do you get started?
|
|
|
|
1. All the gotchas!
|
|
|
|
1. CTA
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# homeserver
|
|
|
|
|
|
|
|
A _computer_ which runs service(s) for personal use.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
![bg](https://fakeimg.pl/1920x800/8e44ad/fff/?text=why?)
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# motivation?
|
|
|
|
|
|
|
|
1. owning your data
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# motivation?
|
|
|
|
|
|
|
|
1. owning your data
|
|
|
|
2. de-googling
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# motivation?
|
|
|
|
|
|
|
|
1. owning your data
|
|
|
|
2. de-googling
|
|
|
|
3. backing up your data locally
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# motivation?
|
|
|
|
|
|
|
|
1. owning your data
|
|
|
|
2. de-googling
|
|
|
|
3. backing up your data locally
|
|
|
|
4. learning/experimenting with tech
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# motivation?
|
|
|
|
|
|
|
|
1. owning your data
|
|
|
|
2. de-googling
|
|
|
|
3. backing up your data locally
|
|
|
|
4. learning/experimenting with tech
|
|
|
|
5. playing mario
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
# <!-- _class: lead --> ![drop-shadow](./images/sideproject.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-04-03 15:06:59 +00:00
|
|
|
# time?
|
|
|
|
|
|
|
|
_<5 hr a month_
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
![bg](images/elite130.jpg)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
![bg](images/htpc.jpg)
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
![bg](https://fakeimg.pl/1920x800/8e44ad/fff/?text=software)
|
|
|
|
![bg vertical](https://fakeimg.pl/1920x800/AE53D4/fff/?text=hardware)
|
|
|
|
![bg](https://fakeimg.pl/1920x800/B858E0/fff/?text=glue)
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
# what I run?
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
## Monitoring
|
|
|
|
|
|
|
|
- Prometheus
|
|
|
|
- Grafana
|
|
|
|
- speedtest-exporter
|
2019-06-20 20:05:14 +00:00
|
|
|
- [ACT Exporter](https://git.captnemo.in/nemo/prometheus-act-exporter)
|
2019-06-10 12:28:18 +00:00
|
|
|
- CAdvisor
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
![bg fit](images/act2.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
![bg fit](images/act-graph.png)
|
|
|
|
|
|
|
|
<!-- _class: bottom --> [#](https://grafana.bb8.fun/d/_u2-GHSik/main-dashboard?orgId=1&fullscreen&panelId=3&from=now%2Fw&to=now)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
## Media
|
|
|
|
|
|
|
|
- Airsonic (:musical_note:) (Google Play)
|
|
|
|
- Jellyfin (:movie_camera:) (Netflix)
|
|
|
|
- Kodi (:tv:) (Home Theater)
|
|
|
|
- Audioserve (:studio_microphone: :book:) (Audible)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Content
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
- [Nextcloud][nc] :cloud: :white_check_mark: (Drive/Calendar/Contacts/Documents)
|
|
|
|
- [Miniflux][miniflux] (:newspaper_roll: `RSS`) (Feeds)
|
|
|
|
- [Timemachine][timemachine] (💻 ⏮)
|
|
|
|
- [wiki.js][wiki]
|
|
|
|
- [Radicale][radicale] :date: :card_index_dividers: (Contacts/Calendar)
|
|
|
|
- [RSS Bridge][rssb]
|
|
|
|
- [Gitea][gitea] (GitHub)
|
|
|
|
- [ZNC](https://wiki.znc.in/ZNC) (IRC)
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-21 03:18:31 +00:00
|
|
|
# <!--fit--><!-- _class: lead white -->hardware
|
|
|
|
|
|
|
|
![bg](https://fakeimg.pl/1920x800/AE53D4/fff/?text=+&npsp;)
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## [Specs](https://in.pcpartpicker.com/list/fZfp6s)
|
|
|
|
|
|
|
|
- Intel i5-7600 3.5GHz
|
|
|
|
- Nvidia 1050 Ti 4GB
|
|
|
|
- 2x8GB DDR4 RAM
|
|
|
|
- 3x3TB Internal HDD
|
|
|
|
- MSI B250I Motherboard
|
|
|
|
|
|
|
|
## :cloud:
|
|
|
|
|
|
|
|
- DO 1vCPU / 2GB RAM / 30GB SSD ($10/mo) (BLR1 region)
|
|
|
|
- \+ 100GB disk
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# A VM on the :cloud:
|
|
|
|
|
2019-06-20 19:10:06 +00:00
|
|
|
- Scaleway: 4ARMv8/2GB/50GB - **300 INR**
|
|
|
|
- AWS Lightsail: 1vCPU/512MB/20GB - **250 INR**
|
|
|
|
- Digital Ocean: 1vCPU/1GB/25GB - **350 INR**
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
_Beware of Persistent Storage cost_
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# :cloud:
|
|
|
|
|
|
|
|
- Security: Footgun
|
|
|
|
- Batteries included
|
|
|
|
- OpEx
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# cloud storage
|
|
|
|
|
|
|
|
| Storage | Cost/month | Retail |
|
|
|
|
| :------ | ---------- | ------ |
|
|
|
|
| 1TB-SSD | $100 | $99 |
|
|
|
|
| 3TB-SSD | $300 | $224 |
|
|
|
|
| 1TB | $25 | $45 |
|
|
|
|
| 3TB | $75 | $84 |
|
2019-04-03 15:06:59 +00:00
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
_Indicative AWS:EBS Prices_
|
|
|
|
|
2019-04-03 15:06:59 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
# Raspberry Pi 3
|
|
|
|
|
|
|
|
- :memo: 1GB RAM
|
|
|
|
- :globe_with_meridians: Wireless/BLE/Ethernet
|
|
|
|
- :chains: 4 USB ports
|
|
|
|
- :musical_note: Audio/HDMI/Composite VGA
|
|
|
|
- :zap: 2.5A
|
2019-06-20 19:10:06 +00:00
|
|
|
- :money_with_wings: **~3k INR**
|
2019-04-03 15:06:59 +00:00
|
|
|
- :camera:, GPIO
|
|
|
|
|
|
|
|
![bg right](https://cdn.shopify.com/s/files/1/0176/3274/products/Kit-game_1024x1024.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 19:10:06 +00:00
|
|
|
# <!-- _class: white -->system76 Meerkat
|
2019-04-03 15:06:59 +00:00
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
![bg](https://d1vhcvzji58n1j.cloudfront.net/assets/products/meer4/hero_wide-7cf0ee6536_2560.jpg)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
<!-- TODO: Fix header -->
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# Other Alternatives
|
|
|
|
|
2019-06-20 19:10:06 +00:00
|
|
|
![bg right](images/nuc.jpg)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
1. Intel NUCs
|
|
|
|
2. [Hetzner Server Auctions](https://www.hetzner.com/sb) (20-50USD/mo).
|
|
|
|
3. NAS/Network device.
|
|
|
|
4. Gamer? [`r/pcmasterrace/wiki`](https://www.reddit.com/r/pcmasterrace/wiki/builds)
|
|
|
|
|
|
|
|
<!-- _TODO: better image_ -->
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
# <!-- _class: white bottom-->have some old laptops?
|
2019-04-03 15:06:59 +00:00
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
<!-- https://preview.redd.it/b9fvg5yo5dl21.jpg?width=1024&auto=webp&s=9a5a4d9fdd4e486a23c159f4e4e27e88942018f5 -->
|
2019-04-03 15:06:59 +00:00
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
![bg cover](images/homelab1.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
# <!-- _class: white bottom-->really into networking?
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
<!-- https://preview.redd.it/8682wq9m8kn21.jpg?width=576&auto=webp&s=41e7ab264fcbb054209981126259b9b44b9d1d70 -->
|
|
|
|
|
|
|
|
![bg cover](images/homelab2.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
# <!-- _class: white bottom -->really want a cluster?
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
<!-- http://raspberrywebserver.com/raspberrypicluster/raspberry-pi-cluster.html -->
|
|
|
|
|
|
|
|
![bg cover](images/cluster.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# Hybrid
|
|
|
|
|
|
|
|
- Local Disk, Cloud Compute
|
|
|
|
|
|
|
|
![](images/hybrid.jpg)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
| | Cloud | Pi | PC\* | Hybrid | NAS |
|
|
|
|
| :------------------ | ------------------ | --- | -------- | ------ | --- |
|
|
|
|
| **Security** :lock: | + | ++ | ++ | + | ++ |
|
|
|
|
| **Utility** | +++ | - | :dollar: | ++ | - |
|
|
|
|
| **Cost** | :money_with_wings: | +++ | ++ | + | ++ |
|
|
|
|
| **Setup-Ease** | + | + | - | -- | ++ |
|
|
|
|
| **Ops-Ease** | ++ | - | + | - | ++ |
|
|
|
|
| **Storage** | -- | - | + | ++ | ++ |
|
|
|
|
| **Gaming** | -- | - | ++ | ++ | -- |
|
|
|
|
| **HTPC** | :dollar: | + | ++ | ++ | + |
|
2019-04-03 15:06:59 +00:00
|
|
|
|
2019-06-20 19:10:06 +00:00
|
|
|
<!-- - \*Includes DIY/PC/Alienware/Old Laptops/Gaming PC -->
|
2019-06-10 12:28:18 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-21 03:18:31 +00:00
|
|
|
# <!--fit--><!-- _class: lead white -->glue
|
|
|
|
|
|
|
|
![bg](https://fakeimg.pl/1920x800/B858E0/fff/?text=+&npsp;)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# software
|
|
|
|
|
|
|
|
1. docker **\***
|
|
|
|
2. kubernetes
|
|
|
|
3. ansible/puppet/chef
|
|
|
|
4. helm?
|
2019-06-20 20:05:14 +00:00
|
|
|
5. [tool-of-your-choice](https://docs.google.com/spreadsheets/d/1FCgqz1Ci7_VCz_wdh8vBitZ3giBtac_H8SBw4uxnrsE/edit#gid=0)
|
|
|
|
6. [Unraid](https://www.unraid.net/)
|
|
|
|
7. [HomelabOS](https://gitlab.com/NickBusey/HomelabOS)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-21 03:18:31 +00:00
|
|
|
# <!--fit--><!-- _class: lead white -->pick something dumb
|
|
|
|
|
|
|
|
![bg](https://fakeimg.pl/1920x800/9b59b6/fff/?text=+&npsp;)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-04-03 15:06:59 +00:00
|
|
|
# containers?
|
|
|
|
|
|
|
|
- secure
|
|
|
|
- declarative configuration
|
|
|
|
- orchestration is 100x easier
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# networking
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
- Public + Static IP Address
|
2019-04-03 15:06:59 +00:00
|
|
|
- Floating/Elastic IP
|
2019-06-20 20:05:14 +00:00
|
|
|
- VPN
|
|
|
|
- Wildcard DNS/TLS
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-21 03:34:03 +00:00
|
|
|
![bg cover](images/network-mini.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-04-03 15:06:59 +00:00
|
|
|
![bg cover](images/networking.jpg)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-21 03:18:31 +00:00
|
|
|
<!--
|
|
|
|
|
|
|
|
REM What follows are some slides on
|
|
|
|
REM on how I configure my network and infrastructure
|
|
|
|
REM with docker/terraform, but they aren't
|
|
|
|
REM useful for the audience, so skipped
|
|
|
|
|
|
|
|
# configuration
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
- terraform + docker
|
|
|
|
- kubernetes + helm
|
|
|
|
- ansible + galaxy
|
|
|
|
- docker-compose
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# terraform
|
|
|
|
|
|
|
|
```json
|
|
|
|
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)}"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
- source: <https://git.captnemo.in/nemo/nebula>
|
|
|
|
- [terraform.io/docker](https://www.terraform.io/docs/providers/docker/)
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# Docker API
|
|
|
|
|
|
|
|
1. Manage networks,
|
|
|
|
2. Containers,
|
|
|
|
3. Configuration
|
|
|
|
|
|
|
|
All over a API, but only for one host.
|
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
docker swarm, but single host
|
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
--- -->
|
2019-06-10 12:28:18 +00:00
|
|
|
|
2019-06-21 03:18:31 +00:00
|
|
|
# <!--fit--><!-- _class: lead white -->security
|
|
|
|
|
|
|
|
![bg](https://fakeimg.pl/1920x800/27ae60/fff/?text=+&npsp;)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-10 12:28:18 +00:00
|
|
|
# security
|
|
|
|
|
2019-06-21 03:34:03 +00:00
|
|
|
0. Run everything in isolation
|
2019-06-10 12:28:18 +00:00
|
|
|
1. Don't expose services
|
2019-06-21 03:34:03 +00:00
|
|
|
1. Expose services without auth over VPN only
|
|
|
|
1. Don't expose management services over Internet
|
|
|
|
1. Keep services behind Auth (even Basic Auth works)
|
|
|
|
1. Go Hybrid
|
2019-04-03 15:06:59 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-06-21 03:18:31 +00:00
|
|
|
# <!--fit--><!-- _class: lead white -->buy a raspberry pi today
|
|
|
|
|
|
|
|
![bg](https://fakeimg.pl/1920x800/27ae60/fff/?text=+&npsp;)
|
2019-06-20 20:05:14 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2019-04-03 15:06:59 +00:00
|
|
|
# self-hosting references
|
|
|
|
|
|
|
|
- [kickball/awesome-selfhosted](https://github.com/Kickball/awesome-selfhosted)
|
|
|
|
- [linuxserver.io](https://www.linuxserver.io/)
|
|
|
|
- [r/selfhosted](https://reddit.com/r/selfhosted)
|
|
|
|
|
|
|
|
<!-- paginate: true -->
|
|
|
|
|
|
|
|
<style>
|
|
|
|
section.lead h1 {
|
|
|
|
text-align: center;
|
|
|
|
}
|
2019-06-20 19:10:06 +00:00
|
|
|
section.white h1 {
|
|
|
|
color: white !important;
|
|
|
|
}
|
2019-06-10 12:28:18 +00:00
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
h1,h2,h3,h4,h5 {
|
|
|
|
font-weight: bold;
|
|
|
|
font-family: 'Yanone Kaffeesatz', sans-serif !important;
|
|
|
|
color: #2c3e50;
|
|
|
|
}
|
|
|
|
h1 {
|
|
|
|
font-size: 3em;
|
|
|
|
}
|
2019-06-10 12:28:18 +00:00
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
h2 {
|
|
|
|
font-size: 2em;
|
|
|
|
}h3 {
|
|
|
|
font-size: 1.3em;
|
|
|
|
}
|
2019-06-10 12:28:18 +00:00
|
|
|
|
2019-06-20 20:05:14 +00:00
|
|
|
section.bottom>*, section.bottom {
|
|
|
|
text-align: center;
|
|
|
|
padding-top: 300px;
|
|
|
|
text-shadow: -1px -1px 0 #34495e, 1px -1px 0 #34495e, -1px 1px 0 #34495e, 1px 1px 0 #34495e;
|
|
|
|
}
|
|
|
|
</style>
|
2019-06-20 19:10:06 +00:00
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# questions?
|
|
|
|
|
|
|
|
- [me@captnemo.in](mailto:me@captnemo.in)
|
|
|
|
- [@captn3m0](https://twitter.com/captn3m0)
|
2019-06-21 03:18:31 +00:00
|
|
|
- [captnemo.in/archive.html](https://captnemo.in/archive.html)
|
2019-06-21 03:34:03 +00:00
|
|
|
- [captnemo.in/talks/](https://captnemo.in/talks/hs/)
|
2019-06-20 19:10:06 +00:00
|
|
|
|
|
|
|
<!---
|
|
|
|
0. SPEAK SLOWLY
|
|
|
|
1. check colors and fix colors.
|
|
|
|
2. skip clustering
|
|
|
|
3. Fix colors
|
|
|
|
4. Cloud Icon Fix
|
|
|
|
5. Software section mention backups again
|
|
|
|
-->
|
2019-06-20 20:05:14 +00:00
|
|
|
|
|
|
|
[nc]: https://nextcloud.com/
|
|
|
|
[miniflux]: https://github.com/miniflux/miniflux/
|
|
|
|
[timemachine]: https://github.com/odarriba/docker-timemachine/
|
|
|
|
[wiki]: https://docs.requarks.io/wiki/install/docker
|
|
|
|
[radicale]: https://radicale.org/
|
|
|
|
[rssb]: https://github.com/RSS-Bridge/rss-bridge
|
|
|
|
[gitea]: https://gitea.io/
|