Skip to content
This repository has been archived by the owner on Dec 1, 2023. It is now read-only.

veerendra2/raspberrypi-homeserver

Repository files navigation

GitHub GitHub Repo stars GitHub forks GitHub issues GitHub release (release name instead of tag name)

Raspberry Pi Homeserver

A collection of self-host docker swarm stacks

PiHole
PiHole
Grafana
Grafana
Prometheus
Prometheus
Portainer
Portainer
Homer
Homer
ufw
ufw
Filebrowser
Filebrowser
Jellyfin
Jellyfin
Nextcloud
Nextcloud
Traefik
Traefik
Wireguard
Wireguard
qBittorrent
qBittorrent
Radarr
Radarr
Sonarr
Sonarr
Jackett
Jackett
SearXNG
SearXNG
Vaultwarden
Vaultwarden
rest-server
rest-server
(Restic)
IT-Tools
IT-Tools


Docker Swarm

Table of Contents

Features

  • Automated with Ansible
  • All services are deployable on docker swarm
  • Traefik reverse proxy
  • Grafana dashboards to view
    • System metrics
    • Internet speed everyone hour
    • Uptime with blackbox exporter
    • Docker container metrics
  • Homer dashboard to view all services
  • Uncomplicated firewall
  • qBittorrent with Wireguard proxy and kill switch with healthcheck

My Raspberry Pi Config

PiHole Grafana
Model Raspberry Pi 4 Model B Rev 1.4
CPU BCM2835 (4) @ 1.800GHz
Memory 8 GB
OS Ubuntu 22.04.2 LTS aarch64
Case Geekworm NASPi Gemini 2.5 V2.0 Dual 2.5 Inch SATA HDD/SSD
Disks - 1 TB Crucial SSD
- 1 TB Western Digital HDD
Docker Swarm Nodes 1 (Single node docker swarm cluster)

Dashboard

image

Architecture Diagram

Architecture

Getting Started

Refer Gitbook Docs for more details and how to deploy manually

Ansible automation works well, if all services are intended to deploy on single box. Since I have only one machine, don't have to worry about the docker volumes, all of my docker volumes stored on single SSD mounted to host.

$ git clone https://github.com/veerendra2/raspberrypi-homeserver.git
$ cd raspberrypi-homeserver
# review vars.yml and inventory.yml and run
$ ansible-playbook main.yml

NOTE

  • This setup is created to deploy all services on single node docker swarm cluster. If you want to use this setup on multi node swarm cluster, there are some additional tweaks required like
    • Change placement
      ...
        deploy:
          replicas: 1
          placement:
            constraints: [node.role == manager]
      ...
  • Currently I'm using duckdns sub-domain (Refer example -> services/traefik/docker-stack.yml#32). Refer my blog post to get more info.
  • Update docker volume mount paths.

Related Blogs