Pingvin

🎯 Objectifs :
  • Installer Pingvin
  • Exposer Pingvin

Pingvin 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

Installation


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

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
    networks:
      - swag

networks: 
  swag: 
    name: swag_default 
    external: true
  • Ici nous partons du principe que le nom du réseau de Swag est swag_default.
Astuce : ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour
services:
  filebrowser:
    #...
    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 !

  • 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.

📋 Au préalable :

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. Et que bien sûr, à moins que vous utilisiez Cloudflare Zero Trust, le port 443 de votre box pointe bien sur le port 443 de votre serveur via les règles NAT.

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

  • Astuce : vous pouvez utiliser File Browser pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
sudo vi /docker/swag/config/nginx/proxy-confs/pingvin.subdomain.conf

Entrez en modification avec la touche i et 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 Echap puis sauvegardez et quittez en tapant :xpuis en appuyant surEntrée`.

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.

PicturePicturePicture

  1. Enregistrez et créez une application pingvin comme suit.

Picture

  1. Enregistrez et aller dans la liste de vos avant-postes. Ajoutez le fournisseur pingvin` à votre avant-poste.
  2. Quittez authentik, et allez dans l'interface d'administration de Pingvin.
  3. 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.