Files
wiki/Catalogue-Self-Hosted/apps/app-filepizza.md
T
2026-06-09 18:40:21 +02:00

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