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!
Other features:
- Shelly Plug Monitoring: Installs a
shelly-plug-prometheus
exporter and a Grafana dashboard, which tracks and displays power usage on a Shelly Plug running on the local network. (This is disabled by default. Enable and configure using theshelly_plug_*
vars inconfig.yml
.) - Starlink Monitoring: Installs a
starlink
prometheus exporter and a Grafana dashboard, which tracks and displays Starlink statistics. (This is disabled by default. Enable and configure using thestarlink_enable
var inconfig.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!
- Install Ansible. The easiest way (especially on Pi or a Debian system) is via Pip:
- (If on Pi/Debian):
sudo apt-get install -y python3-pip
- (Everywhere):
pip3 install ansible
- (If on Pi/Debian):
- Install requirements:
ansible-galaxy collection install -r requirements.yml
- Make copies of the following files and customize them to your liking:
example.inventory.ini
toinventory.ini
(replace IP address with your Pi's IP, or comment that line and uncomment theconnection=local
line if you're running it on the Pi you're setting up).example.config.yml
toconfig.yml
- Run the playbook:
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
.
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.
A guide for backing up your configurations and monitoring data, and for keeping everything up to date is being worked on in Issue #7: Create upgrade / update guide.
MIT
This project was created in 2021 by Jeff Geerling.