SSL Zertifikatserstellung NGINX mit IPV64 schlägt fehl

Hallo,

ich habe bei IPV64 ein Benutzerkonto erstellt, eine Domain registriert und diese nach Anleitung IPv64.net • DynDNS2 HowTo & Tutorial - IPv4 & IPv6 in meine FritzBox eingetragen.
Dann taucht in meinem IPV64 Profil unter meiner Domain, meine IPv4 und v6 Adresse auf.

Danach habe ich die Ports 80 und 443 für meinen RaspberryPi in der Fritz!Box freigegeben.

Aber wenn ich jetzt in Nginx Proxy Manager ein SSL Zertifikat erstellen will geht das nicht.

Dazu klicke ich im Hauptfenster auf Certificates, add Let’y Encrypt via DNS, als Domain Name gebe ich *.DOMAIN.TLD an und wähle DNSmulti aus.
Dann gebe ich
dns_multi_provider=ipv64
PV64_API_KEY=DEIN_API_KEY (mit meinen Key aus meinem Profil) ein.

Bekomme dann im Docker log immer einen Fehler, dass „go“ nicht installiert ist.

Wie bekomme ich ein gültiges Zertifikat?

Das Problem an dieser Stelle ist das in der allen Versionen von NPM kein Go mit kommt
du musst ein eigenes Images bauen

Du machst folgendes (beispielhaft)

cd /pi/docker-compose/npm
nano Dockerfile

Inhalt der Dockerfile
FROM jc21/nginx-proxy-manager:latest
RUN apt-get update \
        && apt-get install -y --no-install-recommends wget curl python3-dev \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/*
RUN wget https://go.dev/dl/go1.25.4.linux-arm64.tar.gz
RUN tar -xzf go1.25.4.linux-arm64.tar.gz -C /usr/local && rm -f go1.25.4.linux-arm64.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"

nano docker-compose.yml

Inhalt docker-compose.yml
---
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile

...........

Wichtig ist image: wird durch
build:
context: .
dockerfile: Dockerfile

ersetzt
anschließend folgender Befehl
docker compose down && docker compose build && docker compose up -d
und dann kannst du anschließend :slight_smile: dns-multi nutzen

ansonsten solltest du Probleme haben :slight_smile:
stelle deine dockercompose yml bereit und dann schreibe ich sie dir so wie es sein muss :slight_smile:
ggf. auch Pfad wo diese liegt etc.

@Nasglas Danke.

Hier meine Docker Compose:
services:
app:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
container_name: nginx-proxy-manager
ports:
# These ports are in format :
- 80:80 # Public HTTP Port
- 443:443 # Public HTTPS Port
- 81:81 # Admin Web Port
# Add any other Stream port you want to expose
# - ‚21:21‘ # FTP
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: ‚true‘
environment:
TZ:Europe/Berlin
volumes:
- /opt/nginx/data:/data
- /opt/nginx/letsencrypt:/etc/letsencrypt

In /opt/nginx habe ich die compose.yaml abgelegt.

Alles klar
dann vermute ich mal das deine compose datei auch irgendwo da liegt ?
also docker-compose.yml liegt unter /opt/nginx/

/opt/nginx/docker-compose.yml
---
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    container_name: nginx-proxy-manager
    healthcheck:
      test: ["CMD", "/bin/check-health"]
      interval: 10s
      timeout: 3s
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port

    environment:
      TZ: Europe/Berlin
    volumes:
      - /opt/nginx/data:/data
      - /opt/nginx/letsencrypt:/etc/letsencrypt
/opt/nginx/Dockerfile
FROM jc21/nginx-proxy-manager:latest
RUN apt-get update \
        && apt-get install -y --no-install-recommends wget curl python3-dev \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/*
RUN wget https://go.dev/dl/go1.25.4.linux-arm64.tar.gz
RUN tar -xzf go1.25.4.linux-arm64.tar.gz -C /usr/local && rm -f go1.25.4.linux-arm64.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"

dann einfach folgende Reihenfolge an Befehlen
docker pull jc21/nginx-proxy-manager:latest
docker compose down (wenn der container noch läuft)
docker compose build
docker compose up -d

das sollte es schon gewesen sein :slight_smile:

okay, danke
probiere ich aus

ich hoffe es klappt (: da ich das so nutze

Wenn ich
sudo docker compose build
ausführe, erhalte ich folgenden Fehler:
yaml: line 21: did not find expected key

So das Zertifikat konnte jetzt erstellt werden.
Und die HTTPS-Seite von NGINX funktioniert z.B. auch.

Nur meldet sich jetzt die Fritz!Box mit einem DNS-Rebind-Schutz.

Ich dachte es reicht, die neue Domain bei Phiole einzutragen.

Jetzt bekomme ich für drei angelegten Services immer einen „Diese Verbindung ist nicht privat“ Fehler und wenn ich dann auf ignorieren klicke, einen DNS-Rebind-Schutz-Fehler der FritzBox.

Trage ich die Domains aber in Phiole und in der FritzBox bei Rebind Schutz ein, lade ich immer auf der FritzBox.

oh :-X hoffe du konntest den Fehler Lösen weil leider nicht mehr weis wo der Fehler war :frowning:
wenn ja was war da falsch ?
hatte es eigentlich von meiner kopiert

Frage ist wie du das ganze bereitstellen tut ?

machst du Port Weiterleitungen ?
Du müsstest eine URL von der Fritzbox bekommen haben
mit dieser kannst du ein Cname setzen

bedeutet
pi.myfritz.net (o.ä.) leitet auf 443 und 80 auf den Pi weiter
dann musst du bei IPv64 ein Cname auf diese Domain setzen
anderes würde es meines Erachtens nicht funktionieren.

Ich habe den IPV64 DynDNS gelöscht. jetzt ist nur noch die Domain registriert.

Pi-hole leitet meine https://meine.domain.de dann an den Docker Host weiter.

ok, aber mich wundert es dennoch mit dem Dockerfile wieso das bei dir nicht ging

Habe doch geschrieben, dass der Container und Zertifikat jetzt erstellt werden konnte.

Muss ich überhaupt die IPV64 Domain als DynDNS Account an meinem Netzwerk hinterlegen?

Und noch eine viel wichtigere Frage: Wo sehe ich die Laufzeit des SSL-Zertifikates?
Möchte ja nur zur Erneuerung die Ports 80 und 443 immer frei geben. Muss mir dann dafür aber eine Erinnerung setzen.

Hast Du da Tipps oder Erfahrungen die Du mit uns teilen kannst @Nasglas ?

beim Nginx Proxy Manager siehst du es im SSL Certificate Tab :slight_smile:

image

hier am 6.1.26

Okay, danke.
Du machst dann dazwischen Deine Ports zu, aber lässt den DynDNS Eintrag in der FritzBox bestehen?

Ich frage deshalb, weil die Seite service.meine.domain.de ja im Internet für jeden erreichbar ist.
Was ist da eine sichere Lösung?
Ein Zugnagsprofil in Nginx Proxy Manager anlegen, der den Zugriff aus dem Internet abweist?
Oder nach der Erstellung von *.meine.domain.de die Ports 80 und 443 bis zur Zertifikatserneuerung schließen?