Initial homelab infrastructure
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v2.11
|
||||
container_name: traefik
|
||||
restart: always
|
||||
command:
|
||||
- "--api.dashboard=true"
|
||||
- "--api.insecure=false"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--providers.docker.network=homelab"
|
||||
- "--providers.file.filename=/etc/traefik/dynamic.yml"
|
||||
- "--providers.file.watch=true"
|
||||
- "--entrypoints.web.address=:80"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--certificatesresolvers.leresolver.acme.httpchallenge=true"
|
||||
- "--certificatesresolvers.leresolver.acme.httpchallenge.entrypoint=web"
|
||||
- "--certificatesresolvers.leresolver.acme.email=${ACME_EMAIL}"
|
||||
- "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json"
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
- "./letsencrypt:/letsencrypt"
|
||||
- "./traefik.yml:/traefik.yml:ro"
|
||||
- "./dynamic.yml:/etc/traefik/dynamic.yml:ro"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.traefik.rule=Host(`traefik.zea.lt`)"
|
||||
- "traefik.http.routers.traefik.entrypoints=websecure"
|
||||
- "traefik.http.routers.traefik.tls.certresolver=leresolver"
|
||||
- "traefik.http.routers.traefik.service=api@internal"
|
||||
- "traefik.http.routers.traefik.middlewares=auth@file"
|
||||
- "com.centurylinklabs.watchtower.enable=false"
|
||||
networks:
|
||||
- homelab
|
||||
|
||||
networks:
|
||||
homelab:
|
||||
name: homelab
|
||||
driver: bridge
|
||||
@@ -0,0 +1,20 @@
|
||||
# Copy to dynamic.yml and add your htpasswd line.
|
||||
# Generate: htpasswd -nb username password
|
||||
|
||||
http:
|
||||
routers:
|
||||
traefik-dashboard:
|
||||
rule: "Host(`traefik.zea.lt`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: api@internal
|
||||
tls:
|
||||
certResolver: leresolver
|
||||
middlewares:
|
||||
- auth
|
||||
|
||||
middlewares:
|
||||
auth:
|
||||
basicAuth:
|
||||
users:
|
||||
- "USERNAME:$apr1$HASH$YOUR_HASH_HERE"
|
||||
@@ -0,0 +1,29 @@
|
||||
# traefik/traefik.yml
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: false
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
websecure:
|
||||
address: ":443"
|
||||
|
||||
providers:
|
||||
docker:
|
||||
endpoint: "unix:///var/run/docker.sock"
|
||||
exposedByDefault: false
|
||||
|
||||
file:
|
||||
filename: /etc/traefik/dynamic.yml
|
||||
watch: true
|
||||
|
||||
certificatesResolvers:
|
||||
leresolver:
|
||||
acme:
|
||||
# Email set via traefik/docker-compose command (ACME_EMAIL env)
|
||||
email: placeholder@example.com
|
||||
storage: /letsencrypt/acme.json
|
||||
httpChallenge:
|
||||
entryPoint: web
|
||||
|
||||
Reference in New Issue
Block a user