Lets Encrypt Zertifikate über acme.sh

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Du kannst das Zertifikat auch über den Taskplaner erneuern lassen weil den hat die DS ja integriert läuft bei mir so weil mit docker hatte ich immer probleme
 
Also ich finde acme.sh in Docker läuft super. Notfalls kann man auch eigene Scripte über den Aufgabenplaner der DS darüber einbinden, z.B. mit "docker exec neilpang-acme.sh1 /acme.sh/acme_renew.sh" o.ä,, was ich brauche um das Zertifikat auch an mehrere DSen zu deployen. acme.sh-nativ kann m.W. nur einen Deploy.
 
Also ich finde acme.sh in Docker läuft super. Notfalls kann man auch eigene Scripte über den Aufgabenplaner der DS darüber einbinden, z.B. mit "docker exec neilpang-acme.sh1 /acme.sh/acme_renew.sh" o.ä,, was ich brauche um das Zertifikat auch an mehrere DSen zu deployen. acme.sh-nativ kann m.W. nur einen Deploy.
Genau das meinte ich eigentlich nur du hast besser erklärt xD 😆
 
Jetzt überfordert ihr mich... ich habe das mit acme.sh in Docker meiner DS720+ mühsam hingefrikelt, dass es läuft. Leider schon alles wieder vergessen, weil halt keine tägliche Angelegenheit.

Aktuell habe ich das Zertifikat von der DS720+ händisch exportiert (privkey.pem, chain.pem, cert.pem) und auf der DS214 importiert... diesen Vorgang gilt es zu automatisieren, aber ich denke so meint ihr das nicht, bzw. so geht es nicht.

Muss ich bei der DS214 auch das acme Skript auch installieren und eine Aufgabe im Planer erstellen... d.h. technisch geht der gleiche Vorgang dort vonstatten und ein weiteres Wildcard-Zertifikat für die DS214 wird erzeugt... oder wird das vorhandene Zertifikat auf der DS720+ mit dem Aufgabenplaner auf die die DS214 geschoben? Wenn ja, wie geht das mit acme?

Ich stehe leider total auf dem Schlauch, was ich nun wo tun muss - und weiß nicht wo und wie ich anfangen muss 😐😣 Bitte Hilfe.
 
Muss ich bei der DS214 auch das acme Skript auch installieren und eine Aufgabe im Planer erstellen
Nein du musst nur auf der DS720+, wo acme.sh läuft, das Zertifikat einmalig zur D214 "deployen". acme.sh merkt sich das und macht es dann jedes Mal mit.

Im Kern geht das so:
Code:
DOMAIN=example.com
export SYNO_Username="deinadminuser"
export SYNO_Password="seinpasswort"
export SYNO_Certificate="*.$DOMAIN"
export SYNO_Hostname="DS214"
echo "Deploying $SYNO_Certificate to $SYNO_Hostname ..."
~/.acme.sh/acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
 
Aktuell sieht meine account.conf auf der DS720+ wie folgt aus...

Code:
export HETZNER_Token="token-xxx"
export SYNO_Username="acme_admin"
export SYNO_Password="passwort-xxx"
export SYNO_Certificate="Let's Encrypt meinedomain.de"
export SYNO_Scheme="http"
export SYNO_Port="5000"
export SYNO_Hostname="localhost"
export SYNO_Create="1"
DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'
AUTO_UPGRADE='1'
SAVED_HETZNER_Token='token-xxx'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
UPGRADE_HASH='52e051bb028180(xxxxx)'

Das ist also der lokale Deploy auf der DS720+, der jetzt für einen zusätzlichen Deploy auf die DS214 angepasst werden muss...
Zunächst wird es einen acme_admin mit demselben Passwort und ohne weitere Rechte auf der DS214 brauchen, richtig?

Code:
DOMAIN=meinedomain.de
export HETZNER_Token="token-xxx"
export SYNO_Username="acme_admin"
export SYNO_Password="passwort-xxx"
export SYNO_Certificate="*.$DOMAIN"
echo "Deploying $DOMAIN ..."
export SYNO_Scheme="http"
export SYNO_Port="5000"
export SYNO_Create="1"

export SYNO_Hostname="DS720plus"
echo "Deploying $SYNO_Certificate to $SYNO_Hostname ..."
acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
export SYNO_Hostname="DS214"
echo "Deploying $SYNO_Certificate to $SYNO_Hostname ..."
acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm

DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'
AUTO_UPGRADE='1'
SAVED_HETZNER_Token='token-xxx'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
UPGRADE_HASH='52e051bb028180(xxxxx)'

Kannst du das bitte mal überfliegen, ob es passt - auch von der Reihenfolge?
Wenn ja, was muss ich tun außer die Datei account.conf speichern?
 
Was zeigt dein 2. Code-Block, etwa eine angepasste account.conf? Nein, du brauchst ein richtiges Script, die account.conf enthält nur Env-Variablen

zum Bsp. acme_renew.sh, dass ich unter /volume1/docker/acme mit dazu gelegt habe
Code:
#!/bin/sh
export DOMAIN=example.com
export SYNO_CERTIFICATE="*.$DOMAIN"
acme.sh --renew "$@" -d $DOMAIN -d *.$DOMAIN --dns dns_netcup --dnssleep 900
status=$?
if [ $status -eq 0 ]; then
  echo "Deploying $DOMAIN ..."
  export SYNO_HOSTNAME="DS1522"
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
  export SYNO_HOSTNAME="DS415"
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
else
  echo "Renew of $DOMAIN failed"
fi
Die anderen Daten nimmt er sich aus den ENVs der account.conf

Mit "docker exec neilpang-acme.sh1 /acme.sh/acme_renew.sh" lässt sich das auch recht einfach im Aufgabenplaner des DSM schedulen.
 
Was zeigt dein 2. Code-Block, etwa eine angepasste account.conf? Nein, du brauchst ein richtiges Script, die account.conf enthält nur Env-Variablen
Ja, ich dachte ich muss die account.conf anpassen.

Ich bin nicht so bewandert im Thema und ggf. auch etwas schwer von Begriff, was genau zu tun ist. Deshalb bitte nicht zu viel Transferwissen bei mir voraus setzen.

Ich wiederhole nochmal:
  1. Neuen acme_admin User (selbes Passwort wie DS720+) auf DS214 anlegen.
  2. Meine account.conf kann ich so lassen, wie sie ist (siehe oben Posting #47; 1. Codeblock) - oder da was verändern/anpassen? Das wäre der lokale Deploy auf localhost; hab ich das richtig verstanden?
  3. Neue Datei unter /volume1/docker/acme/meinedomain.de/acme_renew.sh anlegen, Inhalt siehe unten. Das wär der Remote Deploy auf DS214? Oder brauchts da den Deploy auf DS720+ nochmal zusätzlich?
  4. Neue geplante Aufgabe > Benutzerdefiniertes Skript in DS720+ erstellen, Ausführen als root mit Befehl "docker exec neilpang-acme.sh1 /acme.sh/acme_renew.sh" << Pfad wirklich so lassen - oder irgendwie anpassen? Auf was muss ich achten?
  5. Und dann...? Aufgabe mal manuell ausführen und schauen, wo was passiert... Docker neu starten? Oder wann wird das Zertifikat auf die DS214 deployed?

Code:
#!/bin/sh
export DOMAIN=meinedomain.de
export SYNO_CERTIFICATE="*.$DOMAIN"
acme.sh --renew "$@" -d $DOMAIN -d *.$DOMAIN --dns dns_hetzner
status=$?
if [ $status -eq 0 ]; then
  echo "Deploying $DOMAIN ..."
  export SYNO_HOSTNAME="DS214"
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
else
  echo "Renew of $DOMAIN failed"
fi

Zu dem Kram in der acme_renew.sh - muss der Zertifikatsname zusammenpassen, was in account.conf steht?

Wäre echt super, wenn du das für mich mal aufbereiten könntest, weil ich aktuell noch ziemlich lost bin. Danke!
 
  • Like
Reaktionen: Janüscht
Du brauchst, wie ich, 2 Deploys, einmal lokal auf der DS720+ und einmal remote zur DS214.
Alle Einstellungen User/Passwort usw. nimmt acme.sh aus der account.conf bzw. aus den Variablen, die du in deinem Script setzt bzw. änderst (SYNO_HOSTNAME z.B.)
In meinem Fall ist der User auf DS1522 und DS415 gleich, deshalb muss ich nur SYNO_HOSTNAME neu setzen. Andernfalls müsste ich auch SYNO_USERNAME und SYNO_PASSWORT im Script setzen. Prinzip verstanden?
 
Prinzip hab ich schon verstanden, trotzdem tue ich mir noch schwer was ich wo wie konfigurieren muss und wo welche Datei zu platzieren ist. Deshalb dachte ich, dass du mir vielleicht etwas detaillierter unter die Arme greifen kannst? Ich habe im Post vorher ein paar Fragen gestellt... vielleicht kannst du da bisschen drauf eingehen?
 
Das Script macht ja ein Renew und im Erfolgsfall den oder die Deploys.
Ich habe das Script unter /volume1/docker/acme/acme_renew.sh liegen, was aus Containersicht dem Verzeichnis /acme.sh entspricht, Owner ist root und Rechte 755. Achte darauf, dass an den Zeilenenden nur Linefeeds (LF) stehen, wie das Linux üblich ist. Daher z.B. Notepad++ verwenden, da lässt sich das einstellen.
Aufgabenplaner wär dann "docker exec neilpang-acme.sh1 /acme.sh/acme_renew.sh", wobei "neilpang-acme.sh1" für den Namen des Containers steht (ggf. anpassen).
Aber lass es erstmal auf der Konsole deines Containers laufen (/acme.sh/acme_renew.sh). Du kannst noch ein "--force" mitgeben, dann macht er den Renew gleich, auch wenn das Zertifikat noch länger gültig ist, ansonsten bricht er ab.

So sieht ein Testlauf dann aus
Code:
 # /acme.sh//acme_renew.sh --force                                            
[Fri Jul 11 13:42:10 UTC 2025] The domain 'meinedomain.com' seems to already have  an ECC cert, let's use it.                                                    
[Fri Jul 11 13:42:10 UTC 2025] Renewing: 'meinedomain.com'                     
[Fri Jul 11 13:42:10 UTC 2025] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory                                                            
[Fri Jul 11 13:42:11 UTC 2025] Using CA: https://acme-v02.api.letsencrypt.org/directory                                                                        
[Fri Jul 11 13:42:11 UTC 2025] Multi domain='DNS:meinedomain.com,DNS:*.meinedomain.com'                                                                          
[Fri Jul 11 13:42:13 UTC 2025] Getting webroot for domain='meinedomain.com'    
[Fri Jul 11 13:42:13 UTC 2025] Getting webroot for domain='*.meinedomain.com'  
[Fri Jul 11 13:42:13 UTC 2025] meinedomain.com is already verified, skipping dns-01.                                                                            
[Fri Jul 11 13:42:13 UTC 2025] *.meinedomain.com is already verified, skipping dns-01.                                                                          
[Fri Jul 11 13:42:13 UTC 2025] Verification finished, beginning signing.      
[Fri Jul 11 13:42:13 UTC 2025] Let's finalize the order.                      
[Fri Jul 11 13:42:13 UTC 2025] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/978755066/405358575xxx'                                    
[Fri Jul 11 13:42:16 UTC 2025] Downloading cert.                              
[Fri Jul 11 13:42:16 UTC 2025] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/06ba9dc30e9781d8940066a61f851ae7bxxx'                               
[Fri Jul 11 13:42:17 UTC 2025] Cert success.                                  
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----                                                     
[Fri Jul 11 13:42:17 UTC 2025] Your cert is in: /acme.sh/meinedomain.com_ecc/meinedomain.com.cer                                                                 
[Fri Jul 11 13:42:17 UTC 2025] Your cert key is in: /acme.sh/meinedomain.com_ecc/meinedomain.com.key                                                             
[Fri Jul 11 13:42:17 UTC 2025] The intermediate CA cert is in: /acme.sh/meinedomain.com_ecc/ca.cer                                                              
[Fri Jul 11 13:42:17 UTC 2025] And the full-chain cert is in: /acme.sh/meinedomain.com_ecc/fullchain.cer                                                        
[Fri Jul 11 13:42:17 UTC 2025] Logging into DS415:5000...                     
[Fri Jul 11 13:42:52 UTC 2025] Getting certificates in Synology DSM...        
[Fri Jul 11 13:42:52 UTC 2025] Generating form POST request...                
[Fri Jul 11 13:42:52 UTC 2025] Upload certificate to the Synology DSM.        
[Fri Jul 11 13:43:21 UTC 2025] Restart HTTP services failed.                  
[Fri Jul 11 13:43:21 UTC 2025] Success                                        
Deploying meinedomain.com ...                                                  
Deploying *.meinedomain.com to DS1522 ...                                      
[Fri Jul 11 13:43:21 UTC 2025] The domain 'meinedomain.com' seems to already have an ECC cert, let's use it.                                                    
[Fri Jul 11 13:43:21 UTC 2025] Logging into DS1522:5000...                    
[Fri Jul 11 13:43:22 UTC 2025] Getting certificates in Synology DSM...        
[Fri Jul 11 13:43:22 UTC 2025] Generating form POST request...                
[Fri Jul 11 13:43:22 UTC 2025] Upload certificate to the Synology DSM.        
[Fri Jul 11 13:43:49 UTC 2025] Restart HTTP services failed.                  
[Fri Jul 11 13:43:49 UTC 2025] Success
Deploying *.meinedomain.com to DS415 ...                                       
[Fri Jul 11 13:43:49 UTC 2025] The domain 'meinedomain.com' seems to already have an ECC cert, let's use it.                                                    
[Fri Jul 11 13:43:49 UTC 2025] Logging into DS415:5000...                     
[Fri Jul 11 13:43:50 UTC 2025] Getting certificates in Synology DSM...        
[Fri Jul 11 13:43:50 UTC 2025] Generating form POST request...                
[Fri Jul 11 13:43:50 UTC 2025] Upload certificate to the Synology DSM.        
[Fri Jul 11 13:44:18 UTC 2025] Restart HTTP services failed.                  
[Fri Jul 11 13:44:18 UTC 2025] Success

Wunder dich nicht, dass er den Deploy zur DS415 zweimal macht. acme.sh merkt sich den letzten Deploy intern und macht den erstmal mit Erst der Deploy zur DS1522 (lokal) kommt vom Script. So, ich hoffe, das reicht dir nun als Info und ich habe keine Stelle vergessen zu anonymisieren. Der DNS-Challenge fehlt, weil mein Zertifikat bereits "verified" ist.

Edit: So sieht's ohne "--force" aus
Code:
/acme.sh # /acme.sh/acme_renew.sh                                               
[Fri Jul 11 14:08:24 UTC 2025] The domain 'meinedomain.com' seems to already have an ECC cert, let's use it.                                                      
[Fri Jul 11 14:08:24 UTC 2025] Renewing: 'meinedomain.com'                       
[Fri Jul 11 14:08:24 UTC 2025] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory                                                              
[Fri Jul 11 14:08:24 UTC 2025] Skipping. Next renewal time is: 2025-09-08T13:42:17Z                                                                              
[Fri Jul 11 14:08:24 UTC 2025] Add '--force' to force renewal.                  
Renew of meinedomain.com failed
Er bricht dann einfach ab, weil der 08.09.2025 noch nicht erreicht ist.

Edit2: Hier nochmal das Script
Code:
/acme.sh # cat acme_renew.sh                                                     
#!/bin/sh                                                                        
export DOMAIN=meinedomain.com                                                     
export SYNO_CERTIFICATE="*.$DOMAIN"                                              
acme.sh --renew "$@" -d $DOMAIN -d *.$DOMAIN --dns dns_netcup --dnssleep 900     
status=$?                                                                        
if [ $status -eq 0 ]; then                                                       
  echo "Deploying $DOMAIN ..."                                                   
  export SYNO_HOSTNAME="DS1522"                                                  
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."                       
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm            
  export SYNO_HOSTNAME="DS415"                                                   
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."                       
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm            
else                                                                             
  echo "Renew of $DOMAIN failed"                                                 
fi
Vielleicht auch noch wichtig SYNO_CERTIFICATE zeigt auf die Beschreibung (bei mir "*.meinedomain.com") des Zertifikats das deployed werden soll. Es kann am Ziel ja mehrere geben.
 
Zuletzt bearbeitet:
OK, danke erstmal. Ich versuche das heute Abend.

Eine Frage noch zum Thema der Beschreiung.
Aktuell ist in der account.conf folgende Zeile:
export SYNO_Certificate="Let's Encrypt meinedomain.info"
D.h. der Zertifikatsname ist dort quasi fest genagelt.

So ist es auch unter DSM in der zweiten Zeile zu sehen bzw. so ist es benannt.
1752244467090.png
Du gibst mit
export DOMAIN=meinedomain.com
export SYNO_CERTIFICATE="*.$DOMAIN"

in der acme_renew.sh vor, dass die Domain=meinedomain.com heißt und $DOMAIN ist einfach der Platzhalter, der dann den Wert vorher einsetzt? Habe ich das richtig verstanden? Bedeutet es, dass ich die Zeile export SYNO_Certificate="Let's Encrypt meinedomain.info" aus meiner account.conf löschen müsste?
 
Die Beschreibung der Zertifikate ist über "Bearbeiten" änderbar, bei mir ist das "*.meinedomain.com" auf beiden DSen. SYNO_CERTIFICATE muss halt gleich lauten, in deinem Fall halt "Let's Encrypt meinedomain.info".
Wenn das bei beiden DSen gleich ist, kannst es in der account.conf eintragen und im Script auskommentieren, ansonst musst du das halt im Script neu setzen. Letztendlich gilt das, was bei jedem Aufruf von acme.sh gesetzt ist, egal ob es aus der account.conf kommt oder aus dem Script. Du hast also recht, das "export SYNO_CERTIFICATE="*.$DOMAIN" im Script könnte ich mir sparen, wenn das schon in der account.conf steht.

Edit: Schau auch in die .conf-Dateien im Verzeichnis meinedomain.com_ecc rein, das merkt sich acme.sh auch einiges.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: senderversteller
Kannst du mir der Vollständigkeit halber bitte noch den anonymisierten Inhalt deiner account.conf posten? Ich denke, das würde für mein Verständnis, welche der beiden Dateien welche Informationen enthalten muss/sollte, helfen.

So wie du das aufgebaut hast (mit export DOMAIN=domainname und $DOMAIN), sieht das sehr elegant aus. So würde ich das auch gerne umbauen. Hab nur Angst, dass es mir bei der Beschreibung irgendwie einen Wurm rein bringt, wenn ich die jetzt nachträglich ändere. Dass es in DSM änderbar ist, ist eine gute Info. Ich würde die folgenden Command verwenden, dann sollte ja eigentlich nix umbekannt werden müssen:
Code:
export DOMAIN=meinedomain.info                                                 
export SYNO_CERTIFICATE="Let's Encrypt $DOMAIN"

Also - ich finde unter ..._eec in den Dateien meinedomain.info.conf und meinedomain.info.csr.conf keinen Hinweis auf die Beschreibung. Kannst du das bestätigen?

Sorry, wenn ich hier nur am Fragen bin, bevor ich es endlich mal selbst mache - aber ich will mein laufendes System damit nicht crashen.
 
Hier meine account.conf, wobei das meiste nicht von mir stammt
Code:
export NC_Apikey="MzZLOTY1Yjg0NTdtclhqQTV2UVI5ODIxdUlUQjlIbWYyxxxx"
export NC_Apipw="5g5mCnd3Rv/2YUTUZVFWEepE+lXleIy/0I8Ag0MVU8hrexxxx"
export NC_CID="201298"
export SYNO_USERNAME="nasadmin"
export SYNO_PASSWORD="seinpasswort"
export SYNO_CERTIFICATE="*.meinedomain.com"
#export SYNO_SCHEME="https"
#export SYNO_PORT="5001"
#export SYNO_HOSTNAME="DS1522"
#export SYNO_HOSTNAME="DS415"
AUTO_UPGRADE='1'
DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'
SAVED_NC_Apikey='MzZLOTY1Yjg0NTdtclhqQTV2UVI5ODIxdUlUQjlIbWYyYxxxx'
SAVED_NC_Apipw='5g5mCnd3Rv/2YUTUZVFWEepE+lXleIy/0I8Ag0MVU8hrexxxx'
SAVED_NC_CID='201298'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
UPGRADE_HASH='52e051bb028180a6778391a8310789064ce7xxxx'

Nein SYNO_CERTIFICATE steht nur in der account.conf
 
Zuletzt bearbeitet:
  • Like
Reaktionen: senderversteller
Es hat mit dem Deploy und dem Push auf beide DS geklappt. Vielen Dank @Benares 👍 👍 👍

Einzig, dass er für den Deploy auf beide DS den http/5000 verwendet hat und nicht den https/5001, wie ich es in account.conf vorgegeben habe - habe es vor dem Ausführen des Script auf https geändert. Das liegt vermutlich daran, dass er sich das in der Datei /meinedomain.info_ecc/meinedomain.info.conf vom letzten Deploy so gemerkt hat:
Code:
SAVED_SYNO_SCHEME='http'
SAVED_SYNO_HOSTNAME='DS720plus'
SAVED_SYNO_PORT='5000'

Wie regelmäßig lässt du @Benares das eigene Skript im Aufgabenplaner laufen? Stündlich, täglich, wöchentlich, monatlich?

Ich frage deshalb, weil sich das Acme-Skript im Container von selbst ohne Aufgabenplanung täglich versucht zu erneuern. Zumindest sehe ich das im Protokoll meines Containers, dass es das jede Nacht um 01:29 tut. Hier greife ich nun mit dem eigenen Renew Skript zusätzlich ein. Wenn sich nun das Acme-Skript von sich aus eine erfolgreiche Erneuerung des Zertifikat bei Let's Encrypt durchführt und einen Deploy auf die zuletzt gemerkte NAS macht, weil das Zertifikat nicht mehr so lange gültig war - und damit meinem Renew-Skript zuvor kommt, bleibt meine geplante Aufgabe ja ohne Wirkung. Im Zweifelsfall wird dann nur ein Deploy ein NAS gemacht - und zwar dahin, wo sich das Acme-Skript vom letzten Mal gemerkt hat.

Oder habe ich das falsch verstanden?

Code:
/ # /acme.sh/acme_renew.sh                                                
[Sat Jul 12 01:08:20 UTC 2025] The domain 'meinedomain.info' seems to already have a
n ECC cert, let's use it.                                                
[Sat Jul 12 01:08:20 UTC 2025] Renewing: 'meinedomain.info'                  
[Sat Jul 12 01:08:20 UTC 2025] Renewing using Le_API=https://acme-v02.api.letsenc
rypt.org/directory                                                        
[Sat Jul 12 01:08:20 UTC 2025] Skipping. Next renewal time is: 2025-09-09T00:11:5
1Z                                                                        
[Sat Jul 12 01:08:20 UTC 2025] Add '--force' to force renewal.            
Renew of meinedomain.info failed                                            
/ #
 
Zuletzt bearbeitet:
Ja, da hast du wohl Recht, da habe ich wohl einen Denkfehler drin.
Das interne acme-Script läuft ja per Cron täglich, merkt sich aber nur einen Deploy, den letzten. Einmal muss man das händisch machen.
Bei nur einem Deploy bräuchte man auch deshalb kein externes Script.

Ich lass das acme_renew-Script einmal im Monat laufen aber meist ruf ich es auch zwischendurch mal händisch mit --force auf. Ich müsste es also auch mit --force im Aufgabenplaner schedulen, damit es zum Zuge kommt, oder halt nur die Deploys machen, dafür öfter.

Für den nackten Deploy habe ich auch schon ein Script, acme_deploy.sh:
Code:
#!/bin/sh
export DOMAIN=meinedomain.com
export SYNO_CERTIFICATE="*.$DOMAIN"
echo "Deploying $DOMAIN ..."
export SYNO_HOSTNAME="DS1522"
echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
export SYNO_HOSTNAME="DS415"
echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
 
Zuletzt bearbeitet:
Aber wäre es nicht einfacher, dass
  1. Das Acme-Skript einfach seine Arbeit macht auf der DS macht, auf der auch der Container läuft, d.h. durch Cronjob tägliche Prüfung ob Zertifikat erneuert werden muss, falls nein - keine weitere Aktion, falls ja (Zertifikat muss erneuert werden), dann Deploy auf die "Haupt-DS" selbst und
  2. dein "selbstgebasteltes" nacktes Deploy-Skript, dass meinetwegen auch täglich im Aufgabenplaner läuft, z.B. eine Stunde nach dem Cronjob aus 1., nur dafür zu verwenden, dass es das aktuelle Zertifikat auf weitere Schwester-NAS gepusht/deployed wird - und im Falle von uns beiden (2 xNAS) nur die eine Schwester-NAS mit dem Script bedient wird?
Oder habe ich hier einen Logikfehler?

EDIT:
Zusammenfassung - bei mir DS720=localhost / DS214=Schwester-NAS:
account.conf
Code:
export HETZNER_Token="xxx"
export SYNO_Username="acme_admin"
export SYNO_Password="xxx"
export SYNO_Certificate="Let's Encrypt meinedomain.info"
export SYNO_Scheme="https"
export SYNO_Port="5001"
export SYNO_Hostname="localhost"
export SYNO_Create="1"
DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'

AUTO_UPGRADE='1'
SAVED_HETZNER_Token='xxx'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
UPGRADE_HASH='xxx'

acme_deploy.sh
Code:
#!/bin/sh
export DOMAIN=meinedomain.info
export SYNO_CERTIFICATE="*.$DOMAIN"
echo "Deploying $DOMAIN ..."
export SYNO_HOSTNAME="DS214"
echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm

Würde das funktionieren, oder gibt's dann ein Problem damit, was sich das Acme-Skript vom letzten Deploy merkt?
 
Zuletzt bearbeitet:
oder gibt's dann ein Problem damit, was sich das Acme-Skript vom letzten Deploy merkt?
So ist es. Da sich acme.sh das letzte Deploy merkt, würde er beim nächsten Lauf wohl nur zur DS214 deployen. Da muss man schon alle Deploy machen.
Ich weiß nicht, was "stärker" ist, die Einstellungen in der account.conf oder die SAVED_-Sachen in der anderen .conf.
Kannst ja mal probieren und berichten. Vergiss nicht, SYNO_CERTIFICATE in deinem 2. Code-Block noch anzupassen oder wegzulassen.
 

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat