atareao hat die Gist bearbeitet 2 days ago. Zu Änderung gehen
1 file changed, 1 insertion, 2 deletions
traefik.container
| @@ -20,11 +20,10 @@ PublishPort=8443:8443/tcp | |||
| 20 | 20 | # SecurityLabelDisable=true | |
| 21 | 21 | ||
| 22 | 22 | # Volúmenes montados | |
| 23 | - | Volume=%t/podman/podman.sock:%t/podman/podman.sock:ro | |
| 23 | + | Volume=/run/user/1002/podman/podman.sock:/run/user/1002/podman/podman.sock:ro | |
| 24 | 24 | Volume=%h/traefik/data/traefik.yml:/etc/traefik/traefik.yml:ro | |
| 25 | 25 | Volume=%h/traefik/data/config.yml:/etc/traefik/config.yml:ro | |
| 26 | 26 | Volume=%h/traefik/data/acme.json:/etc/traefik/acme.json | |
| 27 | - | Volume=%h/traefik/logs:/logs | |
| 28 | 27 | ||
| 29 | 28 | [Install] | |
| 30 | 29 | WantedBy=default.target | |
atareao hat die Gist bearbeitet 3 days ago. Zu Änderung gehen
1 file changed
gistfile3.txt umbenannt zu traefik.container
Datei ohne Änderung umbenannt
atareao hat die Gist bearbeitet 3 days ago. Zu Änderung gehen
Keine Änderungen
atareao hat die Gist bearbeitet 3 days ago. Zu Änderung gehen
9 files changed, 195 insertions
gistfile3.txt(Datei erstellt)
| @@ -0,0 +1,30 @@ | |||
| 1 | + | [Unit] | |
| 2 | + | Description=Servicio Proxy Inverso Traefik con Podman | |
| 3 | + | After=network-online.target | |
| 4 | + | Requires=proxy-network.service | |
| 5 | + | ||
| 6 | + | [Container] | |
| 7 | + | Image=docker.io/library/traefik:v3.7.15 | |
| 8 | + | ContainerName=traefik | |
| 9 | + | Environment=TZ=Europe/Madrid | |
| 10 | + | Environment=CF_DNS_API_TOKEN=cfut_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx | |
| 11 | + | Network=proxy.network | |
| 12 | + | ||
| 13 | + | LogDriver=journald | |
| 14 | + | ||
| 15 | + | # Mapeo de puertos | |
| 16 | + | PublishPort=8443:8443/tcp | |
| 17 | + | # PublishPort=8443:8443/udp | |
| 18 | + | ||
| 19 | + | # Deshabilitar SELinux/AppArmor labels para acceder al socket de podman | |
| 20 | + | # SecurityLabelDisable=true | |
| 21 | + | ||
| 22 | + | # Volúmenes montados | |
| 23 | + | Volume=%t/podman/podman.sock:%t/podman/podman.sock:ro | |
| 24 | + | Volume=%h/traefik/data/traefik.yml:/etc/traefik/traefik.yml:ro | |
| 25 | + | Volume=%h/traefik/data/config.yml:/etc/traefik/config.yml:ro | |
| 26 | + | Volume=%h/traefik/data/acme.json:/etc/traefik/acme.json | |
| 27 | + | Volume=%h/traefik/logs:/logs | |
| 28 | + | ||
| 29 | + | [Install] | |
| 30 | + | WantedBy=default.target | |
haproxy.cfg(Datei erstellt)
| @@ -0,0 +1,44 @@ | |||
| 1 | + | global | |
| 2 | + | log /dev/log local0 debug | |
| 3 | + | log /dev/log local1 notice | |
| 4 | + | chroot /var/lib/haproxy | |
| 5 | + | stats socket /run/haproxy/admin.sock mode 660 level admin | |
| 6 | + | stats timeout 30s | |
| 7 | + | user haproxy | |
| 8 | + | group haproxy | |
| 9 | + | daemon | |
| 10 | + | ||
| 11 | + | # Default SSL material locations | |
| 12 | + | ca-base /etc/ssl/certs | |
| 13 | + | crt-base /etc/ssl/private | |
| 14 | + | ||
| 15 | + | # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate | |
| 16 | + | ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 | |
| 17 | + | ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 | |
| 18 | + | ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets | |
| 19 | + | ||
| 20 | + | defaults | |
| 21 | + | log global | |
| 22 | + | mode tcp | |
| 23 | + | option tcplog | |
| 24 | + | option dontlognull | |
| 25 | + | timeout connect 5s | |
| 26 | + | timeout client 50s | |
| 27 | + | timeout server 50s | |
| 28 | + | ||
| 29 | + | frontend http_in | |
| 30 | + | bind :80 | |
| 31 | + | mode http | |
| 32 | + | # Redirige todo el tráfico entrante de HTTP a HTTPS conservando la URL original | |
| 33 | + | redirect scheme https code 301 if !{ ssl_fc } | |
| 34 | + | ||
| 35 | + | frontend https_in | |
| 36 | + | bind :443 | |
| 37 | + | mode tcp | |
| 38 | + | default_backend traefik_backend | |
| 39 | + | ||
| 40 | + | backend traefik_backend | |
| 41 | + | mode tcp | |
| 42 | + | log global | |
| 43 | + | # Envía el tráfico a Traefik agregando el protocolo PROXY (v2) | |
| 44 | + | server traefik 127.0.0.1:8443 send-proxy-v2 | |
proxy.network(Datei erstellt)
| @@ -0,0 +1,5 @@ | |||
| 1 | + | [Unit] | |
| 2 | + | Description=Red interna de comunicación entre Traefik y Servicios | |
| 3 | + | ||
| 4 | + | [Network] | |
| 5 | + | NetworkName=proxy | |
traefik.yml(Datei erstellt)
| @@ -0,0 +1,45 @@ | |||
| 1 | + | global: | |
| 2 | + | checkNewVersion: false | |
| 3 | + | sendAnonymousUsage: false | |
| 4 | + | ||
| 5 | + | log: | |
| 6 | + | level: INFO | |
| 7 | + | ||
| 8 | + | accessLog: | |
| 9 | + | filePath: "" # Vacio para volcar a stdout/journald | |
| 10 | + | format: json | |
| 11 | + | filters: | |
| 12 | + | statusCodes: | |
| 13 | + | - "400-499" # Captura errores de autenticación y accesos no autorizados | |
| 14 | + | api: | |
| 15 | + | dashboard: false | |
| 16 | + | insecure: false | |
| 17 | + | ||
| 18 | + | entryPoints: | |
| 19 | + | websecure: | |
| 20 | + | address: ":8443" | |
| 21 | + | proxyProtocol: | |
| 22 | + | trustedIPs: | |
| 23 | + | - "127.0.0.1/32" | |
| 24 | + | - "10.89.0.0/16" | |
| 25 | + | ||
| 26 | + | providers: | |
| 27 | + | docker: | |
| 28 | + | endpoint: "unix:///run/user/1002/podman/podman.sock" | |
| 29 | + | exposedByDefault: false | |
| 30 | + | file: | |
| 31 | + | filename: "/etc/traefik/config.yml" | |
| 32 | + | watch: true | |
| 33 | + | ||
| 34 | + | certificatesResolvers: | |
| 35 | + | cloudflare: | |
| 36 | + | acme: | |
| 37 | + | email: "tu-email@servidor.es" | |
| 38 | + | storage: "/etc/traefik/acme.json" | |
| 39 | + | dnsChallenge: | |
| 40 | + | provider: cloudflare | |
| 41 | + | propagation: | |
| 42 | + | delayBeforeChecks: 10s | |
| 43 | + | resolvers: | |
| 44 | + | - "1.1.1.1:53" | |
| 45 | + | - "8.8.8.8:53" | |
umami-db-data.volume(Datei erstellt)
| @@ -0,0 +1,5 @@ | |||
| 1 | + | [Unit] | |
| 2 | + | Description=Volumen de datos persistente para Umami PostgreSQL | |
| 3 | + | ||
| 4 | + | [Volume] | |
| 5 | + | VolumeName=umami-db-data | |
umami-db.container(Datei erstellt)
| @@ -0,0 +1,19 @@ | |||
| 1 | + | [Unit] | |
| 2 | + | Description=Base de Datos PostgreSQL para Umami | |
| 3 | + | After=proxy-network.service | |
| 4 | + | ||
| 5 | + | [Container] | |
| 6 | + | Image=docker.io/library/postgres:17-alpine | |
| 7 | + | ContainerName=umami-db | |
| 8 | + | Network=umami.network | |
| 9 | + | ||
| 10 | + | # Variables de entorno de PostgreSQL | |
| 11 | + | Environment=POSTGRES_DB=umami | |
| 12 | + | Environment=POSTGRES_USER=umami | |
| 13 | + | Environment=POSTGRES_PASSWORD=password | |
| 14 | + | ||
| 15 | + | # Montaje del volumen persistente de datos | |
| 16 | + | Volume=umami-db-data.volume:/var/lib/postgresql/data | |
| 17 | + | ||
| 18 | + | [Install] | |
| 19 | + | WantedBy=default.target | |
umami.container(Datei erstellt)
| @@ -0,0 +1,26 @@ | |||
| 1 | + | [Unit] | |
| 2 | + | Description=Servicio de Analítica Umami | |
| 3 | + | After=umami-db.service umami-network.service proxy-network.service | |
| 4 | + | ||
| 5 | + | [Container] | |
| 6 | + | Image=ghcr.io/umami-software/umami:postgresql-latest | |
| 7 | + | ContainerName=umami | |
| 8 | + | Network=umami.network | |
| 9 | + | Network=proxy | |
| 10 | + | ||
| 11 | + | Environment=DATABASE_URL=postgresql://umami:password@umami-db:5432/umami | |
| 12 | + | Environment=APP_SECRET=tu_hash_aleatorio_largo | |
| 13 | + | ||
| 14 | + | # Le indica a Umami qué cabecera HTTP contiene la IP real del cliente | |
| 15 | + | Environment=CLIENT_IP_HEADER=cf-connecting-ip | |
| 16 | + | ||
| 17 | + | # Etiquetas de Traefik | |
| 18 | + | Label=traefik.enable=true | |
| 19 | + | Label=traefik.http.routers.umami.rule=Host(`umami.servidor.es`) | |
| 20 | + | Label=traefik.http.routers.umami.entrypoints=websecure | |
| 21 | + | Label=traefik.http.routers.umami.tls=true | |
| 22 | + | Label=traefik.http.routers.umami.tls.certresolver=cloudflare | |
| 23 | + | Label=traefik.http.services.umami.loadbalancer.server.port=3000 | |
| 24 | + | ||
| 25 | + | [Install] | |
| 26 | + | WantedBy=default.target | |
umami.network(Datei erstellt)
| @@ -0,0 +1,2 @@ | |||
| 1 | + | [Network] | |
| 2 | + | NetworkName=umami | |
whoami.container(Datei erstellt)
| @@ -0,0 +1,19 @@ | |||
| 1 | + | [Unit] | |
| 2 | + | Description=Contenedor Whoami de prueba para Traefik | |
| 3 | + | After=traefik.service | |
| 4 | + | Requires=traefik.service | |
| 5 | + | ||
| 6 | + | [Container] | |
| 7 | + | Image=docker.io/traefik/whoami | |
| 8 | + | ContainerName=whoami | |
| 9 | + | Network=proxy.network | |
| 10 | + | ||
| 11 | + | # Etiquetas de Traefik para autodescubrimiento | |
| 12 | + | Label=traefik.enable=true | |
| 13 | + | Label=traefik.http.routers.whoami.rule=Host(`whoami.servidor.es`) | |
| 14 | + | Label=traefik.http.routers.whoami.entrypoints=websecure | |
| 15 | + | Label=traefik.http.routers.whoami.tls.certresolver=cloudflare | |
| 16 | + | Label=traefik.docker.network=proxy | |
| 17 | + | ||
| 18 | + | [Install] | |
| 19 | + | WantedBy=default.target | |