Traefik 2 : Contribution and Debug
Tags: docker, traefik, tutorial
Published: 2019-09-10 20:26:42

---
title: Traefik 2 : Contribution and Debug
published: true
description: Contribution and Debug
tags: docker, traefik, tutorial
---

# Traefik 2 : Contribution and Debug

This article is a follow-up to this one: https://dev.to/jadekharats/traefik-2-concept-3elj

## The need

We need to add other services to our Traefik but especially to understand how it works to learn.

## Debugging and logging

Everything will be done in the static configuration. Besides, I give you the link to the official documentation of the static configuration by file: https://docs.traefik.io/v2.0/reference/static-configuration/file/

### Log activation

In the `traefik.yaml` file we will add this block
```yaml
log:
  filePath: "log/traefik.log"
  level: WARN
```

The WARN level is enough for my taste to understand the creations and configurations of Traefik 2 elements.

We will also add `access.log` that we find for any reverse proxy
```yaml
AccessLog:
  filePath: "log/access.log"
  bufferingSize: 100
```

### Activate the debug mode of the API

To have the API actions in the `log/traefik.log` log file, modify the api block as follows
```yaml
api:
  dashboard: true
  debug: true
```

## Recovery of logs outside the container

We want to get the logs out of the container. For that, nothing more simple, it is enough to declare the volume in the file `stack-traefik.yml`

```yaml
services:
  traefik:
    volumes:
      - /swarm/traefik2/log:/log
```

## Update and anonymous contribution.

Traefik 2 is in Release Candidate version. It is therefore necessary to keep up to date and at the same time, allow Traefik to send anonymous data to the maintainers to help them develop the RC.
Again, it's in the `traefik.yaml` that it's happening.

```yaml
global:
  checkNewVersion: true
  sendAnonymousUsage: true
```

## Conclusion.
Here we are ready for adding TLS and certificate generation.

As for the previous article, I put back, the state of the files at this stage.

traefik.yaml
```yaml
global:
  checkNewVersion: true
  sendAnonymousUsage: true
api:
  dashboard: true
  debug: true
entrypoints:
  ssh:
    address: ":22"
  http:
    address: ":80"
  https:
    address: ":443"
providers:
  docker:
    watch: true
    swarmMode: true
    useBindPortIP: true
    endpoint: "unix:///var/run/docker.sock"
log:
  filePath: "log/traefik.log"
  level: WARN
AccessLog:
  filePath: "log/access.log"
  bufferingSize: 100
```

stack-traefik.yml
```yaml
version: "3.3"

Link:
  traefik-net:
    external: true

configs:
  traefik.yaml:
    file: ./traefik.yaml


services:
  traefik:
    image: traefik:v2.0
    ports:
      - 80:80
      - 443:443
      - 22:22
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /swarm/traefik2/log:/log
    configs:
      - source: traefik.yaml
        target: /etc/traefik/traefik.yaml

    Link:
      - traefik-net
    deploy:
      fashion: global
      placement:
        constraints: [node.role == manager]
      labels:
        - "traefik.docker.network=traefik-net"
        - "traefik.http.routers.traefik-router0.entrypoints=http"
        - "traefik.http.routers.traefik-router0.rule=Host(`traefik.example.tld`)"
        - "traefik.http.routers.traefik-router0.middlewares=auth"
        - "traefik.http.middlewares.auth.basicauth.users=jade:$$2y$$..."
        - "traefik.http.services.traefik-service.loadbalancer.server.port=8080"
```