Pairdrop

INTRODUZIONE

Pairdrop è un’alternativa cross-platform ad AirDrop che funziona su qualsiasi piattaforma. Permette di inviare immagini, documenti e testi tramite connessione peer-to-peer a dispositivi nella stessa rete locale Wi-Fi o a dispositivi abbinati. Non richiede configurazione né registrazione per condividere file istantaneamente.

PERCHÈ UTILIZZARLO

Vantaggi Principali

  • Universale: Funziona su Windows, macOS, Linux, Android e iOS
  • Sicuro: Connessioni peer-to-peer cifrate senza server intermediari
  • Semplice: Nessuna installazione app, funziona direttamente dal browser
  • Privato: I file non passano attraverso server esterni
  • Veloce: Trasferimento diretto tra dispositivi senza limiti di dimensione

Casi d’Uso

  • Home Office: Condividere file rapidamente tra dispositivi personali
  • Ambiente Aziendale: Trasferimento sicuro di documenti in rete locale
  • Famiglia: Condividere foto e video tra smartphone, tablet e computer
  • Team di Lavoro: Collaborazione istantanea senza servizi cloud
  • Rete Locale: Alternative sicura a servizi di file sharing pubblici

Funzionalità Avanzate

  • Abbinamento Dispositivi: Connessioni persistenti tramite codice a 6 cifre o QR-Code
  • Stanze Pubbliche: Connessioni temporanee tramite codice a 5 lettere
  • NAT Traversal: Funziona anche con dispositivi fuori dalla rete locale
  • Fallback WebSocket: Supporto per reti che bloccano WebRTC
  • Rate Limiting: Controllo del traffico per prevenire abusi

PROCESSO DI INSTALLAZIONE

Preparazione Environment

Creare una directory per Pairdrop e il file di configurazione:

bash
mkdir -p ~/docker/pairdrop
cd ~/docker/pairdrop

File Docker Compose

Creare il file docker-compose.yml:

yaml
services:
  pairdrop:
    image: lscr.io/linuxserver/pairdrop:latest
    container_name: pairdrop
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - RATE_LIMIT=${RATE_LIMIT}
      - WS_FALLBACK=${WS_FALLBACK}
      - DEBUG_MODE=${DEBUG_MODE}
    ports:
      - "${PAIRDROP_PORT}:3000"
    restart: unless-stopped
    networks:
      - pairdrop-network

networks:
  pairdrop-network:
    driver: bridge

File di Configurazione (.env)

Creare il file .env nella stessa directory:

bash
# Configurazione Utente
PUID=1000
PGID=1000
TZ=Europe/Rome

# Configurazione Rete
PAIRDROP_PORT=3000

# Configurazioni Avanzate
RATE_LIMIT=false
WS_FALLBACK=false
DEBUG_MODE=false

# Configurazione RTC (opzionale)
# RTC_CONFIG=/config/rtc_config.json

Avvio del Container

bash
# Avviare il servizio
docker-compose up -d

# Verificare lo stato
docker-compose ps

# Visualizzare i log
docker-compose logs -f pairdrop

!!! note “Accesso Web Interface” L’interfaccia web sarà disponibile su http://INDIRIZZO_SERVER:3000

SPIEGAZIONE DEL CODICE

Analisi Docker Compose

Configurazione Container

yaml
image: lscr.io/linuxserver/pairdrop:latest
container_name: pairdrop

Utilizza l’immagine ufficiale LinuxServer.io per Pairdrop, che include ottimizzazioni di sicurezza e stabilità.

Gestione Permessi

yaml
environment:
  - PUID=${PUID}
  - PGID=${PGID}
  - TZ=${TZ}
  • PUID/PGID: Gestiscono i permessi file per evitare problemi di ownership
  • TZ: Configura il timezone per log e timestamp corretti

Configurazioni Funzionali

yaml
- RATE_LIMIT=${RATE_LIMIT}
- WS_FALLBACK=${WS_FALLBACK}
- DEBUG_MODE=${DEBUG_MODE}
  • RATE_LIMIT: Limita le richieste a 1000 ogni 5 minuti per prevenire abusi
  • WS_FALLBACK: Abilita fallback WebSocket se WebRTC non è disponibile
  • DEBUG_MODE: Attiva logging dettagliato per troubleshooting

Networking

yaml
ports:
  - "${PAIRDROP_PORT}:3000"
networks:
  - pairdrop-network

Espone il servizio sulla porta 3000 e crea una rete isolata per sicurezza.

Variabili Environment

Variabile Scopo Default Personalizzazione
PUID User ID per permessi file 1000 ID utente host
PGID Group ID per permessi file 1000 ID gruppo host
TZ Timezone sistema Etc/UTC Europe/Rome
PAIRDROP_PORT Porta esposta container 3000 Porta libera
RATE_LIMIT Limitazione richieste false true/false
WS_FALLBACK Fallback WebSocket false true/false
DEBUG_MODE Modalità debug false true/false
RTC_CONFIG Configurazione STUN/TURN - Percorso file JSON

CONFIGURAZIONI AGGIUNTIVE

Reverse Proxy con NGINX Proxy Manager

Per esporre Pairdrop pubblicamente in sicurezza:

nginx
location / {
    proxy_pass http://pairdrop:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    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_cache_bypass $http_upgrade;
}

!!! warning “Header X-Forwarded-For” È essenziale configurare correttamente l’header X-Forwarded-For per evitare che tutti i client siano mutualmente visibili.

Configurazione STUN/TURN Personalizzata

Per dispositivi dietro NAT complessi, creare /config/rtc_config.json:

json
{
  "sdpSemantics": "unified-plan",
  "iceServers": [
    {
      "urls": "stun:stun.l.google.com:19302"
    },
    {
      "urls": "turn:your-turn-server.com:3478",
      "username": "username",
      "credential": "password"
    }
  ]
}

Aggiungere al docker-compose.yml:

yaml
environment:
  - RTC_CONFIG=/config/rtc_config.json
volumes:
  - ./config:/config

Ottimizzazioni Performance

Abilitazione WebSocket Fallback

Per reti VPN o aziendali che bloccano WebRTC:

bash
WS_FALLBACK=true

!!! tip “Attenzione Bandwidth” Il fallback WebSocket instrada il traffico attraverso il server, utilizzando la bandwidth del server invece della connessione peer-to-peer.

Rate Limiting Avanzato

Per ambienti con molti utenti:

bash
RATE_LIMIT=true

Limita ogni client a 1000 richieste ogni 5 minuti.

Monitoraggio e Troubleshooting

Abilitazione Debug

bash
DEBUG_MODE=true

Registra indirizzi IP e connessioni peer per diagnosticare problemi di rete.

Comandi Utili

bash
# Monitoraggio log in tempo reale
docker-compose logs -f pairdrop

# Statistiche utilizzo risorse
docker stats pairdrop

# Restart del servizio
docker-compose restart pairdrop

# Aggiornamento immagine
docker-compose pull && docker-compose up -d

Backup e Mantenimento

bash
# Backup configurazione
tar -czf pairdrop-backup-$(date +%Y%m%d).tar.gz docker-compose.yml .env config/

# Pulizia log
docker-compose exec pairdrop sh -c 'truncate -s 0 /var/log/*.log'

!!! tip “Sicurezza” Per installazioni pubbliche, utilizzare sempre HTTPS tramite reverse proxy e considerare l’implementazione di autenticazione aggiuntiva a livello di proxy.