Last active 2 days ago

haproxy.cfg Raw
1global
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
20defaults
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
29frontend 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
35frontend https_in
36 bind :443
37 mode tcp
38 default_backend traefik_backend
39
40backend 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 Raw
1[Unit]
2Description=Red interna de comunicación entre Traefik y Servicios
3
4[Network]
5NetworkName=proxy
traefik.container Raw
1[Unit]
2Description=Servicio Proxy Inverso Traefik con Podman
3After=network-online.target
4Requires=proxy-network.service
5
6[Container]
7Image=docker.io/library/traefik:v3.7.15
8ContainerName=traefik
9Environment=TZ=Europe/Madrid
10Environment=CF_DNS_API_TOKEN=cfut_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
11Network=proxy.network
12
13LogDriver=journald
14
15# Mapeo de puertos
16PublishPort=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
23Volume=/run/user/1002/podman/podman.sock:/run/user/1002/podman/podman.sock:ro
24Volume=%h/traefik/data/traefik.yml:/etc/traefik/traefik.yml:ro
25Volume=%h/traefik/data/config.yml:/etc/traefik/config.yml:ro
26Volume=%h/traefik/data/acme.json:/etc/traefik/acme.json
27
28[Install]
29WantedBy=default.target
traefik.yml Raw
1global:
2 checkNewVersion: false
3 sendAnonymousUsage: false
4
5log:
6 level: INFO
7
8accessLog:
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
14api:
15 dashboard: false
16 insecure: false
17
18entryPoints:
19 websecure:
20 address: ":8443"
21 proxyProtocol:
22 trustedIPs:
23 - "127.0.0.1/32"
24 - "10.89.0.0/16"
25
26providers:
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
34certificatesResolvers:
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 Raw
1[Unit]
2Description=Volumen de datos persistente para Umami PostgreSQL
3
4[Volume]
5VolumeName=umami-db-data
umami-db.container Raw
1[Unit]
2Description=Base de Datos PostgreSQL para Umami
3After=proxy-network.service
4
5[Container]
6Image=docker.io/library/postgres:17-alpine
7ContainerName=umami-db
8Network=umami.network
9
10# Variables de entorno de PostgreSQL
11Environment=POSTGRES_DB=umami
12Environment=POSTGRES_USER=umami
13Environment=POSTGRES_PASSWORD=password
14
15# Montaje del volumen persistente de datos
16Volume=umami-db-data.volume:/var/lib/postgresql/data
17
18[Install]
19WantedBy=default.target
umami.container Raw
1[Unit]
2Description=Servicio de Analítica Umami
3After=umami-db.service umami-network.service proxy-network.service
4
5[Container]
6Image=ghcr.io/umami-software/umami:postgresql-latest
7ContainerName=umami
8Network=umami.network
9Network=proxy
10
11Environment=DATABASE_URL=postgresql://umami:password@umami-db:5432/umami
12Environment=APP_SECRET=tu_hash_aleatorio_largo
13
14# Le indica a Umami qué cabecera HTTP contiene la IP real del cliente
15Environment=CLIENT_IP_HEADER=cf-connecting-ip
16
17# Etiquetas de Traefik
18Label=traefik.enable=true
19Label=traefik.http.routers.umami.rule=Host(`umami.servidor.es`)
20Label=traefik.http.routers.umami.entrypoints=websecure
21Label=traefik.http.routers.umami.tls=true
22Label=traefik.http.routers.umami.tls.certresolver=cloudflare
23Label=traefik.http.services.umami.loadbalancer.server.port=3000
24
25[Install]
26WantedBy=default.target
umami.network Raw
1[Network]
2NetworkName=umami
whoami.container Raw
1[Unit]
2Description=Contenedor Whoami de prueba para Traefik
3After=traefik.service
4Requires=traefik.service
5
6[Container]
7Image=docker.io/traefik/whoami
8ContainerName=whoami
9Network=proxy.network
10
11# Etiquetas de Traefik para autodescubrimiento
12Label=traefik.enable=true
13Label=traefik.http.routers.whoami.rule=Host(`whoami.servidor.es`)
14Label=traefik.http.routers.whoami.entrypoints=websecure
15Label=traefik.http.routers.whoami.tls.certresolver=cloudflare
16Label=traefik.docker.network=proxy
17
18[Install]
19WantedBy=default.target