mirror of
https://github.com/linuxserver/docker-swag.git
synced 2026-03-02 16:33:35 +09:00
Compare commits
32 Commits
1.31.0-ls1
...
1.32.0-ls1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1dcec348c0 | ||
|
|
5e80d765da | ||
|
|
9738646eef | ||
|
|
820e040082 | ||
|
|
588dde99ed | ||
|
|
9f88c9343b | ||
|
|
47cb0bffe3 | ||
|
|
d159fde608 | ||
|
|
263cceda4c | ||
|
|
631fe9ecc3 | ||
|
|
f2bc6b05bc | ||
|
|
3f8ac5552f | ||
|
|
a26528919c | ||
|
|
14cc464d65 | ||
|
|
4221059496 | ||
|
|
d00d2dbe95 | ||
|
|
c07939aed0 | ||
|
|
8b1311c3f1 | ||
|
|
fcffe2b169 | ||
|
|
b82c474941 | ||
|
|
56bb365cee | ||
|
|
b692c69c4d | ||
|
|
806ac9fa7f | ||
|
|
53db9755b2 | ||
|
|
3fb6e3f54d | ||
|
|
e2d02de457 | ||
|
|
51dc4ce7b2 | ||
|
|
29a1c29be3 | ||
|
|
54e817b3b4 | ||
|
|
0de67cc224 | ||
|
|
9a05528398 | ||
|
|
c79b0765df |
10
.github/workflows/external_trigger.yml
vendored
10
.github/workflows/external_trigger.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
fi
|
||||
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_SWAG_MASTER\". ****"
|
||||
echo "**** Retrieving external version ****"
|
||||
EXT_RELEASE=$(curl -sL "https://pypi.python.org/pypi/certbot/json" |jq -r '. | .info.version')
|
||||
EXT_RELEASE=$(echo '1.32.0')
|
||||
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
|
||||
echo "**** Can't retrieve external version, exiting ****"
|
||||
FAILURE_REASON="Can't retrieve external version for swag branch master"
|
||||
@@ -48,8 +48,12 @@ jobs:
|
||||
| jq -r '.config.digest')
|
||||
image_info=$(curl -sL \
|
||||
--header "Authorization: Bearer ${token}" \
|
||||
"https://ghcr.io/v2/${image}/blobs/${digest}" \
|
||||
| jq -r '.container_config')
|
||||
"https://ghcr.io/v2/${image}/blobs/${digest}")
|
||||
if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then
|
||||
image_info=$(echo $image_info | jq -r '.config')
|
||||
else
|
||||
image_info=$(echo $image_info | jq -r '.container_config')
|
||||
fi
|
||||
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
|
||||
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
|
||||
if [ -z "${IMAGE_VERSION}" ]; then
|
||||
|
||||
@@ -101,6 +101,7 @@ RUN \
|
||||
pip3 install -U \
|
||||
pip wheel && \
|
||||
pip install -U --find-links https://wheel-index.linuxserver.io/alpine-3.15/ \
|
||||
acme==${CERTBOT_VERSION} \
|
||||
${CERTBOT} \
|
||||
certbot-dns-acmedns \
|
||||
certbot-dns-aliyun \
|
||||
@@ -116,7 +117,10 @@ RUN \
|
||||
certbot-dns-dnspod \
|
||||
certbot-dns-do \
|
||||
certbot-dns-domeneshop \
|
||||
certbot-dns-duckdns \
|
||||
certbot-dns-dynu \
|
||||
certbot-dns-gehirn \
|
||||
certbot-dns-godaddy \
|
||||
certbot-dns-google \
|
||||
certbot-dns-he \
|
||||
certbot-dns-hetzner \
|
||||
@@ -130,12 +134,13 @@ RUN \
|
||||
certbot-dns-njalla \
|
||||
certbot-dns-nsone \
|
||||
certbot-dns-ovh \
|
||||
certbot-dns-porkbun \
|
||||
certbot-dns-rfc2136 \
|
||||
certbot-dns-route53 \
|
||||
certbot-dns-sakuracloud \
|
||||
certbot-dns-standalone \
|
||||
certbot-dns-transip \
|
||||
certbot-dns-vultr \
|
||||
certbot-dns-desec \
|
||||
certbot-plugin-gandi \
|
||||
cryptography \
|
||||
requests && \
|
||||
|
||||
@@ -101,6 +101,7 @@ RUN \
|
||||
pip3 install -U \
|
||||
pip wheel && \
|
||||
pip install -U --find-links https://wheel-index.linuxserver.io/alpine-3.15/ \
|
||||
acme==${CERTBOT_VERSION} \
|
||||
${CERTBOT} \
|
||||
certbot-dns-acmedns \
|
||||
certbot-dns-aliyun \
|
||||
@@ -116,7 +117,10 @@ RUN \
|
||||
certbot-dns-dnspod \
|
||||
certbot-dns-do \
|
||||
certbot-dns-domeneshop \
|
||||
certbot-dns-duckdns \
|
||||
certbot-dns-dynu \
|
||||
certbot-dns-gehirn \
|
||||
certbot-dns-godaddy \
|
||||
certbot-dns-google \
|
||||
certbot-dns-he \
|
||||
certbot-dns-hetzner \
|
||||
@@ -130,12 +134,13 @@ RUN \
|
||||
certbot-dns-njalla \
|
||||
certbot-dns-nsone \
|
||||
certbot-dns-ovh \
|
||||
certbot-dns-porkbun \
|
||||
certbot-dns-rfc2136 \
|
||||
certbot-dns-route53 \
|
||||
certbot-dns-sakuracloud \
|
||||
certbot-dns-standalone \
|
||||
certbot-dns-transip \
|
||||
certbot-dns-vultr \
|
||||
certbot-dns-desec \
|
||||
certbot-plugin-gandi \
|
||||
cryptography \
|
||||
requests && \
|
||||
|
||||
@@ -101,6 +101,7 @@ RUN \
|
||||
pip3 install -U \
|
||||
pip wheel && \
|
||||
pip install -U --find-links https://wheel-index.linuxserver.io/alpine-3.15/ \
|
||||
acme==${CERTBOT_VERSION} \
|
||||
${CERTBOT} \
|
||||
certbot-dns-acmedns \
|
||||
certbot-dns-aliyun \
|
||||
@@ -114,9 +115,12 @@ RUN \
|
||||
certbot-dns-dnsimple \
|
||||
certbot-dns-dnsmadeeasy \
|
||||
certbot-dns-dnspod \
|
||||
certbot-dns-domeneshop \
|
||||
certbot-dns-do \
|
||||
certbot-dns-domeneshop \
|
||||
certbot-dns-duckdns \
|
||||
certbot-dns-dynu \
|
||||
certbot-dns-gehirn \
|
||||
certbot-dns-godaddy \
|
||||
certbot-dns-google \
|
||||
certbot-dns-he \
|
||||
certbot-dns-hetzner \
|
||||
@@ -130,8 +134,10 @@ RUN \
|
||||
certbot-dns-njalla \
|
||||
certbot-dns-nsone \
|
||||
certbot-dns-ovh \
|
||||
certbot-dns-porkbun \
|
||||
certbot-dns-rfc2136 \
|
||||
certbot-dns-route53 \
|
||||
certbot-dns-sakuracloud \
|
||||
certbot-dns-standalone \
|
||||
certbot-dns-transip \
|
||||
certbot-dns-vultr \
|
||||
|
||||
15
Jenkinsfile
vendored
15
Jenkinsfile
vendored
@@ -100,17 +100,18 @@ pipeline {
|
||||
/* ########################
|
||||
External Release Tagging
|
||||
######################## */
|
||||
// If this is a pip release set the external tag to the pip version
|
||||
stage("Set ENV pip_version"){
|
||||
// If this is a custom command to determine version use that command
|
||||
stage("Set tag custom bash"){
|
||||
steps{
|
||||
script{
|
||||
env.EXT_RELEASE = sh(
|
||||
script: '''curl -sL https://pypi.python.org/pypi/${EXT_PIP}/json |jq -r '. | .info.version' ''',
|
||||
script: ''' echo '1.32.0' ''',
|
||||
returnStdout: true).trim()
|
||||
env.RELEASE_LINK = 'https://pypi.python.org/pypi/' + env.EXT_PIP
|
||||
env.RELEASE_LINK = 'custom_command'
|
||||
}
|
||||
}
|
||||
} // Sanitize the release tag and strip illegal docker or github characters
|
||||
}
|
||||
// Sanitize the release tag and strip illegal docker or github characters
|
||||
stage("Sanitize tag"){
|
||||
steps{
|
||||
script{
|
||||
@@ -911,11 +912,11 @@ pipeline {
|
||||
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
|
||||
echo "Pushing New release for Tag"
|
||||
sh '''#! /bin/bash
|
||||
echo "Updating PIP version of ${EXT_PIP} to ${EXT_RELEASE_CLEAN}" > releasebody.json
|
||||
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
|
||||
echo '{"tag_name":"'${META_TAG}'",\
|
||||
"target_commitish": "master",\
|
||||
"name": "'${META_TAG}'",\
|
||||
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**PIP Changes:**\\n\\n' > start
|
||||
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
|
||||
printf '","draft": false,"prerelease": false}' >> releasebody.json
|
||||
paste -d'\\0' start releasebody.json > releasebody.json.done
|
||||
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
|
||||
|
||||
26
README.md
26
README.md
@@ -63,13 +63,15 @@ The architectures supported by this image are:
|
||||
### Validation and initial setup
|
||||
|
||||
* Before running this container, make sure that the url and subdomains are properly forwarded to this container's host, and that port 443 (and/or 80) is not being used by another service on the host (NAS gui, another webserver, etc.).
|
||||
* If you need a dynamic dns provider, you can use the free provider duckdns.org where the `URL` will be `yoursubdomain.duckdns.org` and the `SUBDOMAINS` can be `www,ftp,cloud` with http validation, or `wildcard` with dns validation. You can use our [duckdns image](https://hub.docker.com/r/linuxserver/duckdns/) to update your IP on duckdns.org.
|
||||
* For `http` validation, port 80 on the internet side of the router should be forwarded to this container's port 80
|
||||
* For `dns` validation, make sure to enter your credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`
|
||||
* Cloudflare provides free accounts for managing dns and is very easy to use with this image. Make sure that it is set up for "dns only" instead of "dns + proxy"
|
||||
* Google dns plugin is meant to be used with "Google Cloud DNS", a paid enterprise product, and not for "Google Domains DNS"
|
||||
* For `duckdns` validation, either leave the `SUBDOMAINS` variable empty or set it to `wildcard`, and set the `DUCKDNSTOKEN` variable with your duckdns token. Due to a limitation of duckdns, the resulting cert will only cover either main subdomain (ie. `yoursubdomain.duckdns.org`), or sub-subdomains (ie. `*.yoursubdomain.duckdns.org`), but will not both at the same time. You can use our [duckdns image](https://hub.docker.com/r/linuxserver/duckdns/) to update your IP on duckdns.org.
|
||||
* DuckDNS only supoprts two types of DNS validated certificates (not both at the same time):
|
||||
1. Certs that only cover your main subdomain (ie. `yoursubdomain.duckdns.org`, leave the `SUBDOMAINS` variable empty)
|
||||
2. Certs that cover sub-subdomains of your main subdomain (ie. `*.yoursubdomain.duckdns.org`, set the `SUBDOMAINS` variable to `wildcard`)
|
||||
* `--cap-add=NET_ADMIN` is required for fail2ban to modify iptables
|
||||
* If you need a dynamic dns provider, you can use the free provider duckdns.org where the `URL` will be `yoursubdomain.duckdns.org` and the `SUBDOMAINS` can be `www,ftp,cloud` with http validation, or `wildcard` with dns validation.
|
||||
* After setup, navigate to `https://yourdomain.url` to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at `/config/nginx/site-confs/default.conf`).
|
||||
* Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under `/config/log/letsencrypt` to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances.
|
||||
|
||||
@@ -114,7 +116,7 @@ This will *ask* Google et al not to index and list your site. Be careful with th
|
||||
* You can check which jails are active via `docker exec -it swag fail2ban-client status`
|
||||
* You can check the status of a specific jail via `docker exec -it swag fail2ban-client status <jail name>`
|
||||
* You can unban an IP via `docker exec -it swag fail2ban-client set <jail name> unbanip <IP>`
|
||||
* A list of commands can be found here: https://www.fail2ban.org/wiki/index.php/Commands
|
||||
* A list of commands can be found here: <https://www.fail2ban.org/wiki/index.php/Commands>
|
||||
|
||||
### Updating configs
|
||||
|
||||
@@ -131,6 +133,7 @@ This will *ask* Google et al not to index and list your site. Be careful with th
|
||||
* You can check the new sample and adjust your active config as needed.
|
||||
|
||||
### Migration from the old `linuxserver/letsencrypt` image
|
||||
|
||||
Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate).
|
||||
|
||||
## Usage
|
||||
@@ -158,7 +161,6 @@ services:
|
||||
- CERTPROVIDER= #optional
|
||||
- DNSPLUGIN=cloudflare #optional
|
||||
- PROPAGATION= #optional
|
||||
- DUCKDNSTOKEN= #optional
|
||||
- EMAIL= #optional
|
||||
- ONLY_SUBDOMAINS=false #optional
|
||||
- EXTRA_DOMAINS= #optional
|
||||
@@ -186,7 +188,6 @@ docker run -d \
|
||||
-e CERTPROVIDER= `#optional` \
|
||||
-e DNSPLUGIN=cloudflare `#optional` \
|
||||
-e PROPAGATION= `#optional` \
|
||||
-e DUCKDNSTOKEN= `#optional` \
|
||||
-e EMAIL= `#optional` \
|
||||
-e ONLY_SUBDOMAINS=false `#optional` \
|
||||
-e EXTRA_DOMAINS= `#optional` \
|
||||
@@ -210,12 +211,11 @@ Container images are configured using parameters passed at runtime (such as thos
|
||||
| `-e PGID=1000` | for GroupID - see below for explanation |
|
||||
| `-e TZ=Europe/London` | Specify a timezone to use EG Europe/London. |
|
||||
| `-e URL=yourdomain.url` | Top url you have control over (`customdomain.com` if you own it, or `customsubdomain.ddnsprovider.com` if dynamic dns). |
|
||||
| `-e VALIDATION=http` | Certbot validation method to use, options are `http`, `dns` or `duckdns` (`dns` method also requires `DNSPLUGIN` variable set) (`duckdns` method requires `DUCKDNSTOKEN` variable set, and the `SUBDOMAINS` variable must be either empty or set to `wildcard`). |
|
||||
| `-e SUBDOMAINS=www,` | Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this _exactly_ to `wildcard` (wildcard cert is available via `dns` and `duckdns` validation only) |
|
||||
| `-e VALIDATION=http` | Certbot validation method to use, options are `http` or `dns` (`dns` method also requires `DNSPLUGIN` variable set). |
|
||||
| `-e SUBDOMAINS=www,` | Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this *exactly* to `wildcard` (wildcard cert is available via `dns` validation only) |
|
||||
| `-e CERTPROVIDER=` | Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt. |
|
||||
| `-e DNSPLUGIN=cloudflare` | Required if `VALIDATION` is set to `dns`. Options are `acmedns`,`aliyun`, `azure`, `cloudflare`, `cloudxns`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `dynu`, `gandi`, `gehirn`, `google`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip` and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`. |
|
||||
| `-e DNSPLUGIN=cloudflare` | Required if `VALIDATION` is set to `dns`. Options are `acmedns`, `aliyun`, `azure`, `cloudflare`, `cloudxns`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `duckdns`, `dynu`, `gandi`, `gehirn`, `godaddy`, `google`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `porkbun`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip`, and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`. |
|
||||
| `-e PROPAGATION=` | Optionally override (in seconds) the default propagation time for the dns plugins. |
|
||||
| `-e DUCKDNSTOKEN=` | Required if `VALIDATION` is set to `duckdns`. Retrieve your token from https://www.duckdns.org |
|
||||
| `-e EMAIL=` | Optional e-mail address used for cert expiration notifications (Required for ZeroSSL). |
|
||||
| `-e ONLY_SUBDOMAINS=false` | If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true` |
|
||||
| `-e EXTRA_DOMAINS=` | Additional fully qualified domain names (comma separated, no spaces) ie. `extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org` |
|
||||
@@ -335,6 +335,12 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
|
||||
|
||||
## Versions
|
||||
|
||||
* **22.11.22:** - Pin acme to the same version as certbot.
|
||||
* **22.11.22:** - Pin certbot to 1.32.0 until plugin compatibility improves.
|
||||
* **05.11.22:** - Update acmedns plugin handling.
|
||||
* **06.10.22:** - Switch to certbot-dns-duckdns. Update cpanel and gandi dns plugin handling. Minor adjustments to init logic.
|
||||
* **05.10.22:** - Use certbot file hooks instead of command line hooks
|
||||
* **04.10.22:** - Add godaddy and porkbun dns plugins.
|
||||
* **03.10.22:** - Add default_server back to default site conf's https listen.
|
||||
* **22.09.22:** - Added support for DO DNS validation.
|
||||
* **22.09.22:** - Added certbot-dns-acmedns for DNS01 validation.
|
||||
@@ -350,7 +356,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
|
||||
* **22.11.21:** - Added support for Infomaniak DNS for certificate generation.
|
||||
* **20.11.21:** - Added support for dnspod validation.
|
||||
* **15.11.21:** - Added support for deSEC DNS for wildcard certificate generation.
|
||||
* **26.10.21:** - [Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) proxy.conf - Mitigate https://httpoxy.org/ vulnerabilities. Ref: https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx#Defeating-the-Attack-using-NGINX-and-NGINX-Plus
|
||||
* **26.10.21:** - [Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) proxy.conf - Mitigate <https://httpoxy.org/> vulnerabilities. Ref: <https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx#Defeating-the-Attack-using-NGINX-and-NGINX-Plus>
|
||||
* **23.10.21:** - Fix Hurricane Electric (HE) DNS validation.
|
||||
* **12.10.21:** - Fix deprecated LE root cert check to fix failures when using `STAGING=true`, and failures in revoking.
|
||||
* **06.10.21:** - Added support for Hurricane Electric (HE) DNS validation. Added lxml build deps.
|
||||
|
||||
@@ -2,7 +2,12 @@
|
||||
|
||||
# jenkins variables
|
||||
project_name: docker-swag
|
||||
external_type: pip_version
|
||||
|
||||
# Pin certbot to 1.32.0 until plugin compatibility improves
|
||||
external_type: na
|
||||
custom_version_command: "echo '1.32.0'"
|
||||
|
||||
#external_type: pip_version
|
||||
release_type: stable
|
||||
release_tag: latest
|
||||
ls_branch: master
|
||||
|
||||
@@ -12,13 +12,13 @@ c-client-2007f-r13
|
||||
ca-certificates-20220614-r0
|
||||
ca-certificates-bundle-20220614-r0
|
||||
coreutils-9.0-r2
|
||||
curl-7.80.0-r3
|
||||
expat-2.4.9-r0
|
||||
curl-7.80.0-r4
|
||||
expat-2.5.0-r0
|
||||
fail2ban-0.11.2-r1
|
||||
freetype-2.11.1-r2
|
||||
gdbm-1.22-r0
|
||||
git-2.34.4-r0
|
||||
git-perl-2.34.4-r0
|
||||
git-2.34.5-r0
|
||||
git-perl-2.34.5-r0
|
||||
gmp-6.2.1-r1
|
||||
gnupg-2.2.31-r2
|
||||
gnupg-dirmngr-2.2.31-r2
|
||||
@@ -41,8 +41,8 @@ libbsd-0.11.3-r1
|
||||
libbz2-1.0.8-r1
|
||||
libc-utils-0.7.2-r3
|
||||
libcap-2.61-r0
|
||||
libcrypto1.1-1.1.1q-r0
|
||||
libcurl-7.80.0-r3
|
||||
libcrypto1.1-1.1.1s-r1
|
||||
libcurl-7.80.0-r4
|
||||
libedit-20210910.3.1-r0
|
||||
libevent-2.1.12-r4
|
||||
libffi-3.4.2-r1
|
||||
@@ -70,18 +70,18 @@ libsasl-2.1.28-r0
|
||||
libseccomp-2.5.2-r0
|
||||
libsm-1.2.3-r0
|
||||
libsodium-1.0.18-r0
|
||||
libssl1.1-1.1.1q-r0
|
||||
libssl1.1-1.1.1s-r1
|
||||
libstdc++-10.3.1_git20211027-r0
|
||||
libtasn1-4.18.0-r0
|
||||
libunistring-0.9.10-r1
|
||||
libuuid-2.37.4-r0
|
||||
libwebp-1.2.2-r0
|
||||
libx11-1.7.2-r0
|
||||
libx11-1.7.3.1-r0
|
||||
libxau-1.0.9-r0
|
||||
libxcb-1.14-r2
|
||||
libxdmcp-1.1.3-r0
|
||||
libxext-1.3.4-r0
|
||||
libxml2-2.9.14-r1
|
||||
libxml2-2.9.14-r2
|
||||
libxpm-3.5.13-r0
|
||||
libxslt-1.1.35-r0
|
||||
libxt-1.2.1-r0
|
||||
@@ -120,41 +120,41 @@ nginx-mod-stream-geoip2-1.20.2-r1
|
||||
nginx-vim-1.20.2-r1
|
||||
npth-1.6-r1
|
||||
oniguruma-6.9.7.1-r0
|
||||
openssl-1.1.1q-r0
|
||||
openssl-1.1.1s-r1
|
||||
p11-kit-0.24.0-r1
|
||||
pcre-8.45-r1
|
||||
pcre2-10.40-r0
|
||||
perl-5.34.0-r1
|
||||
perl-error-0.17029-r1
|
||||
perl-git-2.34.4-r0
|
||||
php8-8.0.18-r0
|
||||
php8-bcmath-8.0.18-r0
|
||||
php8-bz2-8.0.18-r0
|
||||
php8-common-8.0.18-r0
|
||||
php8-ctype-8.0.18-r0
|
||||
php8-curl-8.0.18-r0
|
||||
php8-dom-8.0.18-r0
|
||||
php8-exif-8.0.18-r0
|
||||
php8-fileinfo-8.0.18-r0
|
||||
php8-fpm-8.0.18-r0
|
||||
php8-ftp-8.0.18-r0
|
||||
php8-gd-8.0.18-r0
|
||||
php8-gmp-8.0.18-r0
|
||||
php8-iconv-8.0.18-r0
|
||||
php8-imap-8.0.18-r0
|
||||
php8-intl-8.0.18-r0
|
||||
php8-ldap-8.0.18-r0
|
||||
php8-mbstring-8.0.18-r0
|
||||
php8-mysqli-8.0.18-r0
|
||||
php8-mysqlnd-8.0.18-r0
|
||||
php8-opcache-8.0.18-r0
|
||||
php8-openssl-8.0.18-r0
|
||||
php8-pdo-8.0.18-r0
|
||||
php8-pdo_mysql-8.0.18-r0
|
||||
php8-pdo_odbc-8.0.18-r0
|
||||
php8-pdo_pgsql-8.0.18-r0
|
||||
php8-pdo_sqlite-8.0.18-r0
|
||||
php8-pear-8.0.18-r0
|
||||
perl-git-2.34.5-r0
|
||||
php8-8.0.25-r0
|
||||
php8-bcmath-8.0.25-r0
|
||||
php8-bz2-8.0.25-r0
|
||||
php8-common-8.0.25-r0
|
||||
php8-ctype-8.0.25-r0
|
||||
php8-curl-8.0.25-r0
|
||||
php8-dom-8.0.25-r0
|
||||
php8-exif-8.0.25-r0
|
||||
php8-fileinfo-8.0.25-r0
|
||||
php8-fpm-8.0.25-r0
|
||||
php8-ftp-8.0.25-r0
|
||||
php8-gd-8.0.25-r0
|
||||
php8-gmp-8.0.25-r0
|
||||
php8-iconv-8.0.25-r0
|
||||
php8-imap-8.0.25-r0
|
||||
php8-intl-8.0.25-r0
|
||||
php8-ldap-8.0.25-r0
|
||||
php8-mbstring-8.0.25-r0
|
||||
php8-mysqli-8.0.25-r0
|
||||
php8-mysqlnd-8.0.25-r0
|
||||
php8-opcache-8.0.25-r0
|
||||
php8-openssl-8.0.25-r0
|
||||
php8-pdo-8.0.25-r0
|
||||
php8-pdo_mysql-8.0.25-r0
|
||||
php8-pdo_odbc-8.0.25-r0
|
||||
php8-pdo_pgsql-8.0.25-r0
|
||||
php8-pdo_sqlite-8.0.25-r0
|
||||
php8-pear-8.0.25-r0
|
||||
php8-pecl-apcu-5.1.21-r0
|
||||
php8-pecl-igbinary-3.2.6-r0
|
||||
php8-pecl-mailparse-3.1.3-r0
|
||||
@@ -162,21 +162,21 @@ php8-pecl-mcrypt-1.0.4-r0
|
||||
php8-pecl-memcached-3.1.5-r1
|
||||
php8-pecl-redis-5.3.6-r0
|
||||
php8-pecl-xmlrpc-1.0.0_rc3-r0
|
||||
php8-pgsql-8.0.18-r0
|
||||
php8-phar-8.0.18-r0
|
||||
php8-posix-8.0.18-r0
|
||||
php8-session-8.0.18-r0
|
||||
php8-simplexml-8.0.18-r0
|
||||
php8-soap-8.0.18-r0
|
||||
php8-sockets-8.0.18-r0
|
||||
php8-sodium-8.0.18-r0
|
||||
php8-sqlite3-8.0.18-r0
|
||||
php8-tokenizer-8.0.18-r0
|
||||
php8-xml-8.0.18-r0
|
||||
php8-xmlreader-8.0.18-r0
|
||||
php8-xmlwriter-8.0.18-r0
|
||||
php8-xsl-8.0.18-r0
|
||||
php8-zip-8.0.18-r0
|
||||
php8-pgsql-8.0.25-r0
|
||||
php8-phar-8.0.25-r0
|
||||
php8-posix-8.0.25-r0
|
||||
php8-session-8.0.25-r0
|
||||
php8-simplexml-8.0.25-r0
|
||||
php8-soap-8.0.25-r0
|
||||
php8-sockets-8.0.25-r0
|
||||
php8-sodium-8.0.25-r0
|
||||
php8-sqlite3-8.0.25-r0
|
||||
php8-tokenizer-8.0.25-r0
|
||||
php8-xml-8.0.25-r0
|
||||
php8-xmlreader-8.0.25-r0
|
||||
php8-xmlwriter-8.0.25-r0
|
||||
php8-xsl-8.0.25-r0
|
||||
php8-zip-8.0.25-r0
|
||||
pinentry-1.2.0-r0
|
||||
popt-1.18-r0
|
||||
procps-3.3.17-r0
|
||||
@@ -211,7 +211,7 @@ py3-toml-0.10.2-r2
|
||||
py3-tomli-1.2.2-r0
|
||||
py3-urllib3-1.26.7-r0
|
||||
py3-webencodings-0.5.1-r4
|
||||
python3-3.9.13-r1
|
||||
python3-3.9.15-r0
|
||||
readline-8.1.1-r0
|
||||
s6-ipcserver-2.11.0.0-r0
|
||||
scanelf-1.3.3-r0
|
||||
@@ -219,7 +219,7 @@ shadow-4.8.1-r1
|
||||
skalibs-2.11.0.0-r0
|
||||
sqlite-libs-3.36.0-r0
|
||||
ssl_client-1.34.1-r7
|
||||
tzdata-2022c-r0
|
||||
tzdata-2022f-r1
|
||||
unixodbc-2.3.9-r1
|
||||
utmps-0.1.0.3-r0
|
||||
whois-5.5.10-r0
|
||||
|
||||
@@ -32,7 +32,7 @@ param_usage_include_env: true
|
||||
param_env_vars:
|
||||
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
|
||||
- { env_var: "URL", env_value: "yourdomain.url", desc: "Top url you have control over (`customdomain.com` if you own it, or `customsubdomain.ddnsprovider.com` if dynamic dns)." }
|
||||
- { env_var: "VALIDATION", env_value: "http", desc: "Certbot validation method to use, options are `http`, `dns` or `duckdns` (`dns` method also requires `DNSPLUGIN` variable set) (`duckdns` method requires `DUCKDNSTOKEN` variable set, and the `SUBDOMAINS` variable must be either empty or set to `wildcard`)." }
|
||||
- { env_var: "VALIDATION", env_value: "http", desc: "Certbot validation method to use, options are `http` or `dns` (`dns` method also requires `DNSPLUGIN` variable set)." }
|
||||
param_usage_include_vols: true
|
||||
param_volumes:
|
||||
- { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "All the config files including the webroot reside here." }
|
||||
@@ -49,11 +49,10 @@ cap_add_param_vars:
|
||||
# optional container parameters
|
||||
opt_param_usage_include_env: true
|
||||
opt_param_env_vars:
|
||||
- { env_var: "SUBDOMAINS", env_value: "www,", desc: "Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this _exactly_ to `wildcard` (wildcard cert is available via `dns` and `duckdns` validation only)" }
|
||||
- { env_var: "SUBDOMAINS", env_value: "www,", desc: "Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this *exactly* to `wildcard` (wildcard cert is available via `dns` validation only)" }
|
||||
- { env_var: "CERTPROVIDER", env_value: "", desc: "Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt." }
|
||||
- { env_var: "DNSPLUGIN", env_value: "cloudflare", desc: "Required if `VALIDATION` is set to `dns`. Options are `acmedns`,`aliyun`, `azure`, `cloudflare`, `cloudxns`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `dynu`, `gandi`, `gehirn`, `google`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip` and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`." }
|
||||
- { env_var: "DNSPLUGIN", env_value: "cloudflare", desc: "Required if `VALIDATION` is set to `dns`. Options are `acmedns`, `aliyun`, `azure`, `cloudflare`, `cloudxns`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `duckdns`, `dynu`, `gandi`, `gehirn`, `godaddy`, `google`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `porkbun`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip`, and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`." }
|
||||
- { env_var: "PROPAGATION", env_value: "", desc: "Optionally override (in seconds) the default propagation time for the dns plugins." }
|
||||
- { env_var: "DUCKDNSTOKEN", env_value: "", desc: "Required if `VALIDATION` is set to `duckdns`. Retrieve your token from https://www.duckdns.org" }
|
||||
- { env_var: "EMAIL", env_value: "", desc: "Optional e-mail address used for cert expiration notifications (Required for ZeroSSL)." }
|
||||
- { env_var: "ONLY_SUBDOMAINS", env_value: "false", desc: "If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true`" }
|
||||
- { env_var: "EXTRA_DOMAINS", env_value: "", desc: "Additional fully qualified domain names (comma separated, no spaces) ie. `extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org`" }
|
||||
@@ -80,13 +79,15 @@ app_setup_block: |
|
||||
### Validation and initial setup
|
||||
|
||||
* Before running this container, make sure that the url and subdomains are properly forwarded to this container's host, and that port 443 (and/or 80) is not being used by another service on the host (NAS gui, another webserver, etc.).
|
||||
* If you need a dynamic dns provider, you can use the free provider duckdns.org where the `URL` will be `yoursubdomain.duckdns.org` and the `SUBDOMAINS` can be `www,ftp,cloud` with http validation, or `wildcard` with dns validation. You can use our [duckdns image](https://hub.docker.com/r/linuxserver/duckdns/) to update your IP on duckdns.org.
|
||||
* For `http` validation, port 80 on the internet side of the router should be forwarded to this container's port 80
|
||||
* For `dns` validation, make sure to enter your credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`
|
||||
* Cloudflare provides free accounts for managing dns and is very easy to use with this image. Make sure that it is set up for "dns only" instead of "dns + proxy"
|
||||
* Google dns plugin is meant to be used with "Google Cloud DNS", a paid enterprise product, and not for "Google Domains DNS"
|
||||
* For `duckdns` validation, either leave the `SUBDOMAINS` variable empty or set it to `wildcard`, and set the `DUCKDNSTOKEN` variable with your duckdns token. Due to a limitation of duckdns, the resulting cert will only cover either main subdomain (ie. `yoursubdomain.duckdns.org`), or sub-subdomains (ie. `*.yoursubdomain.duckdns.org`), but will not both at the same time. You can use our [duckdns image](https://hub.docker.com/r/linuxserver/duckdns/) to update your IP on duckdns.org.
|
||||
* DuckDNS only supoprts two types of DNS validated certificates (not both at the same time):
|
||||
1. Certs that only cover your main subdomain (ie. `yoursubdomain.duckdns.org`, leave the `SUBDOMAINS` variable empty)
|
||||
2. Certs that cover sub-subdomains of your main subdomain (ie. `*.yoursubdomain.duckdns.org`, set the `SUBDOMAINS` variable to `wildcard`)
|
||||
* `--cap-add=NET_ADMIN` is required for fail2ban to modify iptables
|
||||
* If you need a dynamic dns provider, you can use the free provider duckdns.org where the `URL` will be `yoursubdomain.duckdns.org` and the `SUBDOMAINS` can be `www,ftp,cloud` with http validation, or `wildcard` with dns validation.
|
||||
* After setup, navigate to `https://yourdomain.url` to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at `/config/nginx/site-confs/default.conf`).
|
||||
* Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under `/config/log/letsencrypt` to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances.
|
||||
|
||||
@@ -131,7 +132,7 @@ app_setup_block: |
|
||||
* You can check which jails are active via `docker exec -it swag fail2ban-client status`
|
||||
* You can check the status of a specific jail via `docker exec -it swag fail2ban-client status <jail name>`
|
||||
* You can unban an IP via `docker exec -it swag fail2ban-client set <jail name> unbanip <IP>`
|
||||
* A list of commands can be found here: https://www.fail2ban.org/wiki/index.php/Commands
|
||||
* A list of commands can be found here: <https://www.fail2ban.org/wiki/index.php/Commands>
|
||||
|
||||
### Updating configs
|
||||
|
||||
@@ -148,6 +149,7 @@ app_setup_block: |
|
||||
* You can check the new sample and adjust your active config as needed.
|
||||
|
||||
### Migration from the old `linuxserver/letsencrypt` image
|
||||
|
||||
Please follow the instructions [on this blog post](https://www.linuxserver.io/blog/2020-08-21-introducing-swag#migrate).
|
||||
|
||||
app_setup_nginx_reverse_proxy_snippet: false
|
||||
@@ -155,6 +157,12 @@ app_setup_nginx_reverse_proxy_block: ""
|
||||
|
||||
# changelog
|
||||
changelogs:
|
||||
- { date: "22.11.22:", desc: "Pin acme to the same version as certbot."}
|
||||
- { date: "22.11.22:", desc: "Pin certbot to 1.32.0 until plugin compatibility improves."}
|
||||
- { date: "05.11.22:", desc: "Update acmedns plugin handling."}
|
||||
- { date: "06.10.22:", desc: "Switch to certbot-dns-duckdns. Update cpanel and gandi dns plugin handling. Minor adjustments to init logic." }
|
||||
- { date: "05.10.22:", desc: "Use certbot file hooks instead of command line hooks" }
|
||||
- { date: "04.10.22:", desc: "Add godaddy and porkbun dns plugins." }
|
||||
- { date: "03.10.22:", desc: "Add default_server back to default site conf's https listen." }
|
||||
- { date: "22.09.22:", desc: "Added support for DO DNS validation." }
|
||||
- { date: "22.09.22:", desc: "Added certbot-dns-acmedns for DNS01 validation." }
|
||||
@@ -170,7 +178,7 @@ changelogs:
|
||||
- { date: "22.11.21:", desc: "Added support for Infomaniak DNS for certificate generation." }
|
||||
- { date: "20.11.21:", desc: "Added support for dnspod validation." }
|
||||
- { date: "15.11.21:", desc: "Added support for deSEC DNS for wildcard certificate generation." }
|
||||
- { date: "26.10.21:", desc: "[Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) proxy.conf - Mitigate https://httpoxy.org/ vulnerabilities. Ref: https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx#Defeating-the-Attack-using-NGINX-and-NGINX-Plus" }
|
||||
- { date: "26.10.21:", desc: "[Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) proxy.conf - Mitigate <https://httpoxy.org/> vulnerabilities. Ref: <https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx#Defeating-the-Attack-using-NGINX-and-NGINX-Plus>" }
|
||||
- { date: "23.10.21:", desc: "Fix Hurricane Electric (HE) DNS validation." }
|
||||
- { date: "12.10.21:", desc: "Fix deprecated LE root cert check to fix failures when using `STAGING=true`, and failures in revoking." }
|
||||
- { date: "06.10.21:", desc: "Added support for Hurricane Electric (HE) DNS validation. Added lxml build deps." }
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
. /config/.donoteditthisfile.conf
|
||||
|
||||
curl https://www.duckdns.org/update?domains=${CERTBOT_DOMAIN}\&token=${ORIGDUCKDNSTOKEN}\&txt=${CERTBOT_VALIDATION}
|
||||
|
||||
echo "sleeping 60"
|
||||
sleep 60
|
||||
@@ -1,27 +1,8 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
. /config/.donoteditthisfile.conf
|
||||
|
||||
echo "<------------------------------------------------->"
|
||||
echo
|
||||
echo "<------------------------------------------------->"
|
||||
echo "cronjob running on "$(date)
|
||||
echo "cronjob running on $(date)"
|
||||
echo "Running certbot renew"
|
||||
if [ "$ORIGVALIDATION" = "dns" ] || [ "$ORIGVALIDATION" = "duckdns" ]; then
|
||||
certbot -n renew \
|
||||
--post-hook "if ps aux | grep [n]ginx: > /dev/null; then s6-svc -h /var/run/s6/services/nginx; fi; \
|
||||
cd /config/keys/letsencrypt && \
|
||||
openssl pkcs12 -export -out privkey.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem -passout pass: && \
|
||||
sleep 1 && \
|
||||
cat privkey.pem fullchain.pem > priv-fullchain-bundle.pem && \
|
||||
chown -R abc:abc /config/etc/letsencrypt"
|
||||
else
|
||||
certbot -n renew \
|
||||
--pre-hook "if ps aux | grep [n]ginx: > /dev/null; then s6-svc -d /var/run/s6/services/nginx; fi" \
|
||||
--post-hook "if ps aux | grep 's6-supervise nginx' | grep -v grep > /dev/null; then s6-svc -u /var/run/s6/services/nginx; fi; \
|
||||
cd /config/keys/letsencrypt && \
|
||||
openssl pkcs12 -export -out privkey.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem -passout pass: && \
|
||||
sleep 1 && \
|
||||
cat privkey.pem fullchain.pem > priv-fullchain-bundle.pem && \
|
||||
chown -R abc:abc /config/etc/letsencrypt"
|
||||
fi
|
||||
certbot renew --non-interactive
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Instructions: https://github.com/badjware/certbot-dns-cpanel#credentials
|
||||
# Replace with your values
|
||||
# include the scheme and the port number (usually 2083 for https)
|
||||
certbot_dns_cpanel:cpanel_url = https://cpanel.example.com:2083
|
||||
certbot_dns_cpanel:cpanel_username = username
|
||||
certbot_dns_cpanel:cpanel_password = 1234567890abcdef
|
||||
dns_cpanel_url = https://cpanel.example.com:2083
|
||||
dns_cpanel_username = username
|
||||
dns_cpanel_password = 1234567890abcdef
|
||||
|
||||
3
root/defaults/dns-conf/duckdns.ini
Normal file
3
root/defaults/dns-conf/duckdns.ini
Normal file
@@ -0,0 +1,3 @@
|
||||
# Instructions: https://github.com/infinityofspace/certbot_dns_duckdns#credentials-file-or-cli-parameters
|
||||
# Replace with your API token from your duckdns account.
|
||||
dns_duckdns_token=<your-duckdns-token>
|
||||
@@ -1,3 +1,7 @@
|
||||
# Instructions: https://github.com/obynio/certbot-plugin-gandi#usage
|
||||
# Replace with your value
|
||||
certbot_plugin_gandi:dns_api_key=APIKEY
|
||||
# live dns v5 api key
|
||||
dns_gandi_api_key=APIKEY
|
||||
|
||||
# optional organization id, remove it if not used
|
||||
#dns_gandi_sharing_id=SHARINGID
|
||||
|
||||
4
root/defaults/dns-conf/godaddy.ini
Normal file
4
root/defaults/dns-conf/godaddy.ini
Normal file
@@ -0,0 +1,4 @@
|
||||
# Instructions: https://github.com/miigotu/certbot-dns-godaddy
|
||||
# Replace with your values
|
||||
dns_godaddy_secret = 0123456789abcdef0123456789abcdef01234567
|
||||
dns_godaddy_key = abcdef0123456789abcdef01234567abcdef0123
|
||||
@@ -1,3 +1,3 @@
|
||||
Instructions: https://github.com/Infomaniak/certbot-dns-infomaniak#via-ini-file
|
||||
# Instructions: https://github.com/Infomaniak/certbot-dns-infomaniak#via-ini-file
|
||||
# Replace with your values
|
||||
dns_infomaniak_token = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
|
||||
4
root/defaults/dns-conf/porkbun.ini
Normal file
4
root/defaults/dns-conf/porkbun.ini
Normal file
@@ -0,0 +1,4 @@
|
||||
# Instructions: https://github.com/infinityofspace/certbot_dns_porkbun
|
||||
# Replace with your values
|
||||
dns_porkbun_key=<your-porkbun-api-key>
|
||||
dns_porkbun_secret=<your-porkbun-api-secret>
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
cd /config/keys/letsencrypt || exit 1
|
||||
openssl pkcs12 -export -out privkey.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem -passout pass:
|
||||
sleep 1
|
||||
cat {privkey,fullchain}.pem >priv-fullchain-bundle.pem
|
||||
chown -R abc:abc /config/etc/letsencrypt
|
||||
13
root/defaults/etc/letsencrypt/renewal-hooks/post/10-nginx
Normal file
13
root/defaults/etc/letsencrypt/renewal-hooks/post/10-nginx
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
. /config/.donoteditthisfile.conf
|
||||
|
||||
if [ ! "$ORIGVALIDATION" = "dns" ] && [ ! "$ORIGVALIDATION" = "duckdns" ]; then
|
||||
if ps aux | grep 's6-supervise nginx' | grep -v grep >/dev/null; then
|
||||
s6-svc -u /run/service/nginx
|
||||
fi
|
||||
else
|
||||
if ps aux | grep [n]ginx: >/dev/null; then
|
||||
s6-svc -h /run/service/nginx
|
||||
fi
|
||||
fi
|
||||
9
root/defaults/etc/letsencrypt/renewal-hooks/pre/10-nginx
Normal file
9
root/defaults/etc/letsencrypt/renewal-hooks/pre/10-nginx
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
. /config/.donoteditthisfile.conf
|
||||
|
||||
if [ ! "$ORIGVALIDATION" = "dns" ] && [ ! "$ORIGVALIDATION" = "duckdns" ]; then
|
||||
if ps aux | grep [n]ginx: >/dev/null; then
|
||||
s6-svc -d /run/service/nginx
|
||||
fi
|
||||
fi
|
||||
@@ -3,9 +3,9 @@
|
||||
# make our folders and links
|
||||
mkdir -p \
|
||||
/config/{fail2ban,crontabs,dns-conf} \
|
||||
/config/etc/letsencrypt \
|
||||
/config/etc/letsencrypt/renewal-hooks \
|
||||
/config/log/{fail2ban,letsencrypt,nginx} \
|
||||
/config/nginx/proxy-confs \
|
||||
/var/run/fail2ban
|
||||
/run/fail2ban
|
||||
rm -rf /etc/letsencrypt
|
||||
ln -s /config/etc/letsencrypt /etc/letsencrypt
|
||||
|
||||
@@ -16,30 +16,41 @@ EMAIL=${EMAIL}\\n\
|
||||
STAGING=${STAGING}\\n"
|
||||
|
||||
# Sanitize variables
|
||||
SANED_VARS=( DNSPLUGIN EMAIL EXTRA_DOMAINS ONLY_SUBDOMAINS STAGING SUBDOMAINS URL VALIDATION CERTPROVIDER )
|
||||
for i in "${SANED_VARS[@]}"
|
||||
do
|
||||
SANED_VARS=(DNSPLUGIN EMAIL EXTRA_DOMAINS ONLY_SUBDOMAINS STAGING SUBDOMAINS URL VALIDATION CERTPROVIDER)
|
||||
for i in "${SANED_VARS[@]}"; do
|
||||
export echo "$i"="${!i//\"/}"
|
||||
export echo "$i"="$(echo "${!i}" | tr '[:upper:]' '[:lower:]')"
|
||||
done
|
||||
|
||||
# check to make sure DNSPLUGIN is selected if dns validation is used
|
||||
if [[ "$VALIDATION" = "dns" ]] && [[ ! "$DNSPLUGIN" =~ ^(acmedns|aliyun|azure|cloudflare|cloudxns|cpanel|desec|digitalocean|directadmin|dnsimple|dnsmadeeasy|dnspod|do|domeneshop|duckdns|dynu|gandi|gehirn|godaddy|google|he|hetzner|infomaniak|inwx|ionos|linode|loopia|luadns|netcup|njalla|nsone|ovh|porkbun|rfc2136|route53|sakuracloud|standalone|transip|vultr)$ ]]; then
|
||||
echo "Please set the DNSPLUGIN variable to a valid plugin name. See docker info for more details."
|
||||
sleep infinity
|
||||
fi
|
||||
|
||||
# copy dns default configs
|
||||
cp -n /defaults/dns-conf/* /config/dns-conf/
|
||||
chown -R abc:abc /config/dns-conf
|
||||
|
||||
# check to make sure DNSPLUGIN is selected if dns validation is used
|
||||
if [[ "$VALIDATION" = "dns" ]] && [[ ! "$DNSPLUGIN" =~ ^(acmedns|aliyun|azure|cloudflare|cloudxns|cpanel|desec|digitalocean|directadmin|dnsimple|dnsmadeeasy|dnspod|do|domeneshop|dynu|gandi|gehirn|google|he|hetzner|infomaniak|inwx|ionos|linode|loopia|luadns|netcup|njalla|nsone|ovh|rfc2136|route53|sakuracloud|standalone|transip|vultr)$ ]]; then
|
||||
echo "Please set the DNSPLUGIN variable to a valid plugin name. See docker info for more details."
|
||||
sleep infinity
|
||||
# update plugin names in dns conf inis
|
||||
sed -i 's|^certbot_dns_aliyun:||g' /config/dns-conf/aliyun.ini
|
||||
sed -i 's|^certbot_dns_cpanel:|dns_|g' /config/dns-conf/cpanel.ini
|
||||
sed -i 's|^certbot_dns_domeneshop:||g' /config/dns-conf/domeneshop.ini
|
||||
sed -i 's|^certbot_dns_inwx:||g' /config/dns-conf/inwx.ini
|
||||
sed -i 's|^certbot_dns_transip:||g' /config/dns-conf/transip.ini
|
||||
sed -i 's|^certbot_plugin_gandi:dns_|dns_gandi_|g' /config/dns-conf/gandi.ini
|
||||
|
||||
fi
|
||||
# copy default renewal hooks
|
||||
chmod -R +x /defaults/etc/letsencrypt/renewal-hooks
|
||||
cp -nR /defaults/etc/letsencrypt/renewal-hooks/* /config/etc/letsencrypt/renewal-hooks/
|
||||
chown -R abc:abc /config/etc/letsencrypt/renewal-hooks
|
||||
|
||||
# create original config file if it doesn't exist, move non-hidden legacy file to hidden
|
||||
if [ -f "/config/donoteditthisfile.conf" ]; then
|
||||
mv /config/donoteditthisfile.conf /config/.donoteditthisfile.conf
|
||||
fi
|
||||
if [ ! -f "/config/.donoteditthisfile.conf" ]; then
|
||||
echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGDUCKDNSTOKEN=\"$DUCKDNSTOKEN\" ORIGCERTPROVIDER=\"$CERTPROVIDER\" ORIGEMAIL=\"$EMAIL\"" > /config/.donoteditthisfile.conf
|
||||
echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGCERTPROVIDER=\"$CERTPROVIDER\" ORIGEMAIL=\"$EMAIL\"" >/config/.donoteditthisfile.conf
|
||||
echo "Created .donoteditthisfile.conf"
|
||||
fi
|
||||
|
||||
@@ -53,6 +64,25 @@ if [ -z "$VALIDATION" ]; then
|
||||
echo "VALIDATION parameter not set; setting it to http"
|
||||
fi
|
||||
|
||||
# set duckdns validation to dns
|
||||
if [ "$VALIDATION" = "duckdns" ]; then
|
||||
VALIDATION="dns"
|
||||
DNSPLUGIN="duckdns"
|
||||
if [ -n "$DUCKDNSTOKEN" ] && ! grep -q "dns_duckdns_token=${DUCKDNSTOKEN}$" /config/dns-conf/duckdns.ini;then
|
||||
sed -i "s|^dns_duckdns_token=.*|dns_duckdns_token=${DUCKDNSTOKEN}|g" /config/dns-conf/duckdns.ini
|
||||
fi
|
||||
fi
|
||||
if [ "$VALIDATION" = "dns" ] && [ "$DNSPLUGIN" = "duckdns" ]; then
|
||||
if [ "$SUBDOMAINS" = "wildcard" ]; then
|
||||
echo "the resulting certificate will only cover the subdomains due to a limitation of duckdns, so it is advised to set the root location to use www.subdomain.duckdns.org"
|
||||
export ONLY_SUBDOMAINS=true
|
||||
else
|
||||
echo "the resulting certificate will only cover the main domain due to a limitation of duckdns, ie. subdomain.duckdns.org"
|
||||
export SUBDOMAINS=""
|
||||
fi
|
||||
export EXTRA_DOMAINS=""
|
||||
fi
|
||||
|
||||
# if zerossl is selected or staging is set to true, use the relevant server
|
||||
if [ "$CERTPROVIDER" = "zerossl" ] && [ "$STAGING" = "true" ]; then
|
||||
echo "ZeroSSL does not support staging mode, ignoring STAGING variable"
|
||||
@@ -120,65 +150,45 @@ else
|
||||
EMAILPARAM="--register-unsafely-without-email"
|
||||
fi
|
||||
|
||||
# update plugin names in dns conf inis
|
||||
sed -i 's|^certbot_dns_aliyun:||g' /config/dns-conf/aliyun.ini
|
||||
sed -i 's|^certbot_dns_domeneshop:||g' /config/dns-conf/domeneshop.ini
|
||||
sed -i 's|^certbot_dns_inwx:||g' /config/dns-conf/inwx.ini
|
||||
sed -i 's|^certbot_dns_transip:||g' /config/dns-conf/transip.ini
|
||||
|
||||
# setting the validation method to use
|
||||
if [ "$VALIDATION" = "dns" ]; then
|
||||
if [ "$DNSPLUGIN" = "route53" ]; then
|
||||
if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
if [ -n "$PROPAGATION" ]; then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
PREFCHAL="--dns-${DNSPLUGIN} ${PROPAGATIONPARAM}"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(cpanel)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--certbot-dns-${DNSPLUGIN}:${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
PREFCHAL="-a certbot-dns-${DNSPLUGIN}:${DNSPLUGIN} --certbot-dns-${DNSPLUGIN}:${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini ${PROPAGATIONPARAM}"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(gandi)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ];then echo "Gandi dns plugin does not support setting propagation time"; fi
|
||||
PREFCHAL="-a certbot-plugin-${DNSPLUGIN}:dns --certbot-plugin-${DNSPLUGIN}:dns-credentials /config/dns-conf/${DNSPLUGIN}.ini"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(azure|gandi)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ]; then echo "${DNSPLUGIN} dns plugin does not support setting propagation time"; fi
|
||||
PREFCHAL="-a dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(duckdns)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ]; then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
PREFCHAL="-a dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini --dns-duckdns-no-txt-restore ${PROPAGATIONPARAM}"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(google)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
if [ -n "$PROPAGATION" ]; then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
PREFCHAL="--dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.json ${PROPAGATIONPARAM}"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(aliyun|desec|dnspod|do|domeneshop|dynu|he|hetzner|infomaniak|inwx|ionos|loopia|netcup|njalla|transip|vultr)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
elif [[ "$DNSPLUGIN" =~ ^(acmedns|aliyun|cpanel|desec|dnspod|do|domeneshop|dynu|godaddy|he|hetzner|infomaniak|inwx|ionos|loopia|netcup|njalla|porkbun|transip|vultr)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ]; then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
PREFCHAL="-a dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini ${PROPAGATIONPARAM}"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(standalone)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ];then echo "standalone dns plugin does not support setting propagation time"; fi
|
||||
if [ -n "$PROPAGATION" ]; then echo "standalone dns plugin does not support setting propagation time"; fi
|
||||
PREFCHAL="-a dns-${DNSPLUGIN}"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(directadmin)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
if [ -n "$PROPAGATION" ]; then PROPAGATIONPARAM="--${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
PREFCHAL="-a ${DNSPLUGIN} --${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini ${PROPAGATIONPARAM}"
|
||||
elif [[ "$DNSPLUGIN" =~ ^(azure)$ ]]; then
|
||||
if [ -n "$PROPAGATION" ];then echo "Azure dns plugin does not support setting propagation time"; fi
|
||||
PREFCHAL="-a dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini"
|
||||
else
|
||||
if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
if [ -n "$PROPAGATION" ]; then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi
|
||||
PREFCHAL="--dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini ${PROPAGATIONPARAM}"
|
||||
fi
|
||||
echo "${VALIDATION} validation via ${DNSPLUGIN} plugin is selected"
|
||||
elif [ "$VALIDATION" = "tls-sni" ]; then
|
||||
PREFCHAL="--non-interactive --standalone --preferred-challenges http"
|
||||
PREFCHAL="--standalone --preferred-challenges http"
|
||||
echo "*****tls-sni validation has been deprecated, attempting http validation instead"
|
||||
elif [ "$VALIDATION" = "duckdns" ]; then
|
||||
PREFCHAL="--non-interactive --manual --preferred-challenges dns --manual-auth-hook /app/duckdns-txt"
|
||||
chmod +x /app/duckdns-txt
|
||||
echo "duckdns validation is selected"
|
||||
if [ "$SUBDOMAINS" = "wildcard" ]; then
|
||||
echo "the resulting certificate will only cover the subdomains due to a limitation of duckdns, so it is advised to set the root location to use www.subdomain.duckdns.org"
|
||||
export URL_REAL="-d *.${URL}"
|
||||
else
|
||||
echo "the resulting certificate will only cover the main domain due to a limitation of duckdns, ie. subdomain.duckdns.org"
|
||||
export URL_REAL="-d ${URL}"
|
||||
fi
|
||||
else
|
||||
PREFCHAL="--non-interactive --standalone --preferred-challenges http"
|
||||
PREFCHAL="--standalone --preferred-challenges http"
|
||||
echo "http validation is selected"
|
||||
fi
|
||||
|
||||
# setting the symlink for key location
|
||||
rm -rf /config/keys/letsencrypt
|
||||
if [ "$ONLY_SUBDOMAINS" = "true" ] && [ ! "$SUBDOMAINS" = "wildcard" ] ; then
|
||||
if [ "$ONLY_SUBDOMAINS" = "true" ] && [ ! "$SUBDOMAINS" = "wildcard" ]; then
|
||||
DOMAIN="$(echo "$SUBDOMAINS" | tr ',' ' ' | awk '{print $1}').${URL}"
|
||||
ln -s ../etc/letsencrypt/live/"$DOMAIN" /config/keys/letsencrypt
|
||||
else
|
||||
@@ -190,7 +200,7 @@ rm -rf /config/keys/cert.key
|
||||
ln -s ./letsencrypt/privkey.pem /config/keys/cert.key
|
||||
|
||||
# checking for changes in cert variables, revoking certs if necessary
|
||||
if [ ! "$URL" = "$ORIGURL" ] || [ ! "$SUBDOMAINS" = "$ORIGSUBDOMAINS" ] || [ ! "$ONLY_SUBDOMAINS" = "$ORIGONLY_SUBDOMAINS" ] || [ ! "$EXTRA_DOMAINS" = "$ORIGEXTRA_DOMAINS" ] || [ ! "$VALIDATION" = "$ORIGVALIDATION" ] || [ ! "$DNSPLUGIN" = "$ORIGDNSPLUGIN" ] || [ ! "$PROPAGATION" = "$ORIGPROPAGATION" ] || [ ! "$STAGING" = "$ORIGSTAGING" ] || [ ! "$DUCKDNSTOKEN" = "$ORIGDUCKDNSTOKEN" ] || [ ! "$CERTPROVIDER" = "$ORIGCERTPROVIDER" ]; then
|
||||
if [ ! "$URL" = "$ORIGURL" ] || [ ! "$SUBDOMAINS" = "$ORIGSUBDOMAINS" ] || [ ! "$ONLY_SUBDOMAINS" = "$ORIGONLY_SUBDOMAINS" ] || [ ! "$EXTRA_DOMAINS" = "$ORIGEXTRA_DOMAINS" ] || [ ! "$VALIDATION" = "$ORIGVALIDATION" ] || [ ! "$DNSPLUGIN" = "$ORIGDNSPLUGIN" ] || [ ! "$PROPAGATION" = "$ORIGPROPAGATION" ] || [ ! "$STAGING" = "$ORIGSTAGING" ] || [ ! "$CERTPROVIDER" = "$ORIGCERTPROVIDER" ]; then
|
||||
echo "Different validation parameters entered than what was used before. Revoking and deleting existing certificate, and an updated one will be created"
|
||||
if [ "$ORIGONLY_SUBDOMAINS" = "true" ] && [ ! "$ORIGSUBDOMAINS" = "wildcard" ]; then
|
||||
ORIGDOMAIN="$(echo "$ORIGSUBDOMAINS" | tr ',' ' ' | awk '{print $1}').${ORIGURL}"
|
||||
@@ -214,12 +224,11 @@ if [ ! "$URL" = "$ORIGURL" ] || [ ! "$SUBDOMAINS" = "$ORIGSUBDOMAINS" ] || [ ! "
|
||||
if [[ -f /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem ]]; then
|
||||
certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem --server $REV_ACMESERVER
|
||||
fi
|
||||
rm -rf /config/etc/letsencrypt
|
||||
mkdir -p /config/etc/letsencrypt
|
||||
rm -rf /config/etc/letsencrypt/{accounts,archive,live,renewal}
|
||||
fi
|
||||
|
||||
# saving new variables
|
||||
echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGDUCKDNSTOKEN=\"$DUCKDNSTOKEN\" ORIGCERTPROVIDER=\"$CERTPROVIDER\" ORIGEMAIL=\"$EMAIL\"" > /config/.donoteditthisfile.conf
|
||||
echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGCERTPROVIDER=\"$CERTPROVIDER\" ORIGEMAIL=\"$EMAIL\"" >/config/.donoteditthisfile.conf
|
||||
|
||||
# alter extension for error message
|
||||
if [ "$DNSPLUGIN" = "google" ]; then
|
||||
@@ -229,12 +238,13 @@ else
|
||||
fi
|
||||
|
||||
# Check if the cert is using the old LE root cert, revoke and regen if necessary
|
||||
if [ -f "/config/keys/letsencrypt/chain.pem" ] && ([ "${CERTPROVIDER}" == "letsencrypt" ] || [ "${CERTPROVIDER}" == "" ]) && [ "${STAGING}" != "true" ] && ! openssl x509 -in /config/keys/letsencrypt/chain.pem -noout -issuer | grep -q "ISRG Root X"; then
|
||||
if [ -f "/config/keys/letsencrypt/chain.pem" ] && { [ "${CERTPROVIDER}" == "letsencrypt" ] || [ "${CERTPROVIDER}" == "" ]; } && [ "${STAGING}" != "true" ] && ! openssl x509 -in /config/keys/letsencrypt/chain.pem -noout -issuer | grep -q "ISRG Root X"; then
|
||||
echo "The cert seems to be using the old LE root cert, which is no longer valid. Deleting and revoking."
|
||||
REV_ACMESERVER="https://acme-v02.api.letsencrypt.org/directory"
|
||||
certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem --server $REV_ACMESERVER
|
||||
rm -rf /config/etc/letsencrypt
|
||||
mkdir -p /config/etc/letsencrypt
|
||||
if [[ -f /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem ]]; then
|
||||
certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem --server $REV_ACMESERVER
|
||||
fi
|
||||
rm -rf /config/etc/letsencrypt/{accounts,archive,live,renewal}
|
||||
fi
|
||||
|
||||
# generating certs if necessary
|
||||
@@ -252,22 +262,16 @@ if [ ! -f "/config/keys/letsencrypt/fullchain.pem" ]; then
|
||||
fi
|
||||
echo "Generating new certificate"
|
||||
# shellcheck disable=SC2086
|
||||
certbot certonly --renew-by-default --server $ACMESERVER $ZEROSSL_EAB $PREFCHAL --rsa-key-size 4096 $EMAILPARAM --agree-tos $URL_REAL
|
||||
if [ -d /config/keys/letsencrypt ]; then
|
||||
cd /config/keys/letsencrypt || exit
|
||||
else
|
||||
certbot certonly --non-interactive --renew-by-default --server $ACMESERVER $ZEROSSL_EAB $PREFCHAL --rsa-key-size 4096 $EMAILPARAM --agree-tos $URL_REAL
|
||||
if [ ! -d /config/keys/letsencrypt ]; then
|
||||
if [ "$VALIDATION" = "dns" ]; then
|
||||
echo "ERROR: Cert does not exist! Please see the validation error above. Make sure you entered correct credentials into the /config/dns-conf/${FILENAME} file."
|
||||
elif [ "$VALIDATION" = "duckdns" ]; then
|
||||
echo "ERROR: Cert does not exist! Please see the validation error above. Make sure your DUCKDNSTOKEN is correct."
|
||||
else
|
||||
echo "ERROR: Cert does not exist! Please see the validation error above. The issue may be due to incorrect dns or port forwarding settings. Please fix your settings and recreate the container"
|
||||
fi
|
||||
sleep infinity
|
||||
fi
|
||||
openssl pkcs12 -export -out privkey.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem -passout pass:
|
||||
sleep 1
|
||||
cat {privkey,fullchain}.pem > priv-fullchain-bundle.pem
|
||||
run-parts /config/etc/letsencrypt/renewal-hooks/deploy/
|
||||
echo "New certificate generated; starting nginx"
|
||||
else
|
||||
echo "Certificate exists; parameters unchanged; starting nginx"
|
||||
|
||||
Reference in New Issue
Block a user