mirror of
				https://github.com/traefik/traefik.git
				synced 2025-10-31 16:31:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: "Traefik Docker TLS Challenge Documentation"
 | |
| description: "Learn how to create a certificate with the Let's Encrypt TLS challenge to use HTTPS on a service exposed with Traefik Proxy. Read the technical documentation."
 | |
| ---
 | |
| 
 | |
| # Docker-compose with Let's Encrypt: TLS Challenge
 | |
| 
 | |
| This guide aims to demonstrate how to create a certificate with the Let's Encrypt TLS challenge to use https on a simple service exposed with Traefik.  
 | |
| Please also read the [basic example](../basic-example/) for details on how to expose such a service.  
 | |
| 
 | |
| ## Prerequisite
 | |
| 
 | |
| For the TLS challenge you will need:
 | |
| 
 | |
| - A publicly accessible host allowing connections on port `443` with docker & docker-compose installed.
 | |
| - A DNS record with the domain you want to expose pointing to this host.
 | |
| 
 | |
| ## Setup
 | |
| 
 | |
| - Create a `docker-compose.yml` on your remote server with the following content:
 | |
| 
 | |
| ```yaml
 | |
| --8<-- "content/user-guides/docker-compose/acme-tls/docker-compose.yml"
 | |
| ```
 | |
| 
 | |
| - Replace `postmaster@example.com` by your **own email** within the `certificatesresolvers.myresolver.acme.email` command line argument of the `traefik` service.
 | |
| - Replace `whoami.example.com` by your **own domain** within the `traefik.http.routers.whoami.rule` label of the `whoami` service.
 | |
| - Optionally uncomment the following lines if you want to test/debug:
 | |
| 
 | |
| 	```yaml
 | |
| 	#- "--log.level=DEBUG"
 | |
| 	#- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
 | |
| 	```
 | |
| 
 | |
| - Run `docker compose up -d` within the folder where you created the previous file.
 | |
| - Wait a bit and visit `https://your_own_domain` to confirm everything went fine.
 | |
| 
 | |
| !!! Note
 | |
| 
 | |
|     If you uncommented the `acme.caserver` line, you will get an SSL error, but if you display the certificate and see it was emitted by `Fake LE Intermediate X1` then it means all is good.
 | |
|     (It is the staging environment intermediate certificate used by Let's Encrypt).
 | |
|     You can now safely comment the `acme.caserver` line, remove the `letsencrypt/acme.json` file and restart Traefik to issue a valid certificate.
 | |
| 
 | |
| ## Explanation
 | |
| 
 | |
| What changed between the basic example:
 | |
| 
 | |
| - We replace the `web` entry point by one for the https traffic:
 | |
| 
 | |
| ```yaml
 | |
| command:
 | |
|   # Traefik will listen to incoming request on the port 443 (https)
 | |
|   - "--entryPoints.websecure.address=:443"
 | |
| ports:
 | |
|   - "443:443"
 | |
| ```
 | |
| 
 | |
| - We configure the TLS Let's Encrypt challenge:
 | |
| 
 | |
| ```yaml
 | |
| command:
 | |
|   # Enable a tls challenge named "myresolver"
 | |
|   - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
 | |
| ```
 | |
| 
 | |
| - We add a volume to store our certificates:
 | |
| 
 | |
| ```yaml
 | |
| volumes:
 | |
|   # Create a letsencrypt dir within the folder where the docker-compose file is
 | |
|   - "./letsencrypt:/letsencrypt"
 | |
| 
 | |
| command:
 | |
|   # Tell to store the certificate on a path under our volume
 | |
|   - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
 | |
| ```
 | |
| 
 | |
| - We configure the `whoami` service to tell Traefik to use the certificate resolver named `myresolver` we just configured:
 | |
| 
 | |
| ```yaml
 | |
| labels:
 | |
|   # Uses the Host rule to define which certificate to issue
 | |
|   - "traefik.http.routers.whoami.tls.certresolver=myresolver"
 | |
| ```
 | |
| 
 | |
| {!traefik-for-business-applications.md!}
 |