{"id":13581077,"url":"https://github.com/veerendra2/raspberrypi-homeserver","last_synced_at":"2025-09-29T17:31:43.952Z","repository":{"id":61926496,"uuid":"537405615","full_name":"veerendra2/raspberrypi-homeserver","owner":"veerendra2","description":"A collection of applications and tools to make awesome Raspberry Pi homerserver","archived":true,"fork":false,"pushed_at":"2023-10-08T19:32:59.000Z","size":1579,"stargazers_count":67,"open_issues_count":7,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-09-22T19:32:32.343Z","etag":null,"topics":["ansible","docker","docker-compose","docker-swarm","docker-swarm-service","filebrowser","grafana","homeserver","jellyfin","nextcloud","pihole","portainer","prometheus","qbittorrent","raspberry-pi","swarm","traefik","ufw-firewall","vaultwarden","wiregaurd"],"latest_commit_sha":null,"homepage":"https://veerendra2.github.io/posts/home-server-setup/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/veerendra2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"veerendra2"}},"created_at":"2022-09-16T10:14:16.000Z","updated_at":"2024-09-13T07:26:04.000Z","dependencies_parsed_at":"2024-01-16T20:53:02.441Z","dependency_job_id":null,"html_url":"https://github.com/veerendra2/raspberrypi-homeserver","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veerendra2%2Fraspberrypi-homeserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veerendra2%2Fraspberrypi-homeserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veerendra2%2Fraspberrypi-homeserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veerendra2%2Fraspberrypi-homeserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veerendra2","download_url":"https://codeload.github.com/veerendra2/raspberrypi-homeserver/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219874649,"owners_count":16554606,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","docker","docker-compose","docker-swarm","docker-swarm-service","filebrowser","grafana","homeserver","jellyfin","nextcloud","pihole","portainer","prometheus","qbittorrent","raspberry-pi","swarm","traefik","ufw-firewall","vaultwarden","wiregaurd"],"created_at":"2024-08-01T15:01:57.859Z","updated_at":"2025-09-29T17:31:38.582Z","avatar_url":"https://github.com/veerendra2.png","language":"Shell","funding_links":["https://github.com/sponsors/veerendra2"],"categories":["Shell","HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"![GitHub](https://img.shields.io/github/license/veerendra2/raspberrypi-homeserver)\n![GitHub Repo stars](https://img.shields.io/github/stars/veerendra2/raspberrypi-homeserver?style=plastic)\n![GitHub forks](https://img.shields.io/github/forks/veerendra2/raspberrypi-homeserver?style=plastic)\n![GitHub issues](https://img.shields.io/github/issues/veerendra2/raspberrypi-homeserver?style=plastic)\n![GitHub release (release name instead of tag name)](https://img.shields.io/github/v/release/veerendra2/raspberrypi-homeserver?include_prereleases\u0026style=plastic)\n# Raspberry Pi Homeserver\n\n\u003cp align=\"center\"\u003e\n\u003cb\u003eA collection of self-host docker swarm stacks \u003c/b\u003e\n\u003c/p\u003e\n\n\u003ctable align=\"center\"\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/194064977-eca90693-1ddb-46cf-8a77-91cdf9e4bc69.png\" alt=\"PiHole\" width=\"60\"/\u003e \u003cbr/\u003ePiHole\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/194064712-9256cf97-b353-46b7-80b6-f0eb40ab7d92.png\" alt=\"Grafana\" width=\"60\"/\u003e \u003cbr/\u003e Grafana\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/194065021-97ddcecc-bba4-4157-b720-461e7d3735e7.png\" alt=\"Prometheus\" width=\"60\"/\u003e \u003cbr/\u003e Prometheus\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/194064903-5644c6be-ba19-4192-9a76-35ddc78d8c4b.png\" alt=\"Portainer\" width=\"60\"/\u003e \u003cbr /\u003e Portainer\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/194067359-05781276-1953-4b6c-a548-c3d292d49389.png\" alt=\"Homer\" width=\"60\"/\u003e \u003cbr /\u003e Homer\n    \u003c/center\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/196800928-49cd5781-88b2-40ff-b398-7d335cca24c0.png\" alt=\"ufw\" width=\"60\"/\u003e \u003cbr /\u003e ufw\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/194383872-f90aab62-ebac-4973-bbb0-766fafd2a8cd.png\" alt=\"Filebrowser\" width=\"60\"/\u003e \u003cbr /\u003e Filebrowser\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/194766544-2b539ee7-cb51-426f-9174-a98c1f94a044.png\" alt=\"Jellyfin\" width=\"60\"/\u003e \u003cbr /\u003e Jellyfin\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/195693675-b363b46a-146d-49f0-9182-6fc59b3e281d.png\" alt=\"Nextcloud\" width=\"60\"/\u003e \u003cbr /\u003e Nextcloud\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/221434420-2277ee82-115d-4ec6-bbe7-d0a010687dda.png\" alt=\"Traefik\" width=\"60\"/\u003e \u003cbr /\u003e Traefik\n    \u003c/center\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/226209007-03526f21-c6f6-40e1-bafd-396c87ce570c.png\" alt=\"Wireguard\" width=\"60\"/\u003e \u003cbr /\u003e Wireguard\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/226446777-1f166dd0-7347-412d-9f53-ede03a5e680d.png\" alt=\"qBittorrent\" width=\"60\"/\u003e \u003cbr /\u003e qBittorrent\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/227026824-d321bde0-75da-4b7c-a7aa-e8af514bd1f5.svg\" alt=\"Radarr\" width=\"60\"/\u003e \u003cbr /\u003e Radarr\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/238430770-f759203b-0be2-41bd-b6d5-453104b5cdec.png\" alt=\"Sonarr\" width=\"60\"/\u003e \u003cbr /\u003e Sonarr\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/229378978-cf3db371-c705-435b-aaf8-fe224b1bea66.png\" alt=\"Jackett\" width=\"60\"/\u003e \u003cbr /\u003e Jackett\n    \u003c/center\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/246494833-8c9f8489-8d1a-460e-9c3e-134a8958d5cf.svg\" alt=\"SearXNG\" width=\"60\"/\u003e \u003cbr /\u003e SearXNG\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/252403104-a77ba8cf-9d2c-4791-8b22-9ca1f9ef5d5c.png\" alt=\"Vaultwarden\" width=\"60\"/\u003e \u003cbr /\u003e Vaultwarden\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/253675772-39bd3d53-458d-479c-a49e-a6bf0a376afe.png\" alt=\"rest-server\" width=\"60\"/\u003e \u003cbr /\u003e rest-server\u003cbr/\u003e(Restic)\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/273405568-8b3eae3f-244b-4c8c-bee0-e6aab7b751f0.png\" alt=\"IT-Tools\" width=\"60\"/\u003e \u003cbr /\u003e IT-Tools\n    \u003c/center\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/8393701/221664828-4531e8b6-491c-44b3-b270-cda18040abba.png\" /\u003e\u003cbr/\u003eDocker Swarm\n\u003c/p\u003e\n\n\n## Table of Contents\n* [Features](https://github.com/veerendra2/raspberrypi-homeserver#features)\n* [My Raspberry Pi Config](https://github.com/veerendra2/raspberrypi-homeserver#my-Raspberry-pi-config)\n* [Architecture Diagram](https://github.com/veerendra2/raspberrypi-homeserver#architecture-diagram)\n* [Getting Started](https://github.com/veerendra2/raspberrypi-homeserver#getting-started)\n* [Related Blogs](https://github.com/veerendra2/raspberrypi-homeserver#related-blogs)\n* [GitBook Docs](https://dust6765.gitbook.io/raspberrypi-home-server/)\n* [Project Roadmap](https://github.com/veerendra2/raspberrypi-homeserver/projects)\n* [Youtube Video](https://www.youtube.com/watch?v=lb4s4roM6zY)\n\n## Features\n* Automated with Ansible\n* All services are deployable on docker swarm\n* Traefik reverse proxy\n* Grafana dashboards to view\n  * System metrics\n  * Internet speed everyone hour\n  * Uptime with blackbox exporter\n  * Docker container metrics\n* Homer dashboard to view all services\n* Uncomplicated firewall\n* qBittorrent with Wireguard proxy and kill switch with `healthcheck`\n\n## My Raspberry Pi Config\n\u003ctable align=\"center\"\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/235317038-70f5f50b-541b-48bb-84e0-a53e63308d00.jpg\" alt=\"PiHole\" width=\"\"/\u003e\n    \u003c/center\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ccenter\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/8393701/235317036-59dcc390-6f38-49ab-bfbc-4502f291d210.jpg\" alt=\"Grafana\" width=\"\"/\u003e\n    \u003c/center\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003eModel\u003c/td\u003e\n  \u003ctd\u003eRaspberry Pi 4 Model B Rev 1.4\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eCPU\u003c/td\u003e\n  \u003ctd\u003eBCM2835 (4) @ 1.800GHz\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eMemory\u003c/td\u003e\n  \u003ctd\u003e8 GB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eOS\u003c/td\u003e\n  \u003ctd\u003eUbuntu 22.04.2 LTS aarch64\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eCase\u003c/td\u003e\n  \u003ctd\u003eGeekworm NASPi Gemini 2.5 V2.0 Dual 2.5 Inch SATA HDD/SSD\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eDisks\u003c/td\u003e\n  \u003ctd\u003e- 1 TB Crucial SSD\u003cbr/\u003e- 1 TB Western Digital HDD\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003eDocker Swarm Nodes\u003c/td\u003e\n  \u003ctd\u003e1 (Single node docker swarm cluster)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Dashboard\n![image](https://user-images.githubusercontent.com/8393701/229379261-2bed7cf0-6117-4edd-b391-a31969915c40.png)\n\n## Architecture Diagram\n![Architecture](https://user-images.githubusercontent.com/8393701/235324714-75620112-a89b-4d10-ab9d-2e44de75d36b.jpg)\n\n## Getting Started\n\u003e Refer [Gitbook Docs](https://dust6765.gitbook.io/raspberrypi-home-server/) for more details and how to deploy manually\n\nAnsible 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.\n\n* Follow prerequisite [manual steps](https://dust6765.gitbook.io/raspberrypi-home-server/settings/manual-steps) to prepare Pi\n* Browse [vars.yml](./vars.yml) to configuration\n\n```bash\n$ git clone https://github.com/veerendra2/raspberrypi-homeserver.git\n$ cd raspberrypi-homeserver\n# review vars.yml and inventory.yml and run\n$ ansible-playbook main.yml\n```\n### NOTE\n* 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\n  * Change placement\n    ```yaml\n    ...\n      deploy:\n        replicas: 1\n        placement:\n          constraints: [node.role == manager]\n    ...\n    ```\n* Currently I'm using duckdns sub-domain (Refer example -\u003e [services/traefik/docker-stack.yml#32](./services/traefik/docker-stack.yml#32)). Refer my [blog post](https://veerendra2.medium.com/traefik-https-config-with-duckdns-for-local-homeserver-c55db9971683) to get more info.\n* Update docker volume mount paths.\n\n## Related Blogs\n* [Portainer vs Yacht](https://veerendra2.medium.com/portainer-vs-yacht-316405b9e867)\n* [Pi-hole with DHCP Relay in Docker](https://veerendra2.medium.com/pi-hole-with-dhcp-relay-in-docker-cef397922e5a)\n* [Wireguard VPN and BitTorrent on Docker Swarm (Part 1)](https://veerendra2.medium.com/wireguard-vpn-and-bittorrent-on-docker-swarm-part-1-1100b4115cc0)\n* [Wireguard VPN and BitTorrent on Docker Swarm (Part 2)](https://veerendra2.medium.com/wireguard-vpn-and-bittorrent-on-docker-swarm-part-2-b92a251ba873)\n* [Traefik HTTPS Config with DuckDNS for Local Homeserver](https://veerendra2.medium.com/traefik-https-config-with-duckdns-for-local-homeserver-c55db9971683)\n* [How to Deploy rest-server(Restic) on Docker Swarm Behind Traefik Reverse Proxy](https://dev.to/veerendra2/how-to-deploy-rest-serverrestic-on-docker-swarm-behind-traefik-reverse-proxy-4a8h)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveerendra2%2Fraspberrypi-homeserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveerendra2%2Fraspberrypi-homeserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveerendra2%2Fraspberrypi-homeserver/lists"}