Also,
Grafana läuft bei mir mit auf ioBroker-Server auf dem Default Port 3000.
Für den Zugriff von Außen (wie für viele andere Dinge auch) nutze ich einen Apache-Reverse Proxy in einer eigenen VM die nichts anderes macht (könnte aber auch ein extra Raspberry Pi sein). Auf diese VM habe ich von außen Port 80 und 443 weitergeleitet (=http und https).
In der VM kann ich eine Subdomain einrichten (grafana.deinedomain.de) für die dann auch ein LetsEncrypt-Zertifikat angefordert wird.
Kommt von außen jemand mit "grafana.deinedomain.de" an, weiß der Proxy das er das auf Port 3000 meiner ioBroker-Installation weiter.
Auf meinem Android-Handy nutze ich die App "Viewer4Grafana" in der ich dann https://grafana.deinedomain.de eingetragen habe.
Der Reverse Proxy biegt je nach DNS-Namen anders ab - Seafile, Nextcloud, Zabbix, Homepage usw.
Die Subdomänen lege ich nach Bedarf an. Diese zeigen entweder auf die feste IP-Adresse oder sind vom Typ CNAME und zeigen auf den DNS-Namen meiner FritzBox.
Der Reverse Proxy könnte auch mit /grafana umgehen. Also als DNS-Namen hätten dann alle die gleiche, www.meinedomain.de und die einzelnen Dienste kann man auch als /grafana /zabbix /nextcloud etc. dahinter hängen.
Der Vorteil ist das ich eine VM habe wo ich so etwas bei Bedarf anlege und beliebige interne Webinterfaces verschlüsselt und ggf. mit zusätzlicher Anmeldung nach außen hin bereitstellen kann ohne das Rad jedes mal neu erfinden zu müssen.
Weil ich faul bin läuft auf diesem Reverse Proxy bei mir "ISPConfig", da gibt es auch viele fertige Installationsskripte. Dann hat meinen Weboberfläche wo man die neue Domain anlegt, den Haken bei Lets Encrypt setzt und kurz wartet, dann geht die Webseite. Dann noch mal bearbeiten und die Reverse DNS-Einträge setzen und fertig.