---
title: Pingvin
description: Installer Pingvin Share, une plateforme d'envoi de fichiers auto-hébergée pour partager des fichiers de façon sécurisée sans WeTransfer ni Google Drive.
---

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

::note
🎯 __Objectifs :__

- Installer Pingvin
- Exposer Pingvin
::

[Pingvin](https://github.com/stonith404/pingvin-share) est un outil permettant de partager rapidement des fichiers, à la manière de WeTransfer. Ses nombreuses options de partage (mot de passe, durée d'expiration, personnalisation du lien...) en font l'outil idéal pour partager rapidement des fichiers. Pingvin permet également de créer des _demandes de dépot_, c'est à dire un lien partageable à envoyer à quelqu'un de votre choix pour qu'il puisse téléverser ses fichiers afin que vous puissiez les récupérer.

![File Browser](/img/serveex/pingvin.png)

## Installation
Ouvrez Dockge, cliquez sur `compose`, appelez la stack `pingvin` puis copiez collez ceci :

```yaml [compose.yaml]
---
services:
  pingvin-share:
    container_name: pingvin
    image: stonith404/pingvin-share
    restart: unless-stopped
    ports:
      - 3600:3000
    volumes:
      - /docker/pingvin/data:/opt/app/backend/data
      - /docker/pingvin/data/img:/opt/app/frontend/public/img
      - /docker/pingvin/uploads:/opt/app/backend/uploads # chemin du dossier dans lequel vous souhaitez stocker les fichiers uploadés dans pingvin. A changer selon vos préférences.
    depends_on:
      clamav:
        condition: service_healthy
    networks:
      - swag

  clamav: #antivirus pour les fichiers
    restart: unless-stopped
    image: clamav/clamav
```
::note

Ici nous partons du principe que le nom du réseau de Swag est `swag_default`.
::

::tip{icon=""}
✨ __Astuce :__ ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour

    ```yaml [compose.yaml]
    services:
      pingvin-share:
        #...
        labels:

          - com.centurylinklabs.watchtower.enable=true
      
      clamav:
        #...
        labels:

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

Déployez le conteneur et rendez-vous sur `http://ipduserveur:3600`. Et voilà, votre instance File Browser en webui est disponible !

::caution

__En cas d'échec :__ vérifiez les règles de votre pare-feu.
::

## Exposer Immich avec Swag
Tout l'intérêt d'une telle solution, c'est de pouvoir y accéder à distance et sur tout vos appareils. Pour cela, nous allons exposer Pingvin via Swag.

::note
📋 __Au préalable :__ 
<br/><br/>
Nous partons du principe que vous avez le sous-domaine `pingvin.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans votre [zone DNS](/fr/general/networking/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/fr/serveex/security/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur via [les règles NAT](/fr/general/networking/nat).
::

Dans Dockge, rendez-vous dans la stack de SWAG et éditez le compose en ajoutant le réseau de pingvin :

```yaml [compose.yaml]
---
services:
  swag:
     container_name: # ...
      # ... 
     networks:             # Relie le conteneur au réseau custom 
      # ...           
      - pingvin            # Nom du réseau déclaré dans la stack
    
networks:                  # Définit le réseau custom
  # ...
  pingvin:                 # Nom du réseau déclaré dans la stack
    name: pingvin_default  # Nom véritable du réseau externe
    external: true         # Précise que c'est un réseau à rechercher en externe
```

::note

Ici nous partons du principe que le nom du réseau de pingvin est `pingvin_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant http://ipduserveur:81.
::

Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel.

Dans les dossiers de Swag, créez le fichier `pingvin.subdomain.conf`.

::tip{icon=""}

✨ __Astuce :__ vous pouvez utiliser [File Browser](/fr/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::

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

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

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

    server_name pingvin.*;

    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 pingvin;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

```

Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.

Et voilà, vous avez exposé Pingvin !

## Sécuriser Pingvin avec Authentik

Vous pouvez protéger cette app avec Authentik de façon native en suivant les instructions ci-dessous.

1. Dans votre espace admin authentik, créez un fournisseur OAuth2/OpenID.

2. Remplissez chaque section comme suit en remplaçant `mondomaine.fr` par votre domaine. Copiez quelque part le contenu des champs `ID du client` et `Secret du client`.

![Picture](/img/serveex/pingvin-auth1.png)
![Picture](/img/serveex/pingvin-auth2.png)
![Picture](/img/serveex/pingvin-auth3.png)

3. Enregistrez et créez une application `pingvin` comme suit.

![Picture](/img/serveex/pingvin-auth4.png)

4. Enregistrez et aller dans la liste de vos avant-postes. Ajoutez le fournisseur pingvin` à votre avant-poste.

5. Quittez authentik, et allez dans l'interface d'administration de Pingvin.

6. Dans la section _« Identifiant social »_ renseignez les champs suivant :
- `URI de découverte OpenID` avec `https://pingvin.mondomaine.fr/application/o/pingvin/.well-known/openid-configuration` (n'oubliez pas de remplacer `mondomaine.fr` par votre domaine)
- `Revendication du nom d’utilisateur OpenID` avec `preferred_username`
- `ID du client OpenID` avec l'ID que vous avez copié en étape 2.
- `Secret du client OpenID` avec le token que vous avez copié en étape 2.

Et voilà, désormais lorsque vous vous connectez à Pingvin, un bouton "Open ID" sera disponible en dessous de la mire de connexion.
