Docker + Traefik 2

[MaRDuK]
Y yo con estos pelos!!!
#1
Buenas, tengo una pregunta para los que useis Traefik 2:

Yo actualmente tengo montado nginx (fuera de docker) como reverse proxy. Tengo un dominio en OVH y para cada "servicio" que voy montando creo subdominios del tipo "pihole.dominio.eu". Esos dominios apuntan a otro dominio DDNS que tengo en Dyn.com y que redirige a mi IP pública. Y cada subdominio lo tengo que configurar en mi máquina nginx...

Por lo que tengo entendido con Traefik no hace falta andar creando subdominios ¿no?. Pero es algo que aún no he conseguido...
Y además, necesito poder acceder a otras máquinas de mi red (fuera de la máquina docker) y no sé cómo hacerlo...

Para que os hagais una idea tengo esto:

Servidor Proxmox (10.10.10.7)
- Máquina con NGINX (10.10.10.10)
- Máquina Debian + Docker (10.10.10.3)
- Máquina con OMV (10.10.10.8)

Desde la máquina Debian con Docker necesito acceder desde fuera a mis otras máquinas: proxmox, nginx y omv... Ya que la idea es eliminar esa máquina NGINX y dejar que Traefik 2 gestione todo. Pero estoy teniendo problemas porque los ejemplos y la documentación no me aclaran mucho ciertas cosas.

¿Alguna ayuda, experiencia?

Gracias.
[MaRDuK]
Y yo con estos pelos!!!
#2
Up!
[MaRDuK]
Y yo con estos pelos!!!
#3
Nadie? Al final tendré que pasar a Traefik 1.7 que parece que hay más ejemplos y más gente que lo utiliza...
Snoop Dogg
Perfil Verificado
#4
Cita de [MaRDuK]
Buenas, tengo una pregunta para los que useis Traefik 2:

Yo actualmente tengo montado nginx (fuera de docker) como reverse proxy. Tengo un dominio en OVH y para cada "servicio" que voy montando creo subdominios del tipo "pihole.dominio.eu". Esos dominios apuntan a otro dominio DDNS que tengo en Dyn.com y que redirige a mi IP pública. Y cada subdominio lo tengo que configurar en mi máquina nginx...

Por lo que tengo entendido con Traefik no hace falta andar creando subdominios ¿no?. Pero es algo que aún no he conseguido...
Y además, necesito poder acceder a otras máquinas de mi red (fuera de la máquina docker) y no sé cómo hacerlo...

Para que os hagais una idea tengo esto:

Servidor Proxmox (10.10.10.7)
- Máquina con NGINX (10.10.10.10)
- Máquina Debian + Docker (10.10.10.3)
- Máquina con OMV (10.10.10.8)

Desde la máquina Debian con Docker necesito acceder desde fuera a mis otras máquinas: proxmox, nginx y omv... Ya que la idea es eliminar esa máquina NGINX y dejar que Traefik 2 gestione todo. Pero estoy teniendo problemas porque los ejemplos y la documentación no me aclaran mucho ciertas cosas.

¿Alguna ayuda, experiencia?

Gracias.
Creo que esta guía resolverá tus dudas: https://www.smarthomebeginner.com/tr...cker-tutorial/
RuSaMa
Gran Miembro
#5
Cita de [MaRDuK]
Buenas, tengo una pregunta para los que useis Traefik 2:

Yo actualmente tengo montado nginx (fuera de docker) como reverse proxy. Tengo un dominio en OVH y para cada "servicio" que voy montando creo subdominios del tipo "pihole.dominio.eu". Esos dominios apuntan a otro dominio DDNS que tengo en Dyn.com y que redirige a mi IP pública. Y cada subdominio lo tengo que configurar en mi máquina nginx...

Por lo que tengo entendido con Traefik no hace falta andar creando subdominios ¿no?. Pero es algo que aún no he conseguido...
Y además, necesito poder acceder a otras máquinas de mi red (fuera de la máquina docker) y no sé cómo hacerlo...

Para que os hagais una idea tengo esto:

Servidor Proxmox (10.10.10.7)
- Máquina con NGINX (10.10.10.10)
- Máquina Debian + Docker (10.10.10.3)
- Máquina con OMV (10.10.10.8)

Desde la máquina Debian con Docker necesito acceder desde fuera a mis otras máquinas: proxmox, nginx y omv... Ya que la idea es eliminar esa máquina NGINX y dejar que Traefik 2 gestione todo. Pero estoy teniendo problemas porque los ejemplos y la documentación no me aclaran mucho ciertas cosas.

¿Alguna ayuda, experiencia?

Gracias.

Lo hiciste funcionar?


Estoy haciendo un trabajo de asir con un server OMV+docker, tengo contenedores con nextcloud, wordpress, mariadb, pihole, wireguard.... y ahora quiero poner traefik pero no encuentro una guia clara de como hacer las cosas
OrZ
ForoCoches: Miembro
#6
Cita de [MaRDuK]
Buenas, tengo una pregunta para los que useis Traefik 2:

Yo actualmente tengo montado nginx (fuera de docker) como reverse proxy. Tengo un dominio en OVH y para cada "servicio" que voy montando creo subdominios del tipo "pihole.dominio.eu". Esos dominios apuntan a otro dominio DDNS que tengo en Dyn.com y que redirige a mi IP pública. Y cada subdominio lo tengo que configurar en mi máquina nginx...

Por lo que tengo entendido con Traefik no hace falta andar creando subdominios ¿no?. Pero es algo que aún no he conseguido...
Y además, necesito poder acceder a otras máquinas de mi red (fuera de la máquina docker) y no sé cómo hacerlo...

Para que os hagais una idea tengo esto:

Servidor Proxmox (10.10.10.7)
- Máquina con NGINX (10.10.10.10)
- Máquina Debian + Docker (10.10.10.3)
- Máquina con OMV (10.10.10.8)

Desde la máquina Debian con Docker necesito acceder desde fuera a mis otras máquinas: proxmox, nginx y omv... Ya que la idea es eliminar esa máquina NGINX y dejar que Traefik 2 gestione todo. Pero estoy teniendo problemas porque los ejemplos y la documentación no me aclaran mucho ciertas cosas.

¿Alguna ayuda, experiencia?

Gracias.
Suerte! Hice el mismo camino y me quedé con NGINX. El potencial de Traefik2 es que crea los subdominios directamente con al deployar el contenedor de docker si has creado bien el stack.

Para un entorno domestico, en mi caso, no compensaba. Levante el NGNIX y desde su propioa interfaz administro subdominios y direcciones. Si quiero apuntar a un contenedor, voy contra la IP interna del docker. Si quiero algo de fuera de ese docker, contra la IP local.

Buen reflote me comí...jaja. En resumen, descarte traefik. Hay muchas alternativas más userfriendly.
Panfri
ForoCoches: Miembro
#7
Yo tengo Traefik en mi casa pero al final si creo subdominios al levantar cada contenedor configurandolo en las propiedades de cada contenedor.

Me funciona bien pero no se si es la solución que busca el OP.
[MaRDuK]
Y yo con estos pelos!!!
#8
Cita de RuSaMa
Lo hiciste funcionar?


Estoy haciendo un trabajo de asir con un server OMV+docker, tengo contenedores con nextcloud, wordpress, mariadb, pihole, wireguard.... y ahora quiero poner traefik pero no encuentro una guia clara de como hacer las cosas
Al final he preferido seguir creando subdominios para cada uno de los servicios, pero si, lo monté con Traefik 2 y docker-compose. Poco a poco, primero Traefik + Portainer y luego fui modificando el docker-compose.yml para ir añadiendo y configurando servicios.
RuSaMa
Gran Miembro
#9
Cita de [MaRDuK]
Al final he preferido seguir creando subdominios para cada uno de los servicios, pero si, lo monté con Traefik 2 y docker-compose. Poco a poco, primero Traefik + Portainer y luego fui modificando el docker-compose.yml para ir añadiendo y configurando servicios.

Que docker-compose modificas? el de traefik?


yo al tener ya varios servicios corriendo en distintos contenedores ¿Tengo que configurarlos en el docker-compose con el que voy a crear el contenedor de traefik o se pueden configurar despues en el panel web de traefik?


¿es necesario que traefik y los demas contenedores esten en la misma red?
[MaRDuK]
Y yo con estos pelos!!!
#10
Cita de RuSaMa
Que docker-compose modificas? el de traefik?


yo al tener ya varios servicios corriendo en distintos contenedores ¿Tengo que configurarlos en el docker-compose con el que voy a crear el contenedor de traefik o se pueden configurar despues en el panel web de traefik?


¿es necesario que traefik y los demas contenedores esten en la misma red?
El panel de Traefik es meramente informativo. No puedes crear nada.

Yo tengo un docker-compose único y ahí voy añadiendo servicios.

Cuando dices "dentro de la misma red" te refieres a tú red física? De todas formas depende de los contenedores y servicios que tengas te interesará tener todo bajo la misma red o en redes separadas a nivel de Traefik.
RuSaMa
Gran Miembro
#11
Cita de [MaRDuK]
El panel de Traefik es meramente informativo. No puedes crear nada.

Yo tengo un docker-compose único y ahí voy añadiendo servicios.

Cuando dices "dentro de la misma red" te refieres a tú red física? De todas formas depende de los contenedores y servicios que tengas te interesará tener todo bajo la misma red o en redes separadas a nivel de Traefik.

Me refiero dentro de la misma red Docker


Lo que no me queda claro si simplemente tengo definir mis servicios en la configuración de traefik o tengo que modificar algo en los contenedores que ya tengo creados



Puedes compartir tu archivo docker-compose?
[MaRDuK]
Y yo con estos pelos!!!
#12
Cita de RuSaMa
Me refiero dentro de la misma red Docker


Lo que no me queda claro si simplemente tengo definir mis servicios en la configuración de traefik o tengo que modificar algo en los contenedores que ya tengo creados



Puedes compartir tu archivo docker-compose?
Te paso uno que me pidió otro shur hace unos meses. Habrá cosas regular o mal pero tampoco soy un experto y me me ido quedando con lo que funciona.

Este el es compose:
***********************
version: '3'

services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
expose:
- 8080
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/traefik.yml:ro
- ./data/acme.json:/acme.json
- ./data/config.yml:/config.yml:ro
#- /opt/containers/traefik/rules:/rules:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http "
- "traefik.http.routers.traefik.rule=Host(`traef ik.m arduk.com`)"
#- "traefik.http.middlewares.traefik-auth.basicauth.users=marduk:$$2y$$05$$LhavaIzGBq8U edGuaZATvJAfeVqXWsIOE03gVQgyLrpdCgldIGL4XG"
- "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.traefik.middlewares=trae fik-https-redirect"
- "traefik.http.routers.traefik-secure.entrypoints=https"
- "traefik.http.routers.traefik-secure.rule=Host(`traefik.marduk.com`)"
- "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
- "traefik.http.routers.traefik-secure.tls=true"
- "traefik.http.routers.traefik-secure.tls.certresolver=http"
- "traefik.http.routers.traefik-secure.service=api@internal"

portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
expose:
- 9000
ports:
- 9000:9000
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.entrypoints=ht tp"
- "traefik.http.routers.portainer.rule=Host(`por tain er.marduk.com`)"
- "traefik.http.routers.portainer.middlewares=ht tps-redirect@file"
- "traefik.http.middlewares.portainer-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.portainer.middlewares=po rtai ner-https-redirect"
- "traefik.http.routers.portainer-secure.entrypoints=https"
- "traefik.http.routers.portainer-secure.rule=Host(`portainer.marduk.com`)"
- "traefik.http.routers.portainer-secure.tls=true"
- "traefik.http.routers.portainer-secure.tls.certresolver=http"
- "traefik.http.routers.portainer-secure.service=portainer"
- "traefik.http.services.portainer.loadbalancer. serv er.port=9000"
- "traefik.docker.network=proxy"

wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- SERVERURL=vpn.marduk.com #optional
- SERVERPORT=51820 #optional
- PEERS=5 #optional
- PEERDNS=auto #optional
- INTERNAL_SUBNET=10.13.13.0 #optional
volumes:
- /path/to/appdata/config:/config
- /lib/modules:/lib/modules
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
labels:
- "traefik.enable=false"

restart: always

Pub-Transmission:
image: linuxserver/transmission
container_name: Pub-Transmission
network_mode: "proxy"
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
#- TRANSMISSION_WEB_HOME=/kettu/ #optional
- USER=admin #optional
- PASS=pass1234 #optional
volumes:
- /opt/containers/transmission/public:/config
- /mnt/hdd6/Downloads/complete:/downloads
- /mnt/hdd6/Downloads:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
labels:
- "traefik.enable=true"
- "traefik.http.routers.Pub-Transmission.entrypoints=http"
- "traefik.http.routers.Pub-Transmission.rule=Host(`tor.marduk.com`)"
- "traefik.http.middlewares.Pub-Transmission-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.Pub-Transmission.middlewares=Pub-Transmission-https-redirect"
- "traefik.http.routers.Pub-Transmission-secure.entrypoints=https"
- "traefik.http.routers.Pub-Transmission-secure.rule=Host(`tor.marduk.com`)"
- "traefik.http.routers.Pub-Transmission-secure.tls=true"
- "traefik.http.routers.Pub-Transmission-secure.tls.certresolver=http"
- "traefik.http.routers.Pub-Transmission-secure.service=Pub-Transmission"
- "traefik.http.services.Pub-Transmission.loadbalancer.server.port=9091"
- "traefik.docker.network=proxy"
restart: unless-stopped

ouroboros:
container_name: ouroboros
hostname: ouroboros
image: pyouroboros/ouroboros
network_mode: "proxy"
environment:
- CLEANUP=true
- INTERVAL=3600
- LOG_LEVEL=info
- SELF_UPDATE=true
- TZ=Europe/Madrid
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock

# netdata:
# image: netdata/netdata:latest
# container_name: netdata
# network_mode: "proxy"
# hostname: marduk.com
# ports:
# - 19999:19999
# environment:
# - PGID=998
# - VIRTUAL_PORT=19999
# cap_add:
# - SYS_PTRACE
# security_opt:
# - apparmor:unconfined
# volumes:
# - /etc/passwd:/opt/containers/netdata/passwd:ro
# - /etc/group:/opt/containers/netdata/group:ro
# - /proc:/host/proc:ro
# - /sys:/host/sys:ro
# - /opt/containers/netdata/etc:/etc/netdata
# - /var/run/docker.sock:/var/run/docker.sock:ro
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.netdata.entrypoints=http "
# - "traefik.http.routers.netdata.rule=Host(`monit or.m arduk.com`)"
# - "traefik.http.middlewares.netdata-https-redirect.redirectscheme.scheme=https"
# - "traefik.http.routers.netdata-secure.middlewares=netdata-auth"
# - "traefik.http.routers.netdata.middlewares=netd ata-https-redirect"
# - "traefik.http.routers.netdata-secure.entrypoints=https"
# - "traefik.http.routers.netdata-secure.rule=Host(`monitor.marduk.com`)"
# - "traefik.http.routers.netdata-secure.tls=true"
# - "traefik.http.routers.netdata-secure.tls.certresolver=http"
# - "traefik.http.routers.netdata-secure.service=netdata"
# - "traefik.http.services.netdata.loadbalancer.se rver .port=19999"
# - "traefik.docker.network=proxy"
# restart: always

duplicati:
image: linuxserver/duplicati
container_name: duplicati
network_mode: "proxy"
environment:
- PUID=0
- PGID=0
- TZ=Europe/London
#- CLI_ARGS=

volumes:
- /opt/containers/duplicati/config:/config
#- /mnt/backups/duplicati:/backups
- /:/source
ports:
- 8200:8200
labels:
- "traefik.enable=true"
- "traefik.http.routers.duplicati.entrypoints=ht tp"
- "traefik.http.routers.duplicati.rule=Host(`bac kup. marduk.com`)"
- "traefik.http.middlewares.duplicati-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.duplicati.middlewares=du plic ati-https-redirect"
- "traefik.http.routers.duplicati-secure.entrypoints=https"
- "traefik.http.routers.duplicati-secure.rule=Host(`backup.marduk.com`)"
- "traefik.http.routers.duplicati-secure.tls=true"
- "traefik.http.routers.duplicati-secure.tls.certresolver=http"
- "traefik.http.routers.duplicati-secure.service=duplicati"
- "traefik.http.services.duplicati.loadbalancer. serv er.port=8200"
- "traefik.docker.network=proxy"
restart: always

fr_db:
image: mariadb:latest
container_name: FileRun-DataBase
networks:
- default
- proxy
ports:
- 3307:3306
expose:
- 3307
environment:
MYSQL_ROOT_PASSWORD: RootPass@1
MYSQL_USER: usuario1
MYSQL_PASSWORD: password00001
MYSQL_DATABASE: fr_database
volumes:
- /opt/containers/filerun/db:/var/lib/mysql
restart: always

filerun:
image: afian/filerun
container_name: filerun
network_mode: "proxy"
environment:
FR_DB_HOST: fr_db
FR_DB_PORT: 3306
FR_DB_NAME: fr_database
FR_DB_USER: usuario1
FR_DB_PASS: password00001
APACHE_RUN_USER: www-data
APACHE_RUN_USER_ID: 33
APACHE_RUN_GROUP: www-data
APACHE_RUN_GROUP_ID: 33
depends_on:
- fr_db
links:
- fr_db:fr_db
ports:
- "8091:80"
expose:
- 8091
volumes:
- /opt/containers/filerun/html:/var/www/html
- /mnt:/user-files
labels:
- "traefik.enable=true"
- "traefik.http.routers.filerun.entrypoints=http "
- "traefik.http.routers.filerun.rule=Host(`filer un.m arduk.com`)"
- "traefik.http.middlewares.filerun-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.filerun.middlewares=file run-https-redirect"
- "traefik.http.routers.filerun-secure.entrypoints=https"
- "traefik.http.routers.filerun-secure.rule=Host(`filerun.marduk.com`)"
- "traefik.http.routers.filerun-secure.tls=true"
- "traefik.http.routers.filerun-secure.tls.certresolver=http"
- "traefik.http.routers.filerun-secure.service=filerun"
- "traefik.http.services.filerun.loadbalancer.se rver .port=80"
- "traefik.docker.network=proxy"
restart: always

adguard-home:
image: adguard/adguardhome
container_name: "Adguard"
network_mode: "proxy"
dns:
- 127.0.0.1
- 1.1.1.1
ports:
- '53:53/tcp'
- '53:53/udp'
- '67:67/udp'
- '8053:80/tcp'
- '853:853/tcp'
- '3000:3000/tcp'
volumes:
- /opt/containers/adguard/work:/opt/adguardhome/work
- /opt/containers/adguard/confdir:/opt/adguardhome/conf
labels:
- "traefik.enable=true"
- "traefik.http.routers.adguard.entrypoints=http "
- "traefik.http.routers.adguard.rule=Host(`adgua rd.m arduk.com`)"
- "traefik.http.middlewares.adguard-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.adguard.middlewares=adgu ard-https-redirect"
- "traefik.http.routers.adguard-secure.entrypoints=https"
- "traefik.http.routers.adguard-secure.rule=Host(`adguard.marduk.com`)"
- "traefik.http.routers.adguard-secure.tls=true"
- "traefik.http.routers.adguard-secure.tls.certresolver=http"
- "traefik.http.routers.adguard-secure.service=adguard"
- "traefik.http.services.adguard.loadbalancer.se rver .port=80"
- "traefik.docker.network=proxy"
restart: always

networks:
proxy:
external: true
Derpodon
pomf =3
#13
Buenas shur, par de cosas, lo tienes ya rulando? Sino te paso mi config, y el segundo detalle, borra las pass (hash) de la config de arriba, un saludo!
Manuman85
ForoCoches: Miembro
#14
Cita de [MaRDuK]
Te paso uno que me pidió otro shur hace unos meses. Habrá cosas regular o mal pero tampoco soy un experto y me me ido quedando con lo que funciona.

Este el es compose:
***********************
version: '3'

services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
expose:
- 8080
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/traefik.yml:ro
- ./data/acme.json:/acme.json
- ./data/config.yml:/config.yml:ro
#- /opt/containers/traefik/rules:/rules:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http "
- "traefik.http.routers.traefik.rule=Host(`traef ik.m arduk.com`)"
#- "traefik.http.middlewares.traefik-auth.basicauth.users=marduk:$$2y$$05$$LhavaIzGBq8U edGuaZATvJAfeVqXWsIOE03gVQgyLrpdCgldIGL4XG"
- "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.traefik.middlewares=trae fik-https-redirect"
- "traefik.http.routers.traefik-secure.entrypoints=https"
- "traefik.http.routers.traefik-secure.rule=Host(`traefik.marduk.com`)"
- "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
- "traefik.http.routers.traefik-secure.tls=true"
- "traefik.http.routers.traefik-secure.tls.certresolver=http"
- "traefik.http.routers.traefik-secure.service=api@internal"

portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
expose:
- 9000
ports:
- 9000:9000
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.entrypoints=ht tp"
- "traefik.http.routers.portainer.rule=Host(`por tain er.marduk.com`)"
- "traefik.http.routers.portainer.middlewares=ht tps-redirect@file"
- "traefik.http.middlewares.portainer-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.portainer.middlewares=po rtai ner-https-redirect"
- "traefik.http.routers.portainer-secure.entrypoints=https"
- "traefik.http.routers.portainer-secure.rule=Host(`portainer.marduk.com`)"
- "traefik.http.routers.portainer-secure.tls=true"
- "traefik.http.routers.portainer-secure.tls.certresolver=http"
- "traefik.http.routers.portainer-secure.service=portainer"
- "traefik.http.services.portainer.loadbalancer. serv er.port=9000"
- "traefik.docker.network=proxy"

wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- SERVERURL=vpn.marduk.com #optional
- SERVERPORT=51820 #optional
- PEERS=5 #optional
- PEERDNS=auto #optional
- INTERNAL_SUBNET=10.13.13.0 #optional
volumes:
- /path/to/appdata/config:/config
- /lib/modules:/lib/modules
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
labels:
- "traefik.enable=false"

restart: always

Pub-Transmission:
image: linuxserver/transmission
container_name: Pub-Transmission
network_mode: "proxy"
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
#- TRANSMISSION_WEB_HOME=/kettu/ #optional
- USER=admin #optional
- PASS=pass1234 #optional
volumes:
- /opt/containers/transmission/public:/config
- /mnt/hdd6/Downloads/complete:/downloads
- /mnt/hdd6/Downloads:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
labels:
- "traefik.enable=true"
- "traefik.http.routers.Pub-Transmission.entrypoints=http"
- "traefik.http.routers.Pub-Transmission.rule=Host(`tor.marduk.com`)"
- "traefik.http.middlewares.Pub-Transmission-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.Pub-Transmission.middlewares=Pub-Transmission-https-redirect"
- "traefik.http.routers.Pub-Transmission-secure.entrypoints=https"
- "traefik.http.routers.Pub-Transmission-secure.rule=Host(`tor.marduk.com`)"
- "traefik.http.routers.Pub-Transmission-secure.tls=true"
- "traefik.http.routers.Pub-Transmission-secure.tls.certresolver=http"
- "traefik.http.routers.Pub-Transmission-secure.service=Pub-Transmission"
- "traefik.http.services.Pub-Transmission.loadbalancer.server.port=9091"
- "traefik.docker.network=proxy"
restart: unless-stopped

ouroboros:
container_name: ouroboros
hostname: ouroboros
image: pyouroboros/ouroboros
network_mode: "proxy"
environment:
- CLEANUP=true
- INTERVAL=3600
- LOG_LEVEL=info
- SELF_UPDATE=true
- TZ=Europe/Madrid
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock

# netdata:
# image: netdata/netdata:latest
# container_name: netdata
# network_mode: "proxy"
# hostname: marduk.com
# ports:
# - 19999:19999
# environment:
# - PGID=998
# - VIRTUAL_PORT=19999
# cap_add:
# - SYS_PTRACE
# security_opt:
# - apparmor:unconfined
# volumes:
# - /etc/passwd:/opt/containers/netdata/passwd:ro
# - /etc/group:/opt/containers/netdata/group:ro
# - /proc:/host/proc:ro
# - /sys:/host/sys:ro
# - /opt/containers/netdata/etc:/etc/netdata
# - /var/run/docker.sock:/var/run/docker.sock:ro
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.netdata.entrypoints=http "
# - "traefik.http.routers.netdata.rule=Host(`monit or.m arduk.com`)"
# - "traefik.http.middlewares.netdata-https-redirect.redirectscheme.scheme=https"
# - "traefik.http.routers.netdata-secure.middlewares=netdata-auth"
# - "traefik.http.routers.netdata.middlewares=netd ata-https-redirect"
# - "traefik.http.routers.netdata-secure.entrypoints=https"
# - "traefik.http.routers.netdata-secure.rule=Host(`monitor.marduk.com`)"
# - "traefik.http.routers.netdata-secure.tls=true"
# - "traefik.http.routers.netdata-secure.tls.certresolver=http"
# - "traefik.http.routers.netdata-secure.service=netdata"
# - "traefik.http.services.netdata.loadbalancer.se rver .port=19999"
# - "traefik.docker.network=proxy"
# restart: always

duplicati:
image: linuxserver/duplicati
container_name: duplicati
network_mode: "proxy"
environment:
- PUID=0
- PGID=0
- TZ=Europe/London
#- CLI_ARGS=

volumes:
- /opt/containers/duplicati/config:/config
#- /mnt/backups/duplicati:/backups
- /:/source
ports:
- 8200:8200
labels:
- "traefik.enable=true"
- "traefik.http.routers.duplicati.entrypoints=ht tp"
- "traefik.http.routers.duplicati.rule=Host(`bac kup. marduk.com`)"
- "traefik.http.middlewares.duplicati-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.duplicati.middlewares=du plic ati-https-redirect"
- "traefik.http.routers.duplicati-secure.entrypoints=https"
- "traefik.http.routers.duplicati-secure.rule=Host(`backup.marduk.com`)"
- "traefik.http.routers.duplicati-secure.tls=true"
- "traefik.http.routers.duplicati-secure.tls.certresolver=http"
- "traefik.http.routers.duplicati-secure.service=duplicati"
- "traefik.http.services.duplicati.loadbalancer. serv er.port=8200"
- "traefik.docker.network=proxy"
restart: always

fr_db:
image: mariadb:latest
container_name: FileRun-DataBase
networks:
- default
- proxy
ports:
- 3307:3306
expose:
- 3307
environment:
MYSQL_ROOT_PASSWORD: RootPass@1
MYSQL_USER: usuario1
MYSQL_PASSWORD: password00001
MYSQL_DATABASE: fr_database
volumes:
- /opt/containers/filerun/db:/var/lib/mysql
restart: always

filerun:
image: afian/filerun
container_name: filerun
network_mode: "proxy"
environment:
FR_DB_HOST: fr_db
FR_DB_PORT: 3306
FR_DB_NAME: fr_database
FR_DB_USER: usuario1
FR_DB_PASS: password00001
APACHE_RUN_USER: www-data
APACHE_RUN_USER_ID: 33
APACHE_RUN_GROUP: www-data
APACHE_RUN_GROUP_ID: 33
depends_on:
- fr_db
links:
- fr_db:fr_db
ports:
- "8091:80"
expose:
- 8091
volumes:
- /opt/containers/filerun/html:/var/www/html
- /mnt:/user-files
labels:
- "traefik.enable=true"
- "traefik.http.routers.filerun.entrypoints=http "
- "traefik.http.routers.filerun.rule=Host(`filer un.m arduk.com`)"
- "traefik.http.middlewares.filerun-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.filerun.middlewares=file run-https-redirect"
- "traefik.http.routers.filerun-secure.entrypoints=https"
- "traefik.http.routers.filerun-secure.rule=Host(`filerun.marduk.com`)"
- "traefik.http.routers.filerun-secure.tls=true"
- "traefik.http.routers.filerun-secure.tls.certresolver=http"
- "traefik.http.routers.filerun-secure.service=filerun"
- "traefik.http.services.filerun.loadbalancer.se rver .port=80"
- "traefik.docker.network=proxy"
restart: always

adguard-home:
image: adguard/adguardhome
container_name: "Adguard"
network_mode: "proxy"
dns:
- 127.0.0.1
- 1.1.1.1
ports:
- '53:53/tcp'
- '53:53/udp'
- '67:67/udp'
- '8053:80/tcp'
- '853:853/tcp'
- '3000:3000/tcp'
volumes:
- /opt/containers/adguard/work:/opt/adguardhome/work
- /opt/containers/adguard/confdir:/opt/adguardhome/conf
labels:
- "traefik.enable=true"
- "traefik.http.routers.adguard.entrypoints=http "
- "traefik.http.routers.adguard.rule=Host(`adgua rd.m arduk.com`)"
- "traefik.http.middlewares.adguard-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.adguard.middlewares=adgu ard-https-redirect"
- "traefik.http.routers.adguard-secure.entrypoints=https"
- "traefik.http.routers.adguard-secure.rule=Host(`adguard.marduk.com`)"
- "traefik.http.routers.adguard-secure.tls=true"
- "traefik.http.routers.adguard-secure.tls.certresolver=http"
- "traefik.http.routers.adguard-secure.service=adguard"
- "traefik.http.services.adguard.loadbalancer.se rver .port=80"
- "traefik.docker.network=proxy"
restart: always

networks:
proxy:
external: true
este shur sabe! yo lo tengo montado en un Ubuntu server y me suena que era todo tal que así, la única diferencia que tengo yo es que tengo los docker compose de cada servicio separado.


básicamente lo que tienes que conseguir es un certificado de wildcard (*.tudominio.com) por ejemplo de letsencrypt. entonces todos los servicios usan este certificado (por ejemplo web.tudominio.com utorrent.tudominio.com, etc) y traefik dirige a cada visitante al servicio/puerto con las líneas que hay en labels. luego es importante que traefik y el servicio que quieras estén en la misma red de docker. yo al principio no los tenía en la misma red y no me iba nada.


si aún tienes dudas me dices y miro los docker-compose para darte más ejemplos
UltimaNeurona
ForoCoches: Miembro
#15
No se como estais haciendo el deploy.

- Si usais los servicios a nivel casero local, en la lan, no hace falta liarse tanto con proxies inversos tipo traefik, nginx, subdominios... Poned heimdall y ya esta.

- Si usais los servicios a nivel casero local, en la lan, pero quereis exponer alguno a internet, usad vpn o aislar ese servicio y exponer su puerto.

- Si usais los servicios todos expuestos en internet, proxi inverso.
foo
ForoCoches: Usuario
#16
Cita de Manuman85
este shur sabe! yo lo tengo montado en un Ubuntu server y me suena que era todo tal que así, la única diferencia que tengo yo es que tengo los docker compose de cada servicio separado.


básicamente lo que tienes que conseguir es un certificado de wildcard (*.tudominio.com) por ejemplo de letsencrypt. entonces todos los servicios usan este certificado (por ejemplo web.tudominio.com utorrent.tudominio.com, etc) y traefik dirige a cada visitante al servicio/puerto con las líneas que hay en labels. luego es importante que traefik y el servicio que quieras estén en la misma red de docker. yo al principio no los tenía en la misma red y no me iba nada.


si aún tienes dudas me dices y miro los docker-compose para darte más ejemplos
Puedes configurar Traefik (y es lo recomendable) para gestionar certificados a través de Let's Encrypt. No deberías ser tú quien manualmente se encarga de conseguir un certificado y posteriormente renovarlo pasado los 90 días, para eso ya está Traefik

https://doc.traefik.io/traefik/https...cate-resolvers
RuSaMa
Gran Miembro
#17
Cita de [MaRDuK]
Te paso uno que me pidió otro shur hace unos meses. Habrá cosas regular o mal pero tampoco soy un experto y me me ido quedando con lo que funciona.

Este el es compose:
***********************
version: '3'

services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
expose:
- 8080
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/traefik.yml:ro
- ./data/acme.json:/acme.json
- ./data/config.yml:/config.yml:ro
#- /opt/containers/traefik/rules:/rules:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http "
- "traefik.http.routers.traefik.rule=Host(`traef ik.m arduk.com`)"
#- "traefik.http.middlewares.traefik-auth.basicauth.users=marduk:$$2y$$05$$LhavaIzGBq8U edGuaZATvJAfeVqXWsIOE03gVQgyLrpdCgldIGL4XG"
- "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.traefik.middlewares=trae fik-https-redirect"
- "traefik.http.routers.traefik-secure.entrypoints=https"
- "traefik.http.routers.traefik-secure.rule=Host(`traefik.marduk.com`)"
- "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
- "traefik.http.routers.traefik-secure.tls=true"
- "traefik.http.routers.traefik-secure.tls.certresolver=http"
- "traefik.http.routers.traefik-secure.service=api@internal"

portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
expose:
- 9000
ports:
- 9000:9000
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.entrypoints=ht tp"
- "traefik.http.routers.portainer.rule=Host(`por tain er.marduk.com`)"
- "traefik.http.routers.portainer.middlewares=ht tps-redirect@file"
- "traefik.http.middlewares.portainer-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.portainer.middlewares=po rtai ner-https-redirect"
- "traefik.http.routers.portainer-secure.entrypoints=https"
- "traefik.http.routers.portainer-secure.rule=Host(`portainer.marduk.com`)"
- "traefik.http.routers.portainer-secure.tls=true"
- "traefik.http.routers.portainer-secure.tls.certresolver=http"
- "traefik.http.routers.portainer-secure.service=portainer"
- "traefik.http.services.portainer.loadbalancer. serv er.port=9000"
- "traefik.docker.network=proxy"

wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- SERVERURL=vpn.marduk.com #optional
- SERVERPORT=51820 #optional
- PEERS=5 #optional
- PEERDNS=auto #optional
- INTERNAL_SUBNET=10.13.13.0 #optional
volumes:
- /path/to/appdata/config:/config
- /lib/modules:/lib/modules
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
labels:
- "traefik.enable=false"

restart: always

Pub-Transmission:
image: linuxserver/transmission
container_name: Pub-Transmission
network_mode: "proxy"
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
#- TRANSMISSION_WEB_HOME=/kettu/ #optional
- USER=admin #optional
- PASS=pass1234 #optional
volumes:
- /opt/containers/transmission/public:/config
- /mnt/hdd6/Downloads/complete:/downloads
- /mnt/hdd6/Downloads:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
labels:
- "traefik.enable=true"
- "traefik.http.routers.Pub-Transmission.entrypoints=http"
- "traefik.http.routers.Pub-Transmission.rule=Host(`tor.marduk.com`)"
- "traefik.http.middlewares.Pub-Transmission-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.Pub-Transmission.middlewares=Pub-Transmission-https-redirect"
- "traefik.http.routers.Pub-Transmission-secure.entrypoints=https"
- "traefik.http.routers.Pub-Transmission-secure.rule=Host(`tor.marduk.com`)"
- "traefik.http.routers.Pub-Transmission-secure.tls=true"
- "traefik.http.routers.Pub-Transmission-secure.tls.certresolver=http"
- "traefik.http.routers.Pub-Transmission-secure.service=Pub-Transmission"
- "traefik.http.services.Pub-Transmission.loadbalancer.server.port=9091"
- "traefik.docker.network=proxy"
restart: unless-stopped

ouroboros:
container_name: ouroboros
hostname: ouroboros
image: pyouroboros/ouroboros
network_mode: "proxy"
environment:
- CLEANUP=true
- INTERVAL=3600
- LOG_LEVEL=info
- SELF_UPDATE=true
- TZ=Europe/Madrid
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock

# netdata:
# image: netdata/netdata:latest
# container_name: netdata
# network_mode: "proxy"
# hostname: marduk.com
# ports:
# - 19999:19999
# environment:
# - PGID=998
# - VIRTUAL_PORT=19999
# cap_add:
# - SYS_PTRACE
# security_opt:
# - apparmor:unconfined
# volumes:
# - /etc/passwd:/opt/containers/netdata/passwd:ro
# - /etc/group:/opt/containers/netdata/group:ro
# - /proc:/host/proc:ro
# - /sys:/host/sys:ro
# - /opt/containers/netdata/etc:/etc/netdata
# - /var/run/docker.sock:/var/run/docker.sock:ro
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.netdata.entrypoints=http "
# - "traefik.http.routers.netdata.rule=Host(`monit or.m arduk.com`)"
# - "traefik.http.middlewares.netdata-https-redirect.redirectscheme.scheme=https"
# - "traefik.http.routers.netdata-secure.middlewares=netdata-auth"
# - "traefik.http.routers.netdata.middlewares=netd ata-https-redirect"
# - "traefik.http.routers.netdata-secure.entrypoints=https"
# - "traefik.http.routers.netdata-secure.rule=Host(`monitor.marduk.com`)"
# - "traefik.http.routers.netdata-secure.tls=true"
# - "traefik.http.routers.netdata-secure.tls.certresolver=http"
# - "traefik.http.routers.netdata-secure.service=netdata"
# - "traefik.http.services.netdata.loadbalancer.se rver .port=19999"
# - "traefik.docker.network=proxy"
# restart: always

duplicati:
image: linuxserver/duplicati
container_name: duplicati
network_mode: "proxy"
environment:
- PUID=0
- PGID=0
- TZ=Europe/London
#- CLI_ARGS=

volumes:
- /opt/containers/duplicati/config:/config
#- /mnt/backups/duplicati:/backups
- /:/source
ports:
- 8200:8200
labels:
- "traefik.enable=true"
- "traefik.http.routers.duplicati.entrypoints=ht tp"
- "traefik.http.routers.duplicati.rule=Host(`bac kup. marduk.com`)"
- "traefik.http.middlewares.duplicati-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.duplicati.middlewares=du plic ati-https-redirect"
- "traefik.http.routers.duplicati-secure.entrypoints=https"
- "traefik.http.routers.duplicati-secure.rule=Host(`backup.marduk.com`)"
- "traefik.http.routers.duplicati-secure.tls=true"
- "traefik.http.routers.duplicati-secure.tls.certresolver=http"
- "traefik.http.routers.duplicati-secure.service=duplicati"
- "traefik.http.services.duplicati.loadbalancer. serv er.port=8200"
- "traefik.docker.network=proxy"
restart: always

fr_db:
image: mariadb:latest
container_name: FileRun-DataBase
networks:
- default
- proxy
ports:
- 3307:3306
expose:
- 3307
environment:
MYSQL_ROOT_PASSWORD: RootPass@1
MYSQL_USER: usuario1
MYSQL_PASSWORD: password00001
MYSQL_DATABASE: fr_database
volumes:
- /opt/containers/filerun/db:/var/lib/mysql
restart: always

filerun:
image: afian/filerun
container_name: filerun
network_mode: "proxy"
environment:
FR_DB_HOST: fr_db
FR_DB_PORT: 3306
FR_DB_NAME: fr_database
FR_DB_USER: usuario1
FR_DB_PASS: password00001
APACHE_RUN_USER: www-data
APACHE_RUN_USER_ID: 33
APACHE_RUN_GROUP: www-data
APACHE_RUN_GROUP_ID: 33
depends_on:
- fr_db
links:
- fr_db:fr_db
ports:
- "8091:80"
expose:
- 8091
volumes:
- /opt/containers/filerun/html:/var/www/html
- /mnt:/user-files
labels:
- "traefik.enable=true"
- "traefik.http.routers.filerun.entrypoints=http "
- "traefik.http.routers.filerun.rule=Host(`filer un.m arduk.com`)"
- "traefik.http.middlewares.filerun-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.filerun.middlewares=file run-https-redirect"
- "traefik.http.routers.filerun-secure.entrypoints=https"
- "traefik.http.routers.filerun-secure.rule=Host(`filerun.marduk.com`)"
- "traefik.http.routers.filerun-secure.tls=true"
- "traefik.http.routers.filerun-secure.tls.certresolver=http"
- "traefik.http.routers.filerun-secure.service=filerun"
- "traefik.http.services.filerun.loadbalancer.se rver .port=80"
- "traefik.docker.network=proxy"
restart: always

adguard-home:
image: adguard/adguardhome
container_name: "Adguard"
network_mode: "proxy"
dns:
- 127.0.0.1
- 1.1.1.1
ports:
- '53:53/tcp'
- '53:53/udp'
- '67:67/udp'
- '8053:80/tcp'
- '853:853/tcp'
- '3000:3000/tcp'
volumes:
- /opt/containers/adguard/work:/opt/adguardhome/work
- /opt/containers/adguard/confdir:/opt/adguardhome/conf
labels:
- "traefik.enable=true"
- "traefik.http.routers.adguard.entrypoints=http "
- "traefik.http.routers.adguard.rule=Host(`adgua rd.m arduk.com`)"
- "traefik.http.middlewares.adguard-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.adguard.middlewares=adgu ard-https-redirect"
- "traefik.http.routers.adguard-secure.entrypoints=https"
- "traefik.http.routers.adguard-secure.rule=Host(`adguard.marduk.com`)"
- "traefik.http.routers.adguard-secure.tls=true"
- "traefik.http.routers.adguard-secure.tls.certresolver=http"
- "traefik.http.routers.adguard-secure.service=adguard"
- "traefik.http.services.adguard.loadbalancer.se rver .port=80"
- "traefik.docker.network=proxy"
restart: always

networks:
proxy:
external: true

Muchas gracias por pasarmelo.


No fui capaz de hacerlo funcionar, como tenia que entregar el trbajo lo deje. Lo hice con Caddy que me resulto muchisimo mas facil. Ahora estoy probando SWAG que tambien es muy facil.
[MaRDuK]
Y yo con estos pelos!!!
#18
Cita de RuSaMa
Muchas gracias por pasarmelo.


No fui capaz de hacerlo funcionar, como tenia que entregar el trbajo lo deje. Lo hice con Caddy que me resulto muchisimo mas facil. Ahora estoy probando SWAG que tambien es muy facil.
Es normal. A mi me costó bastante dejarlo funcionando en la versión 1.7 y migrar a la versión2 fue toda una odisea. De hecho mi idea es quitar Traefik 2 y sustituirlo por nginx, que tiene un gui desde el que poder gestionar servicios sin necesidad de editar ficheros.
Dinitrofenol
ForoCoches: Miembro
#19
Yo tengo mi home server con Traefik y sin problema. Pones tus labels pertinentes en cada servicio y a gozar.
RuSaMa
Gran Miembro
#20
Cita de [MaRDuK]
Es normal. A mi me costó bastante dejarlo funcionando en la versión 1.7 y migrar a la versión2 fue toda una odisea. De hecho mi idea es quitar Traefik 2 y sustituirlo por nginx, que tiene un gui desde el que poder gestionar servicios sin necesidad de editar ficheros.

He probado nginx proxy manager ya que se hace todo por interfaz web pero no se por que cada vez que intentaba generar el certificado me daba error interno. Con SWAG lo estoy haciendo sin problema.
[MaRDuK]
Y yo con estos pelos!!!
#21
Cita de RuSaMa
He probado nginx proxy manager ya que se hace todo por interfaz web pero no se por que cada vez que intentaba generar el certificado me daba error interno. Con SWAG lo estoy haciendo sin problema.
SWAG no lo he probado nunca, pero le echaré un ojo el día que me proponga hacer el cambio.
Krasty
ForoCoches: Miembro
#22
Después de pelearme y pelearme y sabeis que? pelearme con traefik al final he conseguido hacerlo andar. Desde problemas de sintaxis a otros varios, pero por fin lo conseguí!


Perdonad que me ponga así pero esto ya es algo avanzado para mi.


Os dejo la manera mas sencilla y explicativa de hacerlo. Para negados como yo es una mina de oro xD





Este es un archivo que también se puede descargar en el propio vídeo, pero lo dejo por aquí mas a mano. Igualmente copio el contenido por si alguna vez el vídeo desaparece.

https://drive.google.com/file/d/1nTs...rLjskP7kw/view


Código:
Easy guide to setup traefik and duckdns using docker compose in debian 9

#Install-Docker

#command-to-update-and-upgrade-debian-repository
sudo apt update && sudo apt upgrade

#command-to-install-requirement-for-docker
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

#command-to-add-debian-repository-key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

#command-to-add-debian-repository
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

#command-to-update-debian-repository
sudo apt update


#command-to-install-docker-engine
sudo apt install docker-ce


#command-to-view-docker-service-status
sudo systemctl status docker
#ctrl+c to quit

#command-to-download-docker-compose
sudo  curl -L  https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname  -s`-`uname -m` -o /usr/local/bin/docker-compose

#command-to-allow-executing-docker-compose
sudo chmod +x /usr/local/bin/docker-compose

#command-to-view-docker-compose-version
docker-compose --version




#command-to-edit-daemon-config-file
sudo nano /etc/docker/https://daemon.json

{
  "data-root": "/home/docker/.all",
  "ipv6": false
}

#ctrl+x-->y-and-enter-to-save-and-quit

#command-to-restart-docker-service-and-load-new-daemon-config
sudo systemctl restart https://docker.service


#command-to-install-hash-password-generator
sudo apt install apache2-utils -y

#command-to-generate-hashed-password
*FOR THIS TUTORIAL I'M USING "YOURUSERNAME YOURPASSWORD" YOU CAN CHANGE THAT ANYWAY YOU LIKE  

echo $(htpasswd -nb YOURUSERNAME YOURPASSWORD) | sed -e s/\\$/\\$\\$/g >> usersfile

#command-to-view-generated-hashed-password
cat usersfile

PASTE-YOUR-HASHED-USER-PASSWORD-HERE


#command-to-remove-generated-hashed-file
rm -f usersfile


#Preparing-Neccesary-Info 
#DuckDNS-Subdomain: 
#DuckDNS-Token: 
#Email-For-LetsEncrypt: 
#Plain-User-Password: 
#Hashed-User-Password: 


#command-to-create-duckdns-container-folder
mkdir -p /home/docker/container/ddns/

#command-to-make-docker-compose-file-for-duckdns
nano /home/docker/container/ddns/https://docker-compose.yml


---
version: "2.1"
services:
  ddns:
    image: https://lscr.io/linuxserver/duckdns:latest
    container_name: ddns
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - SUBDOMAINS=https://PASTE-SUBDOMAIN-HERE.duckdns.org
      - TOKEN=PASTE-TOKEN-HERE
      - LOG_FILE=false
    volumes:
      - ./config:/config


#ctrl+x-->y-and-enter-to-save-and-quit


#command-to-start-duckdns-container
docker-compose -f ~/container/ddns/https://docker-compose.yml up -d

#command-to-stop-and-takedown-duckdns-container
docker-compose -f ~/container/ddns/https://docker-compose.yml down




#Setup-Traefik

#command-to-create-traefik-container-folder
mkdir -p /home/docker/container/traefik/etc

#https://command-to-make-acme.json-file-(file-to-store-ssl-info)
touch /home/docker/container/traefik/etc/https://acme.json

#https://command-to-limit-acme.json-file-permission
chmod 600 /home/docker/container/traefik/etc/https://acme.json


#command-to-make-static-traefik-config-file
nano /home/docker/container/traefik/etc/https://traefik.yml


global:
  checkNewVersion: true
  sendAnonymousUsage: false

entryPoints:
  http:
    address: :80
    http:
      redirections:
        entryPoint:
          to: https
          scheme: https

  https:
    address: :443
    http:
      tls:
        certResolver: letsencrypt
        domains:
          - main: https://PASTE-SUBDOMAIN-HERE.duckdns.org
            sans:
              - '*.https://PASTE-SUBDOMAIN-HERE.duckdns.org'
      middlewares:
        - securityHeaders@file

providers:
  providersThrottleDuration: 2s

  file:
    filename: /etc/traefik/https://traefik_dynamic.yml
    watch: true

  docker:
    watch: true
    network: proxy
    defaultRule: "Host(`{{ index .Labels \"https://com.docker.compose.service\"}}.PASTE-SUBDOMAIN-HERE.duckdns.org`)"
    swarmModeRefreshSeconds: 15s
    exposedByDefault: false
    endpoint: "tcp://dockersocket:2375"

api:
  dashboard: true

log:
  filePath: /etc/traefik/https://traefik.log
  level: ERROR

certificatesResolvers:
  letsencrypt:
    acme:
      email:  PASTE-EMAIL-HERE
      storage: /etc/traefik/https://acme.json
      caServer: https://acme-v02.api.letsencrypt.org/directory
      dnsChallenge:
        provider: duckdns
        resolvers:
          - "1.1.1.1:53"
          - "8.8.8.8:53"


#ctrl+x-->y-and-enter-to-save-and-quit


#command-to-make-traefik-dynamic-config-file
nano /home/docker/container/traefik/etc/https://traefik_dynamic.yml

http:
  middlewares:
    securityHeaders:
      headers:
        accessControlAllowMethods:
          - GET
          - OPTIONS
          - PUT
        customResponseHeaders:
          X-Robots-Tag: "none,noarchive,nosnippet,notranslate,noimageindex"
          X-Forwarded-Proto: "https"
        sslProxyHeaders:
          X-Forwarded-Proto: https
        referrerPolicy: "strict-origin-when-cross-origin"
        hostsProxyHeaders:
          - "X-Forwarded-Host"
        customRequestHeaders:
          X-Forwarded-Proto: "https"
        accessControlAllowCredentials: true
        addVaryHeader: true
        accessControlMaxAge: 100
        sslRedirect: true
        sslForceHost: true
        contentTypeNosniff: true
        browserXssFilter: true
        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsSeconds: 63072000
        stsPreload: true
        frameDeny: true
        featurePolicy: "camera 'none'; geolocation 'none'; microphone 'none'; payment 'none'; usb 'none'; vr 'none';"

tls:
  options:
    default:
      minVersion: VersionTLS12
      sniStrict: true
      cipherSuites:
        - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
        - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
        - TLS_AES_128_GCM_SHA256
        - TLS_AES_256_GCM_SHA384
        - TLS_CHACHA20_POLY1305_SHA256
      curvePreferences:
        - CurveP521
        - CurveP384


#ctrl+x-->y-and-enter-to-save-and-quit


#command-to-make-docker-compose-file-for-traefik
nano /home/docker/container/traefik/https://docker-compose.yml


---
version: "2.1"
services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
      - 8080:8080 # Dashboard port

    volumes:
      - ./config/:/config/
      - ./etc/:/etc/traefik/
    networks:
      - proxy
    labels:
      https://traefik.enable: true
      https://traefik.http.routers.api.rule: Host(`https://PASTE-SUBDOMAIN-HERE.duckdns.org`)
      https://traefik.http.routers.api.entryPoints: https
      https://traefik.http.routers.api.service: api@internal
      https://traefik.http.routers.api.middlewares: api-auth
      https://traefik.http.middlewares.api-auth.basicauth.users: "PASTE-HASHED-USER-PASSWORD-HERE"
      https://traefik.http.middlewares.api-auth.basicauth.removeheader: true
    environment:
      DOCKER_HOST: dockersocket
      DUCKDNS_TOKEN:  PASTE-TOKEN-HERE
    depends_on:
      - dockersocket

  dockersocket:
    image: tecnativa/docker-socket-proxy
    container_name: dockersocket
    restart: unless-stopped
    volumes:
      - /var/run/https://docker.sock:/var/run/docker.sock
      - ./config/:/config/
    networks:
      - proxy
    environment:
      CONTAINERS: 1
      POST: 0

networks:
  proxy:
    driver: bridge
    external: true


#ctrl+x-->y-and-enter-to-save-and-quit



#command-to-create-traefik-network-named-proxy
docker network create proxy

#command-to-start-traefik-container
docker-compose -f ~/container/traefik/https://docker-compose.yml up -d

#run-again-to-make-sure-traefik-container-already-up-and-running


#command-to-stop-and-takedown-traefik-container
docker-compose -f ~/container/traefik/https://docker-compose.yml down


#command-to-check-traefik-log-file
cat ~/container/traefik/etc/https://traefik.log


Thanks for watching

See you at next tutorial

What I use to make this tutorial :

OS : Debian 9
User Name : docker
Editor : nano
← A Electrónica / Informática