Files
docudjeex/content/fr/3.serveex/7.files/2.pingvin.md
T

8.5 KiB

title, description
title description
Pingvin Installer Pingvin Share, une plateforme de partage de fichiers auto-hébergée pour envoyer des fichiers en toute sécurité sans passer par WeTransfer ou Google Drive.

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

Pingvin est un outil pour partager rapidement des fichiers, à la manière de WeTransfer. Ses nombreuses options de partage (mot de passe, durée d'expiration, lien personnalisé, etc.) en font l'outil idéal pour partager des fichiers rapidement. Pingvin peut aussi créer des demandes d'envoi, c'est-à-dire un lien partageable à envoyer à quelqu'un pour qu'il dépose ses fichiers et que vous les récupériez.

picture

Installation

::steps{level="3"}

Déployer la stack

Ouvrez Dockge, cliquez sur compose, nommez la stack pingvin, puis copiez-collez ceci :

---
services:
  pingvin-share:
    container_name: pingvin
    image: stonith404/pingvin-share
    restart: unless-stopped
    ports:
      - 3600:3000
    volumes:
      - /srv/docker/pingvin/data:/opt/app/backend/data
      - /srv/docker/pingvin/data/img:/opt/app/frontend/public/img
      - /srv/docker/pingvin/uploads:/opt/app/backend/uploads # chemin du dossier où stocker les fichiers envoyés à pingvin. À adapter à votre convenance.
    depends_on:
      clamav:
        condition: service_healthy
    networks:
      - swag

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

::note

À partir d'ici, nous partons du principe que le nom du réseau de Swag est swag_default. ::

::tip{icon=""} Astuce : ajoutez le label watchtower à chaque conteneur pour 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 allez sur http://ipdevotreserveur:3600. Et voilà ! Votre instance web Pingvin est en route !

Terminé !

::

::caution

Si ça ne marche pas : vérifiez les règles de votre pare-feu. ::

Exposer Pingvin avec Swag

Tout l'intérêt d'une solution comme celle-ci est de pouvoir y accéder à distance, depuis tous vos appareils. Pour cela, nous allons exposer Pingvin à travers Swag.

::note{icon=""} 📋 Au préalable :

Nous partons du principe que vous avez le sous-domaine pingvin.mondomaine.fr avec un CNAME pointant vers mondomaine.fr dans votre zone DNS. Et bien sûr, à moins d'utiliser Cloudflare Zero Trust, que le port 443 de votre box est redirigé vers le port 443 de votre serveur via les règles NAT. ::

::steps{level="3"}

Ajouter le réseau de Pingvin à SWAG

Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau de pingvin :

---
services:
  swag:
     container_name: # ...
      # ... 
     networks:             # Rattache le conteneur au réseau personnalisé 
      # ...           
      - pingvin            # Nom du réseau déclaré dans la stack

networks:                  # Définit le réseau personnalisé
  # ...
  pingvin:                 # Nom du réseau déclaré dans la stack
    name: pingvin_default  # Nom réel du réseau externe
    external: true         # Précise qu'il s'agit d'un réseau à chercher à l'extérieur

::note

À partir d'ici, nous partons du principe que le nom du réseau de pingvin est pingvin_default. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. ::

Redéployez la stack en cliquant sur « deploy » et attendez que SWAG soit complètement démarré.

Créer le fichier subdomain.conf

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

::tip{icon="" to="/serveex/files/file-browser-quantum"}

Astuce : vous pouvez utiliser File Browser Quantum pour naviguer dans vos fichiers et éditer vos documents plutôt que des commandes dans le terminal. ::

sudo nano /srv/docker/swag/config/nginx/proxy-confs/pingvin.subdomain.conf

Collez la configuration ci-dessous :

## 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;

    }
}

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

Terminé !

::

Et voilà, vous avez exposé Pingvin !

Protéger Pingvin avec Pocket ID

Pingvin gère OIDC nativement, vous pouvez donc exiger une connexion Pocket ID avant de laisser qui que ce soit partager ou recevoir des fichiers, plutôt qu'avec (ou en plus de) les comptes propres à l'application.

::steps{level="3"}

Enregistrer Pingvin comme client OIDC

Enregistrez un client OIDC dans Pocket ID nommé pingvin, avec cette URL de callback :

https://pingvin.mondomaine.fr/api/oauth/callback/oidc

Activer le Social Login dans Pingvin

Dans Pingvin, allez dans Administration > Configuration > Social Login et renseignez :

Champ Valeur
OpenID Connect Activé
Discovery URI L'URL de découverte OIDC de Pocket ID
Scope openid email profile groups

Terminé !

::

Et voilà ! Désormais, quand vous vous connectez à Pingvin, un bouton « Open ID » est disponible sous le formulaire de connexion.

::::tip{icon=""} Vous pouvez utiliser Authentik plutôt que Pocket ID :

:::collapsible{name="les étapes de configuration Authentik"} ::steps{level="4"}

Créer un provider OAuth2/OpenID

Dans l'espace d'administration d'Authentik, créez un provider OAuth2/OpenID.

Configurer le provider

Remplissez chaque section comme suit, en remplaçant mondomaine.fr par votre propre domaine. Copiez les champs Client ID et Client Secret en lieu sûr.

picture picture picture

Créer l'application

Enregistrez et créez une application pingvin comme suit.

picture

Ajouter le provider à votre outpost

Enregistrez et allez sur votre liste d'outposts. Ajoutez le provider pingvin à votre outpost.

Configurer les réglages OAuth de Pingvin

Quittez Authentik et allez dans l'interface d'administration de Pingvin. Dans la section « OAuth », renseignez les champs suivants :

  • OpenID discovery URI avec https://pingvin.mondomaine.fr/application/o/pingvin/.well-known/openid-configuration (n'oubliez pas de remplacer mondomaine.fr par votre propre domaine)
  • OpenID username claim avec preferred_username
  • OpenID client ID avec l'ID copié à l'étape 2.
  • OpenID client secret avec le token copié à l'étape 2.

Terminé !

::

:::

::::