Thanks for watching this video! Below is the code samples you’re looking for; enjoy!
AWS Route53: DNS Resolver IAM policy example:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:GetChange",
"route53:ChangeResourceRecordSets",
"route53:ListResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/*",
"arn:aws:route53:::change/*"
]
},
{
"Effect": "Allow",
"Action": "route53:ListHostedZonesByName",
"Resource": "*"
}
]
}
Next, here’s your docker-compose.yml
and its’ corresponding .env
variables files. Don’t forget that if you’re following this full example, these files for Traefik need to live in a folder named traefik
in order for the bits later to line up.
version: '3.9'
networks:
proxy:
volumes:
traefik-letsencrypt:
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
ports:
- "80:80"
- "443:443"
networks:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- traefik-letsencrypt:/letsencrypt
- ./traefik.yml:/etc/traefik/traefik.yml
- ./file-provider.yml:/dynamic/conf/file-provider.yml
labels:
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`traefik.yourdomain.com`)
- traefik.http.routers.traefik.tls=true
- traefik.http.routers.traefik.tls.certresolver=le
- traefik.http.routers.traefik.service=api@internal
- traefik.http.services.api.loadbalancer.server.port=8080
# - traefik.http.routers.traefik.middlewares=authentik@file
## yourdomain.com cert
- traefik.http.routers.traefik.tls.domains[6].main=yourdomain.com
- traefik.http.routers.traefik.tls.domains[6].sans=*.yourdomain.com
environment:
- AWS_ACCESS_KEY_ID=${AWS_KEY}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET}
- AWS_REGION=${AWS_REGION}
.env
file:
AWS_KEY=xxxxxxxxxxxx
AWS_SECRET=xxxxxxxxxxxx
AWS_REGION=us-west-2 #doesn't matter, as Route53 is a global service
Next, we need our Traefik config file, traefik.yml
:
api:
insecure: true
dashboard: true
debug: true
log:
level: error
serversTransport:
insecureSkipVerify: true
providers:
docker:
network: "proxy"
exposedByDefault: false
file:
filename: "/dynamic/conf/file-provider.yml"
watch: true
entrypoints:
web:
address: :80
http:
redirections:
entryPoint:
to: websecured
scheme: https
websecured:
address: :443
certificatesresolvers:
le:
acme:
dnschallenge:
provider: route53
email: "info@yourdomain.com"
storage: "/letsencrypt/acme.json"
and your file-provider.yml
:
http:
routers:
some-webservice:
tls: true
service: service-name
rule: "Host(`someservice.yourdomain.com`)"
services:
service-name:
loadBalancer:
servers:
- url: "http://172.26.10.137:11000"
tcp:
routers:
some-tcp:
tls: true
service: service-name-tcp
rule: "HostSNI(`service.yourdomain.com`)"
services:
service-name-tcp:
loadBalancer:
servers:
- address: 172.26.10.137:3478
udp:
routers:
some-service-udp:
entrypoints:
- some-service-udp
service: some-service-udp
services:
some-service-udp:
loadbalancer:
servers:
- address: 172.26.10.137:3478
.. and finally, your whoami
container, which is just a simple docker-compose.yml
(in it’s own directory, don’t forget that!); just swap in your domain name.
version: "3.9"
networks:
traefik_proxy:
external: true
services:
whoami:
image: traefik/whoami
container_name: whoami
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- traefik_proxy
labels:
- "traefik.enable=true"
## HTTP Routers
- "traefik.http.routers.whoami-test-rtr.rule=Host(`whoami.yourdomain.com`)"
- "traefik.http.routers.whoami-test-rtr.entrypoints=websecured"
- "traefik.http.routers.whoami-test-rtr.tls=true"
- "traefik.http.routers.whoami-test-rtr.tls.certresolver=le"
- "traefik.http.services.whoami-test-rtr.loadbalancer.server.port=80"
That’s it! If you run in to any problems, be sure to watch the video back in detail, and you are always welcome to ask questions in the video comments. Cheers!
~OMG
Recent Comments