This is my learning project and something I do when I get all nostalgic about technology. It gives me something technical to work on and to continuously develop my knowledge. It is a project to run containers in my home media server system. From ad-blocking (Pihole) to the digital book library. To run it, you'll need a Raspberry 4 or 5. Anything older will not work, as Mongo 4.4 is not supported on that architecture. Also, you'll need some Docker and Docker Compose knowledge. This application will require 4GB of RAM or more. The setup of the applications mentioned here is out of scope. Google them. Behind every application, there is a large and vibrant community willing to help. The documentation is extensive.
Added Uptime Kuma, a simple self hosted availability monitoring tool. It enables monitoring of availabilty of HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Ping / DNS Record / Push / Steam Game Server / Docker Containers. Alertes can be pushed to more than 90 channels.
Added Prometheus Exporter for PiHole. It enables gathering of data from PiHole. An Grafana Dashboard is also available.
Swithced some of the projects to my Docker images. Some images were not maintained for more than couple of years. That made them vulnerable as base images and packages were out of date. I have forked those projects and updated to latest base images and packages.
Added Netatmo Energy (Comfort) exporter for Prometheus. This enables monitoring of Netatmo Smart Thermostat and Smart Valves. Docker image is available on my Docker Hub repostitory. It is available for x86 and ARM64 platforms. Images are built on great wrok from tipok. Also, to get you started I have created a simple Grafana Dashboard which can be downloaded from Grafana Dashboards website.
Added Philips Hue lights exporter for Prometheus. With this exporter you can get information regarding Hue lights from you home. How to generate your API key is available from Philips documentation.
Added Unifi Prometheus exporter so you can gater Unifi data into Prometheus, and visaulize them in Grafana. Grafana dashboards can be downloaded from official site (search for Unifi-Poller).
As the docker-compose.yaml got to more than 700 lines, maintaining it was a pain. I have switched from "docker-compose" to "docker compose" (note the missing minus sign) I can split the master docker-compose.yaml to separate docker compose files (e.g. dc-service.yaml). This makes it easier to maintain te stack and also more flexible to utilize only the services you need. Just comment out or remove items from master "docker-compose.yaml" file from "include" section.
Added SFTPgo as a replacement for FTPS and File Broswer. SFTPGo includes FTP/S, SFTP, WebDAV and web GUI. Defender tool is enabled which protects the app from brute forcing. Also, Prometheus metrics are enabled and Prometheus is configued to scrape the metrics.
All containers and Traefik services have a running health checks. For me it is enough to have a health check probe for every 300 seconds. If that is too much for you, you can always change it in the docker-compose.yaml file.
Added a File Browser app. A lightweight alternative to NextCloud. If you need a simple file sharing access through web interface, this is the right app. As always, I haven't removed NextCloud so you can pick and choose the one you like most.
Added Jellyfin as an alternative to Plex. Both Plex and Jellyfin are included so you can choose the application which you prefer.
Added Portainer and Portainer agent enable GUI for Docker management. Also this is I use to be able to quickly fix issues with containers as I do not want to expose SSH.
Add Prometheus, Grafana, Node-exporter, cAdvisor, alertmanager. Raspberry Pi and Docker is monitoried. Enable Prometheus export for Traefik. Included some sample Grafana dashboards for Raspberry Pi, Docker and Traefik.
All services are monitoried with Traefik health monitoring
It makes my life much easier. It makes management and updating of the application so much easier and more effective. And it doesn't blot my RPi. Also, you can find a "backup-my-pi.sh" script that will backup everything and make restoring a new RPi a breeze.
I hate accessing applications with dedicated ports. Traefik handles that. It proxies all HTTP/S traffic, so everything is behind a domain. It can handle applications with prefixes, but I like subdomains more than prefixes. You'll notice that all needed ports are still exposed for each application. That's on purpose, as this is a learning experiment, so it's obvious what ports each application requires. I love HAProxy, and I've been using it for a long time. Traefik is my learning experiment. I know it cannot match HAProxy's performance and flexibility, but I love to tackle new technologies. And proxy performance is not something I worry about in my home setup. Traefik handles Let's Encrypt certificates for all public domains. All services exposed through Traefik have configured health checks.
Portainer is a GUI for the management of Docker and part of the RPi.
Enable monitoring of the health of Raspberry Pi, Docker containers, and Traefik. Some sample Grafana dashboards are included for Raspberry Pi, Docker, and Traefik metrics. If you are using Hue lights in your home, hue-exporter for Prometheus is included.
PiHile is a network ad-blocker. It sinkholes the DNS queries of ad systems. Love it.
Dynamic DNS records management. I use no-ip2 for DDNS. But I also have my domain, which is managed on Cloudflare. So I utilize the Cloudflare API to update DNS records for my RPi domain as DDNS with Cloudflare-DDNS container.
Heimdall is a beautiful interface to access all my applications.
As I have Ubiquity devices on my home network, a Ubiquity controller is a must for me. MongoDB is included. Included in the package is Unpoller which is a Unifi Prometheus exporter.
Personal file cloud. MySQL and Redis setups are included.
This is a FTP/S, SFTP, WebDAV and Web GUI system. It has a anti brute forcing protection (Defender) and can expose Prometheus metrics.
FTP server
Samba server
Small and lightweight web application to browse your files. If FTP and Samba are too technical and NextCloud is an overkill this might be the solution you are looking for.
DLNA server
Plex media server. I had to disable transcoding as RPi was struggling. But it handles steaming to my TV just fine
Jellyfin media server. An alternative to Plex if you prefer open source software.
There are multiple applications for eBook library management. Choose one that you like most.
Movie library management
TV shows library management
Indexer management
Subtitles manager
Torrent client
This is a backup script to backup the Docker Compose file, all environment settings files, and folders that are mounted for configuration in each container. You'll notice that there is a copy and tar used for backup of the files. I use copied files for fast restore and tar files for long-term backup to an external USB drive. Use one that you like most.
This is my script to update RPi and all containers. You'll notice I am using "down" to stop and remove all containers. That is on purpose, as I had some issues with updating when old continers were not removed. It might have been something temporary, but it does not hurt.
Currently, Traefik only handles HTTP/S traffic. I plan to move all traffic (TCP and UDP) to Traefik.
I have been looking into home automation for some time now. That might be next.
raspotify is not in the Docker container. Raspotify is a Spotify Connect client. It requires low-level access to the HDMI port. Currently, it's installed on my RPi. Some had success running it in containers, but I haven't yet gotten to that.
I might move this whole project to K0s or K3s. But that will be a new git repo.
Something I am working on. This bash script is meant to build RPi from scratch to full operating mode. I do not have a spare RPi 4 to test it, and I don't feel like building everything from scratch.