Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Acme Companion | 7,043 | 4 days ago | 62 | mit | Shell | |||||
Automated ACME SSL certificate generation for nginx-proxy | ||||||||||
Acmetool | 1,995 | 1 | 4 months ago | 43 | March 17, 2021 | 71 | Go | |||
:lock: acmetool, an automatic certificate acquisition tool for ACME (Let's Encrypt) | ||||||||||
Certify | 1,387 | 9 days ago | 18 | other | C# | |||||
Professional ACME Client for Windows. Certificate Management UI, powered by Let's Encrypt and compatible with all ACME v2 CAs. Download from certifytheweb.com | ||||||||||
Docker Nginx Certbot | 670 | 10 days ago | 4 | mit | Shell | |||||
Automatically create and renew website certificates for free using the Let's Encrypt certificate authority. | ||||||||||
Certes | 451 | 14 | 21 | 9 months ago | 52 | October 04, 2021 | 12 | mit | C# | |
A client implementation for the Automated Certificate Management Environment (ACME) protocol | ||||||||||
Crypt Le | 336 | 6 months ago | 6 | artistic-2.0 | Perl | |||||
Crypt::LE - Let's Encrypt / Buypass / ZeroSSL and other ACME-servers client and library in Perl for obtaining free SSL certificates (inc. generating RSA/ECC keys and CSRs). HTTP/DNS verification is supported out of the box, EAB (External Account Binding) supported, easily extended with plugins, easily dockerized. | ||||||||||
Acme Nginx | 288 | 1 | a year ago | 13 | April 28, 2022 | 5 | gpl-3.0 | Python | ||
python acme client for nginx | ||||||||||
Agnos | 274 | 19 days ago | 8 | mit | Rust | |||||
Obtain (wildcard) certificates from let's encrypt using dns-01 without the need for API access to your DNS provider. | ||||||||||
Pki | 269 | 18 hours ago | 954 | gpl-2.0 | Java | |||||
The Dogtag Certificate System is an enterprise-class Certificate Authority (CA) which supports all aspects of certificate lifecycle management, including key archival, OCSP and smartcard management. | ||||||||||
Tipi | 230 | 1 | 2 months ago | 23 | March 03, 2022 | 2 | mit | Ruby | ||
Tipi - the All-in-one Web Server for Ruby Apps |
acme-companion is a lightweight companion container for nginx-proxy.
It handles the automated creation, renewal and use of SSL certificates for proxied Docker containers through the ACME protocol.
Required read if you use the latest
version : the v2.0.0
release of this project mark the switch of the ACME client used by the Docker image from simp.le to acme.sh. This switch result in some backward incompatible changes, so please read this issue and the updated docs for more details before updating your image. The single most important change is that the container now requires a volume mounted to /etc/acme.sh
in order to persist ACME account keys and SSL certificates. The last tagged version that uses simp_le is v1.13.1
.
http-01
challenge only.80
and 443
.80
as that will prevent http-01
challenges from completing.HTTPS_METHOD=nohttp
.80
and 443
.Three writable volumes must be declared on the nginx-proxy container so that they can be shared with the acme-companion container:
/etc/nginx/certs
to store certificates and private keys (readonly for the nginx-proxy container)./etc/nginx/vhost.d
to change the configuration of vhosts (required so the CA may access http-01
challenge files)./usr/share/nginx/html
to write http-01
challenge files.Additionally, a fourth volume must be declared on the acme-companion container to store acme.sh
configuration and state: /etc/acme.sh
.
Please also read the doc about data persistence.
Example of use:
Start nginx-proxy with the three additional volumes declared:
$ docker run --detach \
--name nginx-proxy \
--publish 80:80 \
--publish 443:443 \
--volume certs:/etc/nginx/certs \
--volume vhost:/etc/nginx/vhost.d \
--volume html:/usr/share/nginx/html \
--volume /var/run/docker.sock:/tmp/docker.sock:ro \
nginxproxy/nginx-proxy
Binding the host docker socket (/var/run/docker.sock
) inside the container to /tmp/docker.sock
is a requirement of nginx-proxy.
Start the acme-companion container, getting the volumes from nginx-proxy with --volumes-from
:
$ docker run --detach \
--name nginx-proxy-acme \
--volumes-from nginx-proxy \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
--volume acme:/etc/acme.sh \
--env "DEF[email protected]" \
nginxproxy/acme-companion
The host docker socket has to be bound inside this container too, this time to /var/run/docker.sock
.
Albeit optional, it is recommended to provide a valid default email address through the DEFAULT_EMAIL
environment variable, so that Let's Encrypt can warn you about expiring certificates and allow you to recover your account.
Once both nginx-proxy and acme-companion containers are up and running, start any container you want proxied with environment variables VIRTUAL_HOST
and LETSENCRYPT_HOST
both set to the domain(s) your proxied container is going to use.
VIRTUAL_HOST
control proxying by nginx-proxy and LETSENCRYPT_HOST
control certificate creation and SSL enabling by acme-companion.
Certificates will only be issued for containers that have both VIRTUAL_HOST
and LETSENCRYPT_HOST
variables set to domain(s) that correctly resolve to the host, provided the host is publicly reachable.
$ docker run --detach \
--name your-proxied-app \
--env "VIRTUAL_HOST=subdomain.yourdomain.tld" \
--env "LETSENCRYPT_HOST=subdomain.yourdomain.tld" \
nginx
The containers being proxied must expose the port to be proxied, either by using the EXPOSE
directive in their Dockerfile or by using the --expose
flag to docker run
or docker create
.
If the proxied container listen on and expose another port than the default 80
, you can force nginx-proxy to use this port with the VIRTUAL_PORT
environment variable.
Example using Grafana (expose and listen on port 3000):
$ docker run --detach \
--name grafana \
--env "VIRTUAL_HOST=othersubdomain.yourdomain.tld" \
--env "VIRTUAL_PORT=3000" \
--env "LETSENCRYPT_HOST=othersubdomain.yourdomain.tld" \
--env "[email protected]" \
grafana/grafana
Repeat Step 3 for any other container you want to proxy.
Please check the docs section.