---
title: Dozzle
description: Installer Dozzle pour surveiller les logs de vos conteneurs Docker en temps réel depuis une interface web claire, exposée via SWAG.
---


:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}


[Dozzle](https://dozzle.dev/) est un conteneur qui permet d'accéder aux logs de vos autres conteneurs et de les afficher en temps réel dans une interface agréable. C'est un moyen simple de parcourir les logs et de retrouver des informations dans l'historique.

![Dozzle](https://blog.unixhost.pro/wp-content/uploads/2023/03/image-5.png)

## Installation

::file-tree
---
tree:
  /:
    - srv:
      - docker:
        - dozzle:
          - compose.yaml
          - .env
          - data/
---
::

::steps{level="3"}
### Déployer la stack

Ouvrez Dockge, cliquez sur `compose`, nommez la stack `dozzle`, puis copiez-collez ce qui suit :

```yaml [compose.yaml]
---
services:
  dozzle:
    container_name: dozzle
    image: amir20/dozzle:latest
    ports:
      - 9135:8080
    env_file:
      - .env
    environment:
      - DOZZLE_HOSTNAME=${DOMAIN}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
```

::tip{icon=""}
✨ __Astuce :__ ajoutez le label watchtower à chaque conteneur pour automatiser les mises à jour

    ```yaml [compose.yaml]
    services:
      dozzle:
        #...
        labels:

          - com.centurylinklabs.watchtower.enable=true
    ```
::

### Renseigner vos variables d'environnement

Renseignez votre nom de domaine dans le fichier `.env`, par exemple :

```properties [.env]
DOMAIN=dozzle.mondomaine.fr
```

Déployez le conteneur. Allez sur `http://ipdevotreserveur:9135`. Et voilà, votre interface web Dozzle est en route !

### Terminé !
::

## Exposer Dozzle avec Swag

::warning

Dozzle n'utilise pas d'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines auxquelles il est relié. Ne le faites que si vous utilisez un système d'authentification multifacteur comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, ne l'exposez pas avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard).
::

Vous voudrez peut-être accéder à Dozzle à distance et sur tous vos appareils. Pour cela, nous allons exposer Dozzle via Swag.

::note{icon=""}
📋 __Au préalable :__
<br/><br/>
Nous partons du principe que vous avez créé un sous-domaine du type `dozzle.mondomaine.fr` dans votre [zone DNS](/general/networking/dns) avec un `CNAME` pointant vers `mondomaine.fr` et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), vous avez redirigé le port `443` de votre box vers le port `443` de votre serveur dans vos [règles NAT](/general/networking/nat).
::

::steps{level="3"}
### Ajouter le réseau de Dozzle à SWAG

Allez dans Dockge et modifiez le fichier compose de SWAG pour y ajouter le réseau de Dozzle :

```yaml [compose.yaml]
---
services:
  swag:
     container_name: # ...
      # ... 
     networks:                 # Rattache le conteneur à un réseau personnalisé
      # ...           
      - dozzle                 # Nom du réseau déclaré dans la stack

networks:                      # Définit le réseau personnalisé
  # ...
  dozzle:                      # Nom du réseau déclaré dans la stack
    name: dozzle_default       # Nom réel du réseau externe
    external: true             # Indique qu'il s'agit d'un réseau défini à l'extérieur
```

Redéployez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel.

::note

Nous partons du principe que le nom du réseau de Dozzle est `dozzle_default`. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::

### Créer le fichier subdomain.conf

Dans le dossier de Swag, créez le fichier `dozzle.subdomain.conf`.

::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal.
::

```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dozzle.subdomain.conf
```
Collez la configuration ci-dessous :

```nginx [dozzle.subdomain.conf]
## Version 2023/12/19

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name dozzle.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app dozzle;
        set $upstream_port 8080;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}
```

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

### Terminé !
::

Et voilà, Dozzle est maintenant exposé !

## Protéger Dozzle avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `dozzle.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :

```nginx [dozzle.subdomain.conf]{26-38,41-42}
## Version 2023/12/19

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name dozzle.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location /tinyauth {
        internal;
        proxy_pass http://tinyauth:3000/api/auth/nginx;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Uri $request_uri;
    }

    location @tinyauth_login {
        return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri;
    }

    location / {
        auth_request /tinyauth;
        error_page 401 = @tinyauth_login;

        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app dozzle;
        set $upstream_port 8080;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}
```

::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"}

Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché.
::

::tip{icon=""}
✨ __Astuce :__ vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `dozzle.subdomain.conf` et en retirant le `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un provider dans Authentik](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy).
::
