# Ajouter un service sur Traefik

> Nous voulons connecter notre service Pingvin sur le reverse proxy Traefik.

##### Prérequis :

<div class="pointer-container" id="bkmrk-%C2%A0"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copier le lien" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>- Avoir un nom de domaine 
    - Dans notre cas nous utiliserons le nom de domaine : `miraceti.net`
- Avoir une configuration de **Traefik Docker** fonctionnel 
    - Sinon suivre le tuto suivant : [Déployer Traefik Docker](https://wiki.mira-ceti.ovh/books/traefik-docker/page/mettre-en-place-traefik-avec-docker "Mettre en place Traefik Docker")

#### Configuration nom de domaine

Grâce à notre nom de domaine, nous allons pouvoir créer des sous domaine (en CNAME `A`).

Sur le site de gestion de notre nom de domaine respectif, dans la section DNS, ajouter l'entrée suivante :

- sub.domaine.ext Type ip.adress.server 
    - Soit
- pingvin.miraceti.net A 12.34.56.78

#### Configuration

Configuration à rajouter dans le fichier `docker-compose.yml` de Pingvin.

Importer le network `traefik-network` pour que le service Pingvin puisse communiquer avec Traefik :

```yaml
  networks:
      traefik-network:
         external: true
```

Rajouter le `network` pour lier l'import à Pingvin :

```yaml
  networks:
      - traefik-network
```

Rajouter les `labels` pour configurer l'accès à Pingvin à travers Traefik :

<p class="callout info">Dans notre cas, le service Pingvin écoute le port `3000`.</p>

```yaml
   labels:
      - "traefik.enable=true"
      - "traefik.http.routers.pingvin.rule=Host(`${PINGVIN_HOSTNAME}`)"
      - "traefik.http.routers.pingvin.service=pingvin"
      - "traefik.http.routers.pingvin.entrypoints=websecure"
      - "traefik.http.services.pingvin.loadbalancer.server.port=3000"
      - "traefik.http.routers.pingvin.tls=true"
      - "traefik.http.routers.pingvin.tls.certresolver=letsencrypt"
      - "traefik.http.services.pingvin.loadbalancer.passhostheader=true"
      - "traefik.http.routers.pingvin.middlewares=compresstraefik"
      - "traefik.http.middlewares.compresstraefik.compress=true"
      - "traefik.docker.network=traefik-network"
```

Rajouter les variables suivantes dans `.env` :

```
# Pingvin Variables
PINGVIN_IMAGE_TAG=stonith404/pingvin-share:latest

# Pingvin Traefik Variables
PINGVIN_HOSTNAME=pingvin.miraceti.net

```