Initial commit
This commit is contained in:
commit
b083f2b89c
5 changed files with 88 additions and 0 deletions
10
Containerfile
Normal file
10
Containerfile
Normal file
|
@ -0,0 +1,10 @@
|
|||
FROM docker.io/neilpang/acme.sh:dev
|
||||
|
||||
COPY --chmod=0755 docker-entrypoint.sh /docker-entrypoint.sh
|
||||
COPY --chmod=0755 scripts/ /opt/scripts/
|
||||
|
||||
ENV ACME_SERVER=letsencrypt
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
11
README.md
Normal file
11
README.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
Quick tutorial:
|
||||
1. set `DOMAINS` and `SERVER_x` (can be multiple)
|
||||
2. run
|
||||
3. good to go
|
||||
|
||||
Quirks:
|
||||
- alpha
|
||||
- runs as root inside container
|
||||
- adding / removing domains not supported
|
||||
|
||||
TODO: Use certbot. It should be easier to extend with Python 3.
|
17
docker-entrypoint.sh
Normal file
17
docker-entrypoint.sh
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
if cat /trusted-certificates/* >> /etc/ssl/certs/ca-certificates.crt; then
|
||||
echo "One or more trusted certificates have been copied"
|
||||
fi
|
||||
|
||||
if ! [ -f /acme.sh/renewer-setup ]; then
|
||||
echo "Performing initial setup"
|
||||
/opt/scripts/initial-setup.sh
|
||||
fi
|
||||
|
||||
echo "Renewer welcomes you"
|
||||
|
||||
# trap 'exit' INT TODO something like this
|
||||
/entry.sh daemon
|
17
scripts/initial-setup.sh
Normal file
17
scripts/initial-setup.sh
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
: "${DOMAINS?Error: DOMAINS environment variable is not set.}"
|
||||
|
||||
acme.sh --register-account --server $ACME_SERVER
|
||||
|
||||
for domain in ${DOMAINS//,/ }; do
|
||||
acme.sh --issue --standalone -d $domain --server $ACME_SERVER
|
||||
|
||||
acme.sh --install-cert -d $domain \
|
||||
--key-file /tmp/${domain}_key.pem \
|
||||
--fullchain-file /tmp/${domain}_cert.pem \
|
||||
--reloadcmd "/opt/scripts/upload-certificate.sh \"$domain\""
|
||||
done
|
||||
|
33
scripts/upload-certificate.sh
Executable file
33
scripts/upload-certificate.sh
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
|
||||
#set -euo pipefail
|
||||
|
||||
domain=$1
|
||||
: "${1?Error: Please specify a domain.}"
|
||||
|
||||
PRIVATE_KEY_FILE=/tmp/${domain}_key.pem
|
||||
CERTIFICATE_FILE=/tmp/${domain}_cert.pem
|
||||
|
||||
env | while read -r line; do
|
||||
case "$line" in
|
||||
SERVER_*)
|
||||
;;
|
||||
*)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
value="${line#*=}"
|
||||
|
||||
url="${value%% *}"
|
||||
key="${value#* }"
|
||||
|
||||
echo "Uploading to $url"
|
||||
|
||||
curl -H "Authorization: Bearer $key" -X POST -F "private_key=@$PRIVATE_KEY_FILE" -F "certificate=@$CERTIFICATE_FILE" $url/certificate/$domain
|
||||
curl -H "Authorization: Bearer $key" $url/reload
|
||||
done
|
||||
|
||||
rm $PRIVATE_KEY_FILE $CERTIFICATE_FILE
|
||||
|
||||
touch /acme.sh/renewer-setup
|
Loading…
Add table
Add a link
Reference in a new issue