Add traefik
This commit is contained in:
parent
77fcf82e9e
commit
ac67029cea
36
.gitignore
vendored
Normal file
36
.gitignore
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/macos
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=macos
|
||||
|
||||
### macOS ###
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
### macOS Patch ###
|
||||
# iCloud generated files
|
||||
*.icloud
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/macos
|
@ -1,3 +1,4 @@
|
||||
# docker-compose-collection
|
||||
# Docker-compose-collection
|
||||
|
||||
Each folder store my used service configuration
|
||||
|
||||
docker-compose.yaml collection
|
28
traefik/docker-compose.yaml
Normal file
28
traefik/docker-compose.yaml
Normal file
@ -0,0 +1,28 @@
|
||||
# Please replace xxx with your configuraiton
|
||||
|
||||
version: "3"
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
container_name: traefik
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- CLOUDFLARE_EMAIL=xxx@xxx
|
||||
- CLOUDFLARE_DNS_API_TOKEN=xxx
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./certs:/letsencrypt
|
||||
- ./dashboard_authfile:/dashboard_authfile:ro
|
||||
- ./dynamic.yml:/dynamic.yml
|
||||
- ./traefik.yml:/traefik.yml:ro
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- 'traefik.http.routers.traefik.rule=Host(`xxx.domain`)'
|
||||
- "traefik.http.routers.traefik.entrypoints=websecure"
|
||||
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.traefik.service=api@internal"
|
||||
- 'traefik.http.routers.traefik.middlewares=strip,basic-auth-global'
|
||||
- 'traefik.http.middlewares.strip.stripprefix.prefixes=/traefik'
|
||||
- "traefik.http.services.traefik.loadbalancer.server.port=443"
|
||||
- "traefik.http.middlewares.basic-auth-global.basicauth.usersfile=/dashboard_authfile"
|
14
traefik/dynamic.yml
Normal file
14
traefik/dynamic.yml
Normal file
@ -0,0 +1,14 @@
|
||||
http:
|
||||
routers:
|
||||
nextcloud:
|
||||
rule: Host(`subservice.xxx.domain`)
|
||||
service: subservice
|
||||
entryPoints: ["websecure"]
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
services:
|
||||
subservice:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: http://192.168.xxx.xxx
|
22
traefik/readme.md
Normal file
22
traefik/readme.md
Normal file
@ -0,0 +1,22 @@
|
||||
# Traefik configutaion
|
||||
|
||||
I personally use this Traefik stack to serve my self-hosted service
|
||||
|
||||
* Split the static configuration and dynamic configuration
|
||||
* Enable experimental https3
|
||||
* File provider options in dynamic.yml (Used to customize Non-docker service)
|
||||
* Enable the Wildcard Lets encrypt with Cloudflare API
|
||||
* DNS challenge with no port open need
|
||||
* Widcard options in traefik.yml
|
||||
* Enable and encrypt the traefik dashboard with authfile
|
||||
|
||||
I disabled the auto proxy to newly added docker container in traefik. Just add the label in each container.
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.subservice.rule=Host(`subservice.xxx.domain`)"
|
||||
- "traefik.http.routers.subservice.entrypoints=websecure"
|
||||
- "traefik.http.routers.subservice.tls.certresolver=letsencrypt"
|
||||
```
|
||||
|
48
traefik/traefik.yml
Normal file
48
traefik/traefik.yml
Normal file
@ -0,0 +1,48 @@
|
||||
## STATIC CONFIGURATION
|
||||
log:
|
||||
level: INFO
|
||||
|
||||
api:
|
||||
insecure: false
|
||||
dashboard: true
|
||||
|
||||
experimental:
|
||||
http3: true
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80" # Create the HTTP entrypoint on port 80
|
||||
http:
|
||||
redirections: # HTTPS redirection (80 to 443)
|
||||
entryPoint:
|
||||
to: "websecure" # The target element
|
||||
scheme: "https"
|
||||
# The redirection target scheme
|
||||
websecure:
|
||||
address: ":443"
|
||||
http:
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
domains:
|
||||
- main: '*.xxx.domain'
|
||||
sans:
|
||||
- xxx.domain
|
||||
http3: {}
|
||||
|
||||
global:
|
||||
checknewversion: false # Periodically check if a new version has been released.
|
||||
sendanonymoususage: false # Periodically send anonymous usage statistics.
|
||||
|
||||
providers:
|
||||
docker:
|
||||
exposedByDefault: false
|
||||
file:
|
||||
filename: "/dynamic.yml"
|
||||
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
acme:
|
||||
email: xxx@xxx
|
||||
storage: /letsencrypt/acme.json
|
||||
dnsChallenge:
|
||||
provider: cloudflare
|
Loading…
Reference in New Issue
Block a user