Devi inviare un archivio ZIP, fotografie, documenti o altri file di grandi dimensioni, ma non vuoi dipendere da WeTransfer o da un servizio cloud esterno? Con Pingvin Share X puoi creare un’alternativa a WeTransfer sul tuo server, caricare file dal browser e condividerli tramite link con data di scadenza, password e limite di visite.
Pingvin Share X è un’applicazione open source e self-hosted: i file caricati vengono conservati nello spazio disco del server scelto dall’amministratore, oppure in uno storage compatibile con S3. L’applicazione permette di creare condivisioni temporanee e di inviarle ai destinatari, mantenendo il controllo sull’infrastruttura e sulle regole di accesso.
In questa guida vedremo come installare Pingvin Share X con Docker Compose su Debian o su un’altra distribuzione GNU/Linux compatibile, creare il primo link temporaneo e preparare il servizio per un’esposizione sicura tramite reverse proxy.
Cos’è Pingvin Share X e perché usarlo al posto di WeTransfer
Pingvin Share X è un fork mantenuto di Pingvin Share, progettato per condividere file attraverso un collegamento web. Il suo utilizzo è simile a WeTransfer: si carica uno o più file, si definiscono le opzioni della condivisione e si ottiene un URL da inviare al destinatario.
La differenza principale è che Pingvin Share X viene eseguito sul proprio server. Questo significa che puoi scegliere dove vengono archiviati i file, quanto tempo devono restare disponibili, chi può accedere al pannello e quali limiti applicare alle condivisioni.
Funzioni principali
- Condivisione di file tramite link diretto;
- Data di scadenza per rimuovere automaticamente una condivisione;
- Password per proteggere il download;
- Limite al numero di visite;
- Invio del link ai destinatari via email;
- Reverse share, cioè pagine dalle quali altre persone possono caricare file sul tuo server;
- Autenticazione OIDC e LDAP;
- Supporto per ClamAV, utile per sottoporre i file a una scansione antivirus;
- Storage locale oppure compatibile con S3.
Il limite effettivo dei file dipende dallo spazio libero sul server, dalla configurazione dell’applicazione e dai limiti eventualmente imposti dal reverse proxy. Se utilizzi Nginx, Apache, Cloudflare o un altro proxy davanti a Pingvin Share X, verifica sempre le relative impostazioni prima di consentire upload molto grandi.
Requisiti
Per seguire il tutorial servono:
- Un server Debian, Ubuntu o un’altra distribuzione GNU/Linux;
- Un utente con permessi
sudo; - Docker Engine e Docker Compose Plugin;
- Spazio disco sufficiente per i file che intendi ricevere e condividere;
- Un browser web per completare la configurazione iniziale;
- Facoltativamente, un dominio e un reverse proxy con certificato HTTPS per esporre il servizio su Internet.
Se devi preparare il sistema operativo, puoi seguire la nostra guida all’installazione di Debian Server. Se Docker non è ancora presente sul server, consulta il tutorial su come installare Docker e Docker Compose su Raspberry Pi e GNU/Linux: la procedura è adatta anche a Debian e a molte altre distribuzioni basate su Debian.
Aggiornare il server prima dell’installazione
Collegati al server tramite SSH e aggiorna l’elenco dei pacchetti e il sistema:
sudo apt update && sudo apt upgrade -y
Verifica poi che Docker e Docker Compose siano disponibili:
docker --version
docker compose version
Se il comando docker restituisce un errore di permessi, usa sudo davanti ai comandi oppure aggiungi il tuo utente al gruppo Docker secondo la procedura descritta nella guida collegata sopra.
Creare la cartella di Pingvin Share X
Creiamo una cartella dedicata all’applicazione in /opt. Al suo interno conserveremo il file Docker Compose e i dati persistenti, compresi database, impostazioni e file caricati.
sudo mkdir -p /opt/pingvin-share-x/data
sudo chown -R $USER:$USER /opt/pingvin-share-x
cd /opt/pingvin-share-x
Controlla l’ID utente e l’ID gruppo dell’utente attuale. Li useremo nel file Compose per fare in modo che il container possa scrivere nella cartella montata dal server:
id
L’output contiene valori simili al seguente:
uid=1000(nomeutente) gid=1000(nomeutente) groups=1000(nomeutente),...
Nell’esempio del tutorial utilizzeremo 1000 sia per PUID sia per PGID. Se il tuo output riporta valori diversi, sostituiscili nel file Compose.
Creare il file Docker Compose
Apri un nuovo file:
nano compose.yaml
Incolla la seguente configurazione:
services:
pingvin-share-x:
image: smp46/pingvin-share-x:v2.0.0
container_name: pingvin-share-x
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
environment:
PUID: 1000
PGID: 1000
TRUST_PROXY: "false"
volumes:
- ./data:/opt/app/backend/data
- ./data/images:/opt/app/frontend/public/img
Salva con Ctrl+O, premi Invio e chiudi Nano con Ctrl+X.
Perché usare una versione fissata
La riga image: smp46/pingvin-share-x:v2.0.0 utilizza una release precisa. Evitare il tag latest rende gli aggiornamenti più controllabili: prima di cambiare versione puoi leggere le note di rilascio, creare un backup e verificare se esistono modifiche incompatibili.
La versione 2.0.0 introduce cambiamenti rilevanti per lo storage S3. Se utilizzi S3, non aggiornare alla nuova major release senza leggere la documentazione del progetto e senza verificare la configurazione CORS del bucket.
Perché la porta è collegata a 127.0.0.1
La riga seguente:
- "127.0.0.1:3000:3000"
rende Pingvin Share X raggiungibile solo dal server locale. È una scelta consigliata quando userai Nginx, Caddy, Traefik o Nginx Proxy Manager per esporre il servizio tramite un dominio HTTPS.
Per una prova iniziale dalla rete locale, puoi sostituire temporaneamente quella riga con:
- "3000:3000"
In questo caso l’applicazione sarà raggiungibile all’indirizzo:
http://IP_DEL_SERVER:3000
Non esporre direttamente la porta 3000 su Internet: per consentire a destinatari esterni di scaricare o caricare file, configura prima un reverse proxy con HTTPS.
Avviare Pingvin Share X
Dal percorso /opt/pingvin-share-x, avvia il container:
docker compose up -d
Docker scaricherà l’immagine e avviera il servizio in background. Controlla che il container sia attivo:
docker compose ps
Dovresti vedere un output simile a questo:
NAME IMAGE STATUS
pingvin-share-x smp46/pingvin-share-x:v2.0.0 Up
Se il container non parte, controlla i log:
docker compose logs --tail=100 pingvin-share-x
Per seguire i log in tempo reale puoi usare:
docker compose logs -f pingvin-share-x
Premi Ctrl+C per interrompere la visualizzazione dei log. Il container continuerà a funzionare in background.
Primo accesso e configurazione iniziale
Apri nel browser l’indirizzo dell’istanza:
http://IP_DEL_SERVER:3000
Se hai mantenuto il binding su 127.0.0.1, il servizio non sarà raggiungibile direttamente dalla rete: completa prima il reverse proxy oppure usa un tunnel SSH soltanto per test amministrativi.
Al primo accesso crea l’account amministratore con una password lunga, unica e conservata in un password manager. Non utilizzare una password riutilizzata su altri servizi.
Dopo avere effettuato l’accesso, apri il pannello di amministrazione e controlla le impostazioni disponibili. Pingvin Share X permette di configurare diverse opzioni direttamente dall’interfaccia web, incluse le regole per le condivisioni e alcune impostazioni di sicurezza.
Come creare un link temporaneo per condividere un file
Dopo avere configurato l’account, puoi creare una condivisione dal pannello principale.
- Apri Pingvin Share X e accedi con il tuo account;
- Seleziona il file oppure trascinalo nell’area di upload;
- Inserisci un nome o una descrizione utile per riconoscere la condivisione;
- Imposta una data di scadenza;
- Facoltativamente, aggiungi una password;
- Facoltativamente, imposta un limite al numero di visite;
- Crea la condivisione;
- Copia il link generato e invialo al destinatario tramite il canale che preferisci.
Una data di scadenza è importante: evita che file non più necessari restino disponibili indefinitamente. Se il contenuto è riservato, usa anche una password e inviala al destinatario con un canale diverso rispetto al link.
Esempio pratico
Supponiamo di dover inviare un archivio chiamato documenti-progetto.zip a un collaboratore:
- Carica
documenti-progetto.zip; - Imposta una scadenza di sette giorni;
- Proteggi il link con una password;
- Imposta un massimo di tre visite se il file deve essere scaricato da una sola persona;
- Invia il link tramite email;
- Invia la password tramite un messaggio separato.
Quando la condivisione scade, il link non deve più essere utilizzabile. Verifica periodicamente dal pannello che le condivisioni scadute siano state rimosse secondo le impostazioni desiderate.
Ricevere file con Reverse Share
Pingvin Share X include anche la funzione Reverse Share. Invece di creare un link per far scaricare un file, puoi creare una pagina dalla quale il destinatario carica un file sul tuo server.
Questa funzione è utile quando devi ricevere documenti, fotografie, log, archivi o altri allegati troppo grandi per essere inviati via email.
Prima di usare Reverse Share con utenti esterni, definisci regole precise:
- Imposta una scadenza ravvicinata per il link di upload;
- Imposta una password quando il contenuto non è pubblico;
- Stabilisci una dimensione massima ragionevole per i file;
- Controlla lo spazio libero sul server;
- Non aprire pagine di upload anonime senza limiti o senza una scadenza;
- Valuta l’integrazione con ClamAV se ricevi file da soggetti esterni.
Esporre Pingvin Share X con Nginx e HTTPS
Per usare Pingvin Share X come alternativa a WeTransfer con persone esterne alla rete locale, devi esporre l’applicazione attraverso un dominio configurato con HTTPS. Il metodo più comune consiste nell’usare un reverse proxy, cioè un web server che riceve le richieste sulla porta 443 e le inoltra al container locale.
Di seguito trovi un esempio essenziale per Nginx. Sostituisci files.example.com con il tuo dominio.
server {
listen 80;
listen [::]:80;
server_name files.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name files.example.com;
ssl_certificate /etc/letsencrypt/live/files.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/files.example.com/privkey.pem;
client_max_body_size 10G;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_request_buffering off;
proxy_buffering off;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
}
Nel file di esempio, client_max_body_size 10G imposta una dimensione massima di 10 GB per le richieste in arrivo. Scegli un limite coerente con lo spazio libero, la banda disponibile e l’uso previsto del servizio. Non impostare limiti molto alti senza considerare il rischio di upload accidentali o indesiderati.
La direttiva proxy_request_buffering off permette a Nginx di inoltrare il caricamento al servizio mentre il file viene ricevuto, evitando di dover prima memorizzare integralmente la richiesta in un file temporaneo del reverse proxy.
Dopo avere creato e verificato il virtual host Nginx, modifica il file compose.yaml di Pingvin Share X:
nano /opt/pingvin-share-x/compose.yaml
Sostituisci questa riga:
TRUST_PROXY: "false"
con:
TRUST_PROXY: "true"
Questa impostazione va usata soltanto quando Pingvin Share X riceve traffico da un reverse proxy configurato correttamente. Il proxy deve sovrascrivere gli header inoltrati dai client, compreso X-Forwarded-For, invece di fidarsi ciecamente di valori inviati dall’esterno.
Riavvia quindi il container:
cd /opt/pingvin-share-x
docker compose up -d
Infine verifica la configurazione di Nginx e ricarica il servizio:
sudo nginx -t
sudo systemctl reload nginx
Apri quindi:
https://files.example.com
Se utilizzi Nginx Proxy Manager, Traefik o Caddy, il concetto è lo stesso: il proxy deve inoltrare il traffico al server locale sulla porta 3000, fornire un certificato TLS valido e consentire upload delle dimensioni previste.
Sicurezza: impostazioni consigliate
Un servizio di condivisione file esposto su Internet richiede più attenzione di un’applicazione usata soltanto in LAN. Applica almeno queste misure.
1. Usa HTTPS obbligatorio
Non inviare password e file attraverso HTTP in chiaro. Configura un certificato TLS valido e reindirizza tutte le richieste HTTP verso HTTPS.
2. Mantieni Pingvin Share X aggiornato
Pingvin Share X è in sviluppo attivo. Controlla periodicamente le release e gli avvisi di sicurezza del progetto prima di aggiornare. Evita tag generici come latest in produzione: una versione fissata consente di scegliere consapevolmente quando aggiornare.
3. Proteggi l’account amministratore
Usa una password unica e lunga. Se abiliti OIDC o altri metodi di autenticazione, verifica con attenzione l’associazione tra account, ruoli e indirizzi email prima di consentire accessi amministrativi.
4. Limita le condivisioni
Per ogni file condiviso, imposta una scadenza. Usa password e limiti di visite quando il file non deve essere liberamente accessibile. Elimina manualmente le condivisioni non più necessarie se devono sparire prima della scadenza.
5. Pianifica backup e controllo dello spazio
I dati persistenti si trovano nella cartella:
/opt/pingvin-share-x/data
Questa cartella contiene dati importanti dell’applicazione e file caricati. Includila nelle strategie di backup, ma ricorda che un backup può contenere file riservati: proteggilo, cifra il supporto quando necessario e applica una politica di conservazione coerente.
Controlla periodicamente lo spazio libero:
df -h /opt/pingvin-share-x
Per vedere quanto spazio usa l’applicazione:
du -sh /opt/pingvin-share-x/data
Come aggiornare Pingvin Share X
Prima di aggiornare, consulta sempre le note della release. Le versioni principali possono introdurre modifiche incompatibili, in particolare per configurazioni S3.
Per creare un backup semplice della cartella dati:
cd /opt
tar -czf pingvin-share-x-backup-$(date +%F).tar.gz pingvin-share-x/data
Per aggiornare a una nuova release, modifica il tag dell’immagine nel file compose.yaml. Ad esempio, per passare a una futura versione v2.x.x verificata:
nano /opt/pingvin-share-x/compose.yaml
Scarica quindi la nuova immagine e ricrea il container:
cd /opt/pingvin-share-x
docker compose pull
docker compose up -d
Controlla infine lo stato e i log:
docker compose ps
docker compose logs --tail=100 pingvin-share-x
Comandi utili per gestire il container
Arrestare Pingvin Share X
cd /opt/pingvin-share-x
docker compose down
Avviare nuovamente Pingvin Share X
cd /opt/pingvin-share-x
docker compose up -d
Riavviare il container
cd /opt/pingvin-share-x
docker compose restart
Visualizzare i log
cd /opt/pingvin-share-x
docker compose logs -f pingvin-share-x
Rimuovere il servizio senza eliminare i dati
cd /opt/pingvin-share-x
docker compose down
Il comando precedente rimuove il container e la rete Compose, ma non elimina la cartella data. Non cancellare manualmente /opt/pingvin-share-x/data se vuoi conservare file e configurazione.
Conclusioni
Pingvin Share X è una valida alternativa self-hosted a WeTransfer per chi desidera condividere file attraverso link temporanei mantenendo il controllo sul proprio server. Con Docker Compose puoi installarlo rapidamente, mentre password, scadenze e limiti di visite aiutano a ridurre il rischio che un collegamento resti accessibile più a lungo del necessario.
Per un utilizzo esterno, la parte più importante non è soltanto l’installazione del container: devi esporre l’applicazione tramite HTTPS, impostare limiti di upload adeguati, aggiornare il software e proteggere i dati persistenti con backup affidabili.
Per codice sorgente, documentazione, release e segnalazioni di sicurezza, consulta la repository GitHub ufficiale di Pingvin Share X.
Domande frequenti
Pingvin Share X è gratuito?
Pingvin Share X è un progetto open source che puoi eseguire sul tuo server. Restano a tuo carico infrastruttura, spazio disco, backup, dominio, certificati e manutenzione del sistema.
Posso usarlo come alternativa a WeTransfer?
Sì. Puoi caricare file, creare un link, impostare una data di scadenza e inviare l’URL al destinatario. A differenza di un servizio gestito, sei tu a decidere dove risiedono file e dati dell’applicazione.
Esiste un limite alla dimensione dei file?
Il limite dipende dallo spazio disco disponibile, dalle impostazioni di Pingvin Share X e dalla configurazione del reverse proxy. Se usi Nginx, controlla in particolare client_max_body_size.
Posso proteggere i link con password?
Sì. Durante la creazione di una condivisione puoi impostare una password. Per migliorare la sicurezza, invia password e link tramite canali differenti.
Posso ricevere file da altre persone?
Sì. La funzione Reverse Share permette di creare una pagina di upload da inviare a un’altra persona. Configura sempre una scadenza, un limite di upload e, quando opportuno, una password.
Devo esporre direttamente la porta 3000 su Internet?
No. È preferibile mantenere la porta 3000 disponibile solo localmente e usare un reverse proxy con HTTPS, come Nginx, Caddy, Traefik o Nginx Proxy Manager.

