Repository navigation
Conversation
A reusable module for the machine that coordinates a fleet's tailnet: Headscale on loopback behind nginx and Let's Encrypt, a 403 private page on the bare name, the machine's own name pinned to 127.0.0.1, and optionally Grafana on its own public name. A DNS drift check publishes admin_plane_dns_matches_public_ip for sites whose registrar cannot be updated automatically. vmTestAdminPlane joins a Tailscale client through the proxy, checks /health, the 403 page, the port 80 redirect and Grafana's public root URL. Refs #70.
hs.sensorica.co for Headscale (MagicDNS sensorica.internal) and grafana.sensorica.co for Grafana, until a second site takes them over. Refs #70.
…ertificate-checking health Both units join services.holochain-services with their versions, and each gets a health check through nginx by its public name that verifies the certificate, so the home page reads Not answering while nginx serves the self-signed placeholder a failed ACME order leaves. The Grafana name is pinned to loopback like the Headscale one so the checks never depend on the router's hairpin. The VM test reads both as healthy. Refs #70.
8 tasks
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes part of #70: the module, its test and the fleet wiring. Deployment (DNS, router, switch, joins) is tracked on the issue.
What changes
modules/admin-plane.nix, exported asnixosModules.admin-plane(not indefault: one machine per fleet runs it, and it opens 80 and 443). Headscale on127.0.0.1:8080behind nginx with Let's Encrypt, a 403 "Private server" page on/, the machine's own Headscale name pinned to loopback, public DERP relays.grafana.domainputs Grafana on its own public name with its root URL rewritten and secure cookies.dnsDriftcompares the site's public IPv4 with the public names every 15 minutes and publishesadmin_plane_dns_matches_public_ip{name}through node_exporter, for registrars without a usable update API (GoDaddy under ten domains).vmTestAdminPlaneinchecksand in CI.sensorica-holoport-01enables it:hs.sensorica.co, MagicDNSsensorica.internal,grafana.sensorica.co.docs/admin-plane.md: site prerequisites, deploy, join, revoke, a change of IP, moving the server to another site.docs/module-options.mdregenerated.Same shape as the athanor homelab's Headscale, with the DDNS client replaced by the drift check.
acmeEmailis optional so no personal address lands in the repository.Proof
The first test run failed usefully: Headscale exits at startup when it cannot fetch Tailscale's DERP map, and the sandbox has no internet. The test serves its own relay, as nixpkgs' headscale test does; production keeps the public map, so the admin-plane machine needs internet at boot.