1. The problem I’m having:
I’m no longer able to automatically get a new SSL cert for my subdomains using DNS-01 challenge with Cloudflare.
Caddy can’t place the DNS txt file in Cloudflare DNS. I’m can place it manually using my Cloudflare API Token and CURL on a shell from inside my docker container. The API token is available as an env variable within the docker container. I’ve tried resetting my API token. The token has the following settings:
- Zone - Zone - Read
- Zone - DNS - Edit
- Include - Specific Zone - mydomain
I’m unsure if this is related, my subdomains are (by design) somewhat accessible outside my network through a Cloudflare tunnel. When inside my network, my router hijacks mydomain’s DNS and points it to the server running Caddy.
~$ curl -vL nextcloud.mydomain
* Host nextcloud.mydomain:80 was resolved.
* IPv6: (none)
* IPv4: 192.168.1.229
* Trying 192.168.1.229:80...
* Connected to nextcloud.mydomain (192.168.1.229) port 80
> GET / HTTP/1.1
> Host: nextcloud.mydomain
> User-Agent: curl/8.9.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 308 Permanent Redirect
< Connection: close
< Location: https://nextcloud.mydomain/
< Server: Caddy
< Date: Tue, 20 May 2025 19:26:34 GMT
< Content-Length: 0
<
* shutting down connection #0
* Clear auth, redirects to port from 80 to 443
* Issue another request to this URL: 'https://nextcloud.mydomain/'
* Host nextcloud.mydomain:443 was resolved.
* IPv6: (none)
* IPv4: 192.168.1.229
* Trying 192.168.1.229:443...
* Connected to nextcloud.mydomain (192.168.1.229) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /home/aryeh/anaconda3/ssl/cacert.pem
* CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (OUT), TLS alert, certificate expired (557):
* SSL certificate problem: certificate has expired
* closing connection #1
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the webpage mentioned above.
2. Error messages and/or full log output:
caddy-caddy-1 | {"level":"debug","ts":1747768586.8816273,"msg":"http request","method":"POST","url":"https://acme-v02.api.letsencrypt.org/acme/authz/2012260467/523283614547","headers":{"Content-Type":["application/jose+json"],"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Boulder-Requester":["2012260467"],"Cache-Control":["public, max-age=0, no-cache"],"Content-Length":["838"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:26 GMT"],"Link":["<https://acme-v02.api.letsencrypt.org/directory>;rel=\"index\""],"Replay-Nonce":["4zqsHs_ShJNXQL-n3qtXN6TLV6SrJsg-pGrKnEUaSNUwmMTX7nk"],"Server":["nginx"],"Strict-Transport-Security":["max-age=604800"],"X-Frame-Options":["DENY"]},"status_code":200}
caddy-caddy-1 | {"level":"error","ts":1747768586.881801,"logger":"tls.renew","msg":"could not get certificate from issuer","identifier":"librespeed.mydomain","issuer":"acme-v02.api.letsencrypt.org-directory","error":"[librespeed.mydomain] solving challenges: presenting for challenge: adding temporary record for zone \"net.\": expected 1 zone, got 0 for net. (order=https://acme-v02.api.letsencrypt.org/acme/order/2012260467/386039220147) (ca=https://acme-v02.api.letsencrypt.org/directory)"}
caddy-caddy-1 | {"level":"debug","ts":1747768586.8820987,"logger":"tls.issuance.acme","msg":"using existing ACME account because key found in storage associated with email","email":"myemail","ca":"https://acme.zerossl.com/v2/DV90"}
caddy-caddy-1 | {"level":"info","ts":1747768586.882133,"logger":"tls.issuance.acme","msg":"waiting on internal rate limiter","identifiers":["librespeed.mydomain"],"ca":"https://acme.zerossl.com/v2/DV90","account":"myemail"}
caddy-caddy-1 | {"level":"info","ts":1747768586.8821466,"logger":"tls.issuance.acme","msg":"done waiting on internal rate limiter","identifiers":["librespeed.mydomain"],"ca":"https://acme.zerossl.com/v2/DV90","account":"myemail"}
caddy-caddy-1 | {"level":"info","ts":1747768586.8821619,"logger":"tls.issuance.acme","msg":"using ACME account","account_id":"https://acme.zerossl.com/v2/DV90/account/wEyCKX3IJIqlInBE2rOcKQ","account_contact":["mailto:myemail"]}
caddy-caddy-1 | {"level":"debug","ts":1747768587.3721623,"msg":"http request","method":"GET","url":"https://acme.zerossl.com/v2/DV90","headers":{"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Access-Control-Allow-Origin":["*"],"Content-Length":["712"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:27 GMT"],"Server":["nginx"],"Strict-Transport-Security":["max-age=15724800; includeSubDomains"]},"status_code":200}
caddy-caddy-1 | {"level":"debug","ts":1747768587.3725502,"msg":"creating order","account":"https://acme.zerossl.com/v2/DV90/account/wEyCKX3IJIqlInBE2rOcKQ","identifiers":["librespeed.mydomain"]}
caddy-caddy-1 | {"level":"error","ts":1747768587.4968185,"msg":"cleaning up solver","identifier":"nextcloud.mydomain","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.nextcloud.mydomain\" (usually OK if presenting also failed)","stacktrace":"github.com/mholt/acmez/v3.(*Client).solveChallenges.func1\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:318\ngithub.com/mholt/acmez/v3.(*Client).solveChallenges\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:363\ngithub.com/mholt/acmez/v3.(*Client).ObtainCertificate\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:136\ngithub.com/caddyserver/certmagic.(*ACMEIssuer).doIssue\n\tgithub.com/caddyserver/certmagic@v0.23.0/acmeissuer.go:489\ngithub.com/caddyserver/certmagic.(*ACMEIssuer).Issue\n\tgithub.com/caddyserver/certmagic@v0.23.0/acmeissuer.go:382\ngithub.com/caddyserver/caddy/v2/modules/caddytls.(*ACMEIssuer).Issue\n\tgithub.com/caddyserver/caddy/v2@v2.10.0/modules/caddytls/acmeissuer.go:288\ngithub.com/caddyserver/certmagic.(*Config).renewCert.func2\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:906\ngithub.com/caddyserver/certmagic.doWithRetry\n\tgithub.com/caddyserver/certmagic@v0.23.0/async.go:104\ngithub.com/caddyserver/certmagic.(*Config).renewCert\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:982\ngithub.com/caddyserver/certmagic.(*Config).RenewCertAsync\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:768\ngithub.com/caddyserver/certmagic.(*Config).manageOne.func2\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:469\ngithub.com/caddyserver/certmagic.(*jobManager).worker\n\tgithub.com/caddyserver/certmagic@v0.23.0/async.go:73"}
caddy-caddy-1 | {"level":"debug","ts":1747768587.7227437,"msg":"http request","method":"POST","url":"https://acme-v02.api.letsencrypt.org/acme/authz/2012260467/523283614827","headers":{"Content-Type":["application/jose+json"],"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Boulder-Requester":["2012260467"],"Cache-Control":["public, max-age=0, no-cache"],"Content-Length":["837"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:27 GMT"],"Link":["<https://acme-v02.api.letsencrypt.org/directory>;rel=\"index\""],"Replay-Nonce":["4zqsHs_Suje7T1zaMHK3Bh9wbnZtslmfY58_Dy_ZX7UIZcW8uAo"],"Server":["nginx"],"Strict-Transport-Security":["max-age=604800"],"X-Frame-Options":["DENY"]},"status_code":200}
caddy-caddy-1 | {"level":"error","ts":1747768587.7235277,"logger":"tls.renew","msg":"could not get certificate from issuer","identifier":"nextcloud.mydomain","issuer":"acme-v02.api.letsencrypt.org-directory","error":"[nextcloud.mydomain] solving challenges: presenting for challenge: adding temporary record for zone \"net.\": expected 1 zone, got 0 for net. (order=https://acme-v02.api.letsencrypt.org/acme/order/2012260467/386039220307) (ca=https://acme-v02.api.letsencrypt.org/directory)"}
caddy-caddy-1 | {"level":"debug","ts":1747768587.7250264,"logger":"tls.issuance.acme","msg":"using existing ACME account because key found in storage associated with email","email":"myemail","ca":"https://acme.zerossl.com/v2/DV90"}
caddy-caddy-1 | {"level":"info","ts":1747768587.7251,"logger":"tls.issuance.acme","msg":"waiting on internal rate limiter","identifiers":["nextcloud.mydomain"],"ca":"https://acme.zerossl.com/v2/DV90","account":"myemail"}
caddy-caddy-1 | {"level":"info","ts":1747768587.725189,"logger":"tls.issuance.acme","msg":"done waiting on internal rate limiter","identifiers":["nextcloud.mydomain"],"ca":"https://acme.zerossl.com/v2/DV90","account":"myemail"}
caddy-caddy-1 | {"level":"info","ts":1747768587.7252839,"logger":"tls.issuance.acme","msg":"using ACME account","account_id":"https://acme.zerossl.com/v2/DV90/account/wEyCKX3IJIqlInBE2rOcKQ","account_contact":["mailto:myemail"]}
caddy-caddy-1 | {"level":"debug","ts":1747768587.7253804,"msg":"creating order","account":"https://acme.zerossl.com/v2/DV90/account/wEyCKX3IJIqlInBE2rOcKQ","identifiers":["nextcloud.mydomain"]}
caddy-caddy-1 | {"level":"debug","ts":1747768587.8064494,"msg":"http request","method":"HEAD","url":"https://acme.zerossl.com/v2/DV90/newNonce","headers":{"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, no-cache, no-store"],"Content-Type":["application/octet-stream"],"Date":["Tue, 20 May 2025 19:16:27 GMT"],"Link":["<https://acme.zerossl.com/v2/DV90>;rel=\"index\""],"Replay-Nonce":["qCVEOcIxt67iamvbaEgMVybBMbnYukUPFriZLbXTkYc"],"Server":["nginx"],"Strict-Transport-Security":["max-age=15724800; includeSubDomains"]},"status_code":200}
caddy-caddy-1 | {"level":"debug","ts":1747768588.0764358,"msg":"http request","method":"HEAD","url":"https://acme.zerossl.com/v2/DV90/newNonce","headers":{"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, no-cache, no-store"],"Content-Type":["application/octet-stream"],"Date":["Tue, 20 May 2025 19:16:28 GMT"],"Link":["<https://acme.zerossl.com/v2/DV90>;rel=\"index\""],"Replay-Nonce":["8B8qs2816G-FSWK5oDvqjMZIjG_R3RD_6GhtwfNDhWc"],"Server":["nginx"],"Strict-Transport-Security":["max-age=15724800; includeSubDomains"]},"status_code":200}
caddy-caddy-1 | {"level":"debug","ts":1747768588.24618,"msg":"http request","method":"POST","url":"https://acme.zerossl.com/v2/DV90/newOrder","headers":{"Content-Type":["application/jose+json"],"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, no-cache, no-store"],"Content-Length":["288"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:28 GMT"],"Location":["https://acme.zerossl.com/v2/DV90/order/5FM2QWiHtanwFGXquouqqg"],"Replay-Nonce":["xGJCpfUVeJSNsb5uNFMiS5W8ynHUcO5p9HY5Fii2WTg"],"Server":["nginx"],"Strict-Transport-Security":["max-age=15724800; includeSubDomains"]},"status_code":201}
caddy-caddy-1 | {"level":"error","ts":1747768588.2679534,"msg":"cleaning up solver","identifier":"jellyfin.mydomain","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.jellyfin.mydomain\" (usually OK if presenting also failed)","stacktrace":"github.com/mholt/acmez/v3.(*Client).solveChallenges.func1\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:318\ngithub.com/mholt/acmez/v3.(*Client).solveChallenges\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:363\ngithub.com/mholt/acmez/v3.(*Client).ObtainCertificate\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:136\ngithub.com/caddyserver/certmagic.(*ACMEIssuer).doIssue\n\tgithub.com/caddyserver/certmagic@v0.23.0/acmeissuer.go:489\ngithub.com/caddyserver/certmagic.(*ACMEIssuer).Issue\n\tgithub.com/caddyserver/certmagic@v0.23.0/acmeissuer.go:382\ngithub.com/caddyserver/caddy/v2/modules/caddytls.(*ACMEIssuer).Issue\n\tgithub.com/caddyserver/caddy/v2@v2.10.0/modules/caddytls/acmeissuer.go:288\ngithub.com/caddyserver/certmagic.(*Config).renewCert.func2\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:906\ngithub.com/caddyserver/certmagic.doWithRetry\n\tgithub.com/caddyserver/certmagic@v0.23.0/async.go:104\ngithub.com/caddyserver/certmagic.(*Config).renewCert\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:982\ngithub.com/caddyserver/certmagic.(*Config).RenewCertAsync\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:768\ngithub.com/caddyserver/certmagic.(*Config).manageOne.func2\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:469\ngithub.com/caddyserver/certmagic.(*jobManager).worker\n\tgithub.com/caddyserver/certmagic@v0.23.0/async.go:73"}
caddy-caddy-1 | {"level":"debug","ts":1747768588.5188699,"msg":"http request","method":"POST","url":"https://acme-v02.api.letsencrypt.org/acme/authz/2012260467/523283615317","headers":{"Content-Type":["application/jose+json"],"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Boulder-Requester":["2012260467"],"Cache-Control":["public, max-age=0, no-cache"],"Content-Length":["836"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:28 GMT"],"Link":["<https://acme-v02.api.letsencrypt.org/directory>;rel=\"index\""],"Replay-Nonce":["4zqsHs_SPWWBA0Rrdv51GTjnBZl6nhjsCVH27Y3q1IaxKe1ZGBo"],"Server":["nginx"],"Strict-Transport-Security":["max-age=604800"],"X-Frame-Options":["DENY"]},"status_code":200}
caddy-caddy-1 | {"level":"error","ts":1747768588.5191581,"logger":"tls.renew","msg":"could not get certificate from issuer","identifier":"jellyfin.mydomain","issuer":"acme-v02.api.letsencrypt.org-directory","error":"[jellyfin.mydomain] solving challenges: presenting for challenge: adding temporary record for zone \"net.\": expected 1 zone, got 0 for net. (order=https://acme-v02.api.letsencrypt.org/acme/order/2012260467/386039220517) (ca=https://acme-v02.api.letsencrypt.org/directory)"}
caddy-caddy-1 | {"level":"debug","ts":1747768588.5197053,"logger":"tls.issuance.acme","msg":"using existing ACME account because key found in storage associated with email","email":"myemail","ca":"https://acme.zerossl.com/v2/DV90"}
caddy-caddy-1 | {"level":"info","ts":1747768588.519732,"logger":"tls.issuance.acme","msg":"waiting on internal rate limiter","identifiers":["jellyfin.mydomain"],"ca":"https://acme.zerossl.com/v2/DV90","account":"myemail"}
caddy-caddy-1 | {"level":"info","ts":1747768588.5197532,"logger":"tls.issuance.acme","msg":"done waiting on internal rate limiter","identifiers":["jellyfin.mydomain"],"ca":"https://acme.zerossl.com/v2/DV90","account":"myemail"}
caddy-caddy-1 | {"level":"info","ts":1747768588.5198073,"logger":"tls.issuance.acme","msg":"using ACME account","account_id":"https://acme.zerossl.com/v2/DV90/account/wEyCKX3IJIqlInBE2rOcKQ","account_contact":["mailto:myemail"]}
caddy-caddy-1 | {"level":"debug","ts":1747768588.519838,"msg":"creating order","account":"https://acme.zerossl.com/v2/DV90/account/wEyCKX3IJIqlInBE2rOcKQ","identifiers":["jellyfin.mydomain"]}
caddy-caddy-1 | {"level":"debug","ts":1747768588.622715,"msg":"http request","method":"POST","url":"https://acme.zerossl.com/v2/DV90/newOrder","headers":{"Content-Type":["application/jose+json"],"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, no-cache, no-store"],"Content-Length":["287"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:28 GMT"],"Location":["https://acme.zerossl.com/v2/DV90/order/333cy7zHZa1RCcnxdm808g"],"Replay-Nonce":["niEBqEx3_45dXYhYKpIgR85gvhz1GiKXy7W55cdruEc"],"Server":["nginx"],"Strict-Transport-Security":["max-age=15724800; includeSubDomains"]},"status_code":201}
caddy-caddy-1 | {"level":"error","ts":1747768589.1523464,"msg":"cleaning up solver","identifier":"immich.mydomain","challenge_type":"dns-01","error":"no memory of presenting a DNS record for \"_acme-challenge.immich.mydomain\" (usually OK if presenting also failed)","stacktrace":"github.com/mholt/acmez/v3.(*Client).solveChallenges.func1\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:318\ngithub.com/mholt/acmez/v3.(*Client).solveChallenges\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:363\ngithub.com/mholt/acmez/v3.(*Client).ObtainCertificate\n\tgithub.com/mholt/acmez/v3@v3.1.2/client.go:136\ngithub.com/caddyserver/certmagic.(*ACMEIssuer).doIssue\n\tgithub.com/caddyserver/certmagic@v0.23.0/acmeissuer.go:489\ngithub.com/caddyserver/certmagic.(*ACMEIssuer).Issue\n\tgithub.com/caddyserver/certmagic@v0.23.0/acmeissuer.go:382\ngithub.com/caddyserver/caddy/v2/modules/caddytls.(*ACMEIssuer).Issue\n\tgithub.com/caddyserver/caddy/v2@v2.10.0/modules/caddytls/acmeissuer.go:288\ngithub.com/caddyserver/certmagic.(*Config).renewCert.func2\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:906\ngithub.com/caddyserver/certmagic.doWithRetry\n\tgithub.com/caddyserver/certmagic@v0.23.0/async.go:104\ngithub.com/caddyserver/certmagic.(*Config).renewCert\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:982\ngithub.com/caddyserver/certmagic.(*Config).RenewCertAsync\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:768\ngithub.com/caddyserver/certmagic.(*Config).manageOne.func2\n\tgithub.com/caddyserver/certmagic@v0.23.0/config.go:469\ngithub.com/caddyserver/certmagic.(*jobManager).worker\n\tgithub.com/caddyserver/certmagic@v0.23.0/async.go:73"}
caddy-caddy-1 | {"level":"debug","ts":1747768589.1909342,"msg":"http request","method":"POST","url":"https://acme.zerossl.com/v2/DV90/authz/ZDG9ofTjmGVX1aMQPM64sg","headers":{"Content-Type":["application/jose+json"],"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["max-age=0, no-cache, no-store"],"Content-Length":["455"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:29 GMT"],"Link":["<https://acme.zerossl.com/v2/DV90>;rel=\"index\""],"Replay-Nonce":["2NcD_cU5iYotWZ4xLrawhWA0vpgT7s1WhjiEcwUbwa4"],"Retry-After":["5"],"Server":["nginx"],"Strict-Transport-Security":["max-age=15724800; includeSubDomains"]},"status_code":200}
caddy-caddy-1 | {"level":"info","ts":1747768589.1915176,"msg":"trying to solve challenge","identifier":"nextcloud.mydomain","challenge_type":"dns-01","ca":"https://acme.zerossl.com/v2/DV90"}
caddy-caddy-1 | {"level":"debug","ts":1747768589.422083,"msg":"http request","method":"POST","url":"https://acme-v02.api.letsencrypt.org/acme/authz/2012260467/523283615597","headers":{"Content-Type":["application/jose+json"],"User-Agent":["Caddy/2.10.0 CertMagic acmez (linux; amd64)"]},"response_headers":{"Boulder-Requester":["2012260467"],"Cache-Control":["public, max-age=0, no-cache"],"Content-Length":["834"],"Content-Type":["application/json"],"Date":["Tue, 20 May 2025 19:16:29 GMT"],"Link":["<https://acme-v02.api.letsencrypt.org/directory>;rel=\"index\""],"Replay-Nonce":["NySGY0K7A5JK-JohhS8MWi3-jvMu91JUNZSo6_FiQtt9mDysVbE"],"Server":["nginx"],"Strict-Transport-Security":["max-age=604800"],"X-Frame-Options":["DENY"]},"status_code":200}
caddy-caddy-1 | {"level":"error","ts":1747768589.4227195,"logger":"tls.renew","msg":"could not get certificate from issuer","identifier":"immich.mydomain","issuer":"acme-v02.api.letsencrypt.org-directory","error":"[immich.mydomain] solving challenges: presenting for challenge: adding temporary record for zone \"net.\": expected 1 zone, got 0 for net. (order=https://acme-v02.api.letsencrypt.org/acme/order/2012260467/386039220807) (ca=https://acme-v02.api.letsencrypt.org/directory)"}
caddy-caddy-1 | {"level":"debug","ts":1747768589.4242842,"logger":"tls.issuance.acme","msg":"using existing ACME account because key found in storage associated with email","email":"myemail","ca":"https://acme.zerossl.com/v2/DV90"}
3. Caddy version:
docker compose exec caddy caddy version
v2.10.0 h1:fonubSaQKF1YANl8TXqGcn4IbIRUDdfAkpcsfI/vX5U=
4. How I installed and ran Caddy:
a. System environment:
Ubuntu 22.04 Server
Intel
docker version
Client: Docker Engine - Community
Version: 28.1.1
API version: 1.49
Go version: go1.23.8
Git commit: 4eba377
Built: Fri Apr 18 09:52:10 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 28.1.1
API version: 1.49 (minimum version 1.24)
Go version: go1.23.8
Git commit: 01f442b
Built: Fri Apr 18 09:52:10 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.27
GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4da
runc:
Version: 1.2.5
GitCommit: v1.2.5-0-g59923ef
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker compose version
Docker Compose version v2.18.1
b. Command:
docker compose up -d
c. Service/unit/compose file:
services:
caddy:
image: ghcr.io/caddybuilds/caddy-cloudflare:latest
restart: unless-stopped
cap_add:
- NET_ADMIN
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- $PWD/Caddyfile:/etc/caddy/Caddyfile
- $PWD/site:/srv
- caddy_data:/data
- caddy_config:/config
environment:
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
networks:
- net
volumes:
caddy_data:
external: true
caddy_config:
networks:
net:
external: true
d. My complete Caddy config:
Caddyfile
{
email myemail
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
debug
}
nextcloud.mydomain {
reverse_proxy nextcloud-app-1:80
}
immich.mydomain {
reverse_proxy immich_server:2283
}
gitea.mydomain {
reverse_proxy gitea:3000
}
kuma.mydomain {
reverse_proxy uptime-kuma:3001
}
librespeed.mydomain {
reverse_proxy librespeed:80
}
ha.mydomain {
reverse_proxy 192.168.1.105:8123
}
jellyfin.mydomain {
reverse_proxy jellyfin:8096
}