125 lines
5.7 KiB
Markdown
125 lines
5.7 KiB
Markdown
---
|
|
title: FilePizza
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, downloads, file-sharing, p2p, webrtc, nodejs, react]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=downloads, https://github.com/kern/filepizza]
|
|
---
|
|
|
|
# FilePizza
|
|
|
|
> Partage de fichiers **P2P dans le navigateur** via WebRTC. Aucun fichier n'est uploadé sur un serveur : les pairs se connectent **directement** et le transfert passe d'égal à égal. Idéal pour partager un fichier volumineux en une URL courte.
|
|
|
|
| Métadonnée | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | https://file.pizza/ |
|
|
| **GitHub** | https://github.com/kern/filepizza |
|
|
| **License** | BSD-3-Clause |
|
|
| **Langage** | TypeScript (Node.js + React) |
|
|
| **Étoiles GitHub** | 612 ⭐ |
|
|
| **Dernière MAJ** | 2026-05 |
|
|
| **Catégorie** | [[cat-downloads]] |
|
|
|
|
## Description
|
|
|
|
FilePizza est une application de **partage de fichiers peer-to-peer** basée sur **WebRTC**. Le principe est radical : l'uploader **glisse un fichier dans la page web**, FilePizza génère une **URL courte**, et tous les destinataires qui ouvrent cette URL téléchargent **directement depuis le navigateur de l'uploader** via une connexion WebRTC chiffrée (DTLS-SRTP). Le serveur de signalisation n'est utilisé que pour initier la connexion : les données ne transitent jamais par lui.
|
|
|
|
Cette approche résout un problème classique des plateformes classiques type WeTransfer : la **limite de taille** (souvent 2 Go), le **stockage temporaire** sur un serveur tiers (donc copie sur infrastructure non maîtrisée), et la **durée d'expiration**. Avec FilePizza, il n'y a pas de limite de taille (limitée uniquement par la RAM de l'uploader), pas de serveur de stockage, et le lien reste valide tant que l'uploader laisse la page ouverte.
|
|
|
|
FilePizza utilise **PeerServer** (ou tout autre serveur de signalisation WebRTC compatible) pour faire transiter les **handshakes SDP/ICE** et établir la connexion P2P. La **version officielle** tourne sur `file.pizza` mais le projet est conçu pour être **self-hostable** : clone, build, et un seul `node` plus tard on a son instance privée. Le projet est en **TypeScript** avec un frontend React/Vite et un backend Node.js minimal.
|
|
|
|
## Installation
|
|
|
|
### Option 1 : Docker Compose (recommandé)
|
|
|
|
```yaml
|
|
services:
|
|
filepizza:
|
|
image: ghcr.io/kern/filepizza:latest
|
|
container_name: filepizza
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8083:8083"
|
|
environment:
|
|
- NODE_ENV=production
|
|
- PORT=8083
|
|
- PEERJS_HOST=peerjs-server
|
|
- PEERJS_PORT=9000
|
|
- PEERJS_PATH=/peerjs
|
|
depends_on:
|
|
- peerjs-server
|
|
|
|
peerjs-server:
|
|
image: peerjs/peerjs-server:latest
|
|
container_name: peerjs
|
|
restart: unless-stopped
|
|
ports:
|
|
- "9000:9000"
|
|
```
|
|
|
|
UI sur `http://localhost:8083`. Le serveur PeerJS gère la signalisation WebRTC.
|
|
|
|
### Option 2 : Installation manuelle
|
|
|
|
```bash
|
|
git clone https://github.com/kern/filepizza
|
|
cd filepizza
|
|
pnpm install
|
|
pnpm build
|
|
pnpm start
|
|
# par défaut sur http://localhost:8083
|
|
```
|
|
|
|
## Configuration
|
|
|
|
1. **Serveur PeerJS** : par défaut, FilePizza utilise un serveur public (`0.peerjs.com`). Pour un setup privé, déployer un **PeerJS Server** local (image Docker officielle `peerjs/peerjs-server`).
|
|
2. **Reverse proxy** : configurer HTTPS pour que WebRTC fonctionne correctement (les navigateurs refusent `getUserMedia` et la plupart des APIs P2P sur HTTP).
|
|
3. **Limite de taille** : `MAX_FILE_SIZE` côté serveur (par défaut 1 Go, peut être augmenté pour des RAM plus importantes).
|
|
4. **TURN server** : pour les pairs derrière des NAT stricts, déployer un **TURN** (coturn, [[app-coturn]]) sinon le transfert peut échouer.
|
|
5. **Auth** : FilePizza n'a pas d'authentification native : placer derrière un SSO ([[app-authelia]]) pour exposer en privé.
|
|
6. **Logging** : PeerJS Server expose des logs de signalisation utiles pour debug.
|
|
|
|
## Alternatives
|
|
|
|
### Open Source
|
|
- **Send** (Mozilla) — Fork historique de FilePizza, depuis abandonné
|
|
- **WebWormhole** — Partage P2P CLI + Web, basé sur WebRTC
|
|
- **Wormhole** (Magic-Wormhole) — Transfert P2P en CLI avec codes courts
|
|
- **PairDrop** — AirDrop-like P2P dans le navigateur
|
|
- **Snapdrop** — Pure WebRTC, transfert multi-appareils LAN
|
|
- **OnionShare** — Transfert P2P via Tor
|
|
|
|
### Propriétaires
|
|
- **WeTransfer** — Service freemium, 2 Go max, fichiers hébergés 7 jours
|
|
- **Dropbox Transfer** — Jusqu'à 100 Go, payant
|
|
- **Wetransfer Pro** — Fonctions avancées (mot de passe, expiration)
|
|
- **Firefox Send (historique)** — Ancien service Mozilla, abandonné
|
|
|
|
## Sécurité
|
|
|
|
- Le chiffrement est **de bout en bout** (DTLS-SRTP) : ni le serveur de signalisation, ni le réseau ne voient le contenu
|
|
- Le serveur de signalisation ne voit que les **métadonnées** de connexion (IPs, timing)
|
|
- ⚠️ L'URL courte est un **secret** : toute personne l'ayant peut télécharger
|
|
- Ajouter un **mot de passe** côté client (à demander à l'uploader en parallèle) pour les fichiers sensibles
|
|
- Limiter la durée d'exposition de l'URL
|
|
- TURN server : attention aux credentials en clair, les générer dynamiquement (coturn supporte `use-auth-secret`)
|
|
- Reverse proxy HTTPS obligatoire : WebRTC nécessite un contexte sécurisé
|
|
|
|
## Ressources
|
|
|
|
- Site officiel : https://file.pizza/
|
|
- Code source : https://github.com/kern/filepizza
|
|
- PeerJS (signalisation) : https://peerjs.com/
|
|
- WebRTC : https://webrtc.org/
|
|
|
|
## Pages Liées
|
|
- [[cat-downloads]] — Vue d'ensemble de la catégorie Downloads
|
|
- [[cat-file-sharing]] — Partage de fichiers en général
|
|
- [[app-authelia]] — SSO pour restreindre l'accès
|
|
- [[app-coturn]] — TURN server pour NAT traversal
|
|
- [[app-caddy]] — Reverse proxy HTTPS
|
|
- [[recettes-docker-compose]] — Templates Docker
|