A collection of self-host docker swarm stacks
![]() PiHole |
![]() Grafana |
![]() Prometheus |
![]() Portainer |
![]() Homer |
![]() ufw |
![]() Filebrowser |
![]() Jellyfin |
![]() Nextcloud |
![]() Traefik |
![]() Wireguard |
![]() qBittorrent |
Radarr |
![]() Sonarr |
![]() Jackett |
SearXNG |
![]() Vaultwarden |
![]() rest-server (Restic) |
![]() IT-Tools |
- Features
- My Raspberry Pi Config
- Architecture Diagram
- Getting Started
- Related Blogs
- GitBook Docs
- Project Roadmap
- Youtube Video
- 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
![]() |
![]() |
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) |
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.
- Follow prerequisite manual steps to prepare Pi
- Browse vars.yml to configuration
$ git clone https://github.com/veerendra2/raspberrypi-homeserver.git
$ cd raspberrypi-homeserver
# review vars.yml and inventory.yml and run
$ ansible-playbook main.yml
- 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] ...
- Change placement
- 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.