This repository is a fork from geerlingguy/internet-pi, I added a couple extra new features on top of the existing ones. If you are interested in knowing more, please look for the lines starting with "✨ danifr's fork".
A Raspberry Pi Configuration for Internet connectivity
I have had a couple Pis doing random Internet-related duties for years. It's finally time to formalize their configs and make all the DNS/ad-blocking/monitoring stuff encapsulated into one Ansible project.
So that's what this is.
Internet Monitoring: Installs Prometheus and Grafana, along with a few Docker containers to monitor your Internet connection with Speedtest.net speedtests and HTTP tests so you can see uptime, ping stats, and speedtest results over time.
Pi-hole: Installs the Pi-hole Docker configuration so you can use Pi-hole for network-wide ad-blocking and local DNS. Make sure to update your network router config to direct all DNS queries through your Raspberry Pi if you want to use Pi-hole effectively!
(✨ danifr's fork) Access services via custom domain names
Just add this settion to your config.yml
file:
domain_name_enable: true
domain_name: 'home.local' # whatever you want basically
domain_grafana: 'grafana' # to access grafana via http://grafana.home.local
domain_prometheus: 'prometheus' # to access prometheus via http://prometheus.home.local
domain_pihole: 'pihole' # to access pihole via http://pihole.home.local
Then run ansible-playbook main.yml
and you should be able to internally access, grafana, prometheus and pihole via the domain names
you specfied in the config.yml.
(✨ danifr's fork) Rasberry Pi monitoring: Installs Influxdb, Telegraf, and a Grafana dashboard to monitor your Raspberry stats.
Just add these lines to your config.yml
to start using it:
raspberry_monitoring_enable: true
telegraf_retention_policy: '90d'
telegraf_password: 'admin'
(✨ danifr's fork) Pi-Hole monitoring: Installs pihole-exporter (a Prometheus exporter for Pi-Hole) and a Grafana dashboard to visualize all metrics produced by Pi-hole.
Other features:
shelly-plug-prometheus
exporter and a Grafana dashboard, which tracks and displays power usage on a Shelly Plug running on the local network. (Disabled by default. Enable and configure using the shelly_plug_*
vars in config.yml
.)airgradient-prometheus
and a Grafana dashboard, which tracks and displays air quality over time via one or more AirGradient DIY monitors. (Disabled by default. Enable and configure using the airgradient_enable
var in config.yml
. See example configuration for ability to monitor multiple AirGradient DIY stations.)starlink
prometheus exporter and a Grafana dashboard, which tracks and displays Starlink statistics. (Disabled by default. Enable and configure using the starlink_enable
var in config.yml
.)IMPORTANT NOTE: If you use the included Internet monitoring, it will download a decently-large amount of data through your Internet connection on a daily basis. Don't use it, or tune the internet-monitoring
setup to not run the speedtests as often, if you have a metered connection!
You should use a Raspberry Pi 4 model B or better. The Pi 4 and later generations of Pi include a full gigabit network interface and enough I/O to reliably measure fast Internet connections.
Older Pis work, but have many limitations, like a slower CPU and sometimes very-slow NICs that limit the speed test capability to 100 Mbps or 300 Mbps on the Pi 3 model B+.
Other computers and VMs may run this configuration as well, but it is only regularly tested on a Raspberry Pi.
The configuration is tested against Raspberry Pi OS, both 64-bit and 32-bit, and runs great on that or a generic Debian installation.
It should also work with Ubuntu for Pi, or Arch Linux, but has not been tested on other operating systems.
sudo apt-get install -y python3-pip
pip3 install ansible
git clone https://github.com/geerlingguy/internet-pi.git
, then enter the repository directory: cd internet-pi
.ansible-galaxy collection install -r requirements.yml
(if you see ansible-galaxy: command not found
, restart your SSH session or reboot the Pi and try again)example.inventory.ini
to inventory.ini
(replace IP address with your Pi's IP, or comment that line and uncomment the connection=local
line if you're running it on the Pi you're setting up).example.config.yml
to config.yml
ansible-playbook main.yml
If running locally on the Pi: You may encounter an error like "Error while fetching server API version". If you do, please either reboot or log out and log back in, then run the playbook again.
Visit the Pi's IP address (e.g. http://192.168.1.10/) and use the pihole_password
you configured in your config.yml
file.
Visit the Pi's IP address with port 3030 (e.g. http://192.168.1.10:3030/), and log in with username admin
and the password monitoring_grafana_admin_password
you configured in your config.yml
.
To find the dashboard, navigate to Dashboards, click Browse, then go to the Internet connection dashboard. If you star this dashboard, it will appear on the Grafana home page.
Note: The
monitoring_grafana_admin_password
is only used the first time Grafana starts up; if you need to change it later, do it via Grafana's admin UI.
To upgrade Pi-hole to the latest version, run the following commands:
cd ~/pi-hole #
docker-compose pull # pulls the latest images
docker-compose up -d --no-deps # restarts containers with newer images
docker system prune --all # deletes unused images
Upgrades for the other configurations are similar (go into the directory, and run the same docker-compose
commands. Make sure to cd
into the config_dir
that you use in your config.yml
file.
At some point in the future, a dedicated upgrade playbook may be added, but for now, upgrades may be performed manually as shown above.
A guide for backing up the configurations and historical data will be posted here as part of Issue #194: Create Backup guide.
To remove internet-pi
from your system, run the following commands (assuming the default install location of ~
, your home directory):
# Enter the internet-monitoring directory.
cd ~/internet-monitoring
# Shut down internet-monitoring containers and delete data volumes.
docker-compose down -v
# Enter the pi-hole directory.
cd ~/pi-hole
# Shutdown pi-hole containers and delete data volumes.
docker-compose down -v
# Delete all the unused container images, volumes, etc. from the system.
docker system prune -f
Do the same thing for any of the other optional directories added by this project (e.g. shelly-plug-prometheus
, starlink-exporter
, etc.).
You can then delete the internet-monitoring
, pi-hole
, etc. folders and everything will be gone from your system.
MIT
This project was created in 2021 by Jeff Geerling.