How to Share Big Files with Pingvin Share (Your Own WeTransfer, with Expiry, Passwords and Reverse Shares)

Email caps attachments at 25 MB; WeTransfer wants an account and a fee for anything serious; Nextcloud (32) can share links but is heavy for a one-off. Pingvin Share does one thing: upload files or a folder in the browser (resumable, so a 20 GB upload survives a hiccup), get a link with an expiry, a password and a download limit, send it. Reverse shares turn it round — a link a client opens to upload their files to you, without an account. One container, a clean UI, the files on your disk.
Quick reference
| Task | What |
|---|---|
| Folder | ~/docker/pingvin/compose.yaml |
| Web | https://share.example.com — public, HTTPS |
| First user | register → becomes admin → disable registration in Admin |
| Share | drag files → expiry, password, max views, description → link |
| Reverse share | Reverse shares → Create → send the link → they upload |
| Limits | Admin → Configuration: max share size, chunk size, expiry defaults |
1. The compose file
mkdir -p ~/docker/pingvin/{data,images} && cd ~/docker/pingvin
nano compose.yaml
services:
pingvin-share:
image: stonith404/pingvin-share:latest
container_name: pingvin-share
ports:
- "127.0.0.1:3017:3000"
environment:
TRUST_PROXY: "true"
volumes:
- ./data:/opt/app/backend/data
- ./images:/opt/app/frontend/public/img
restart: unless-stopped
./data holds the SQLite database and every uploaded file — put the folder on the big drive if people will send you video.
docker compose up -d
2. Proxy
share.example.com → 127.0.0.1:3017 (28) with HTTPS and, crucially:
client_max_body_size 0;
proxy_request_buffering off;
proxy_read_timeout 3600;
Uploads are chunked (default 10 MB per request), but turning buffering off keeps big transfers smooth. A Cloudflare Tunnel (109) has a 100 MB per-request limit on free — chunking stays under it, so it works there too.
3. First login and settings
Open it, Sign up — the first account is admin. Then Admin → Configuration:
- General: app name, URL https://share.example.com, Allow registration: off.
- Share: max size (50 GB), chunk size (10 MB), default expiry, allow unauthenticated shares (off — only you create shares; recipients need nothing).
- Email (SMTP, 49): so a share can be sent to an address from inside the app, and reverse-share notifications reach you.
- Branding: logo in ./images.
4. Send files
Home → drag files or a folder → Share: optional custom link name (share.example.com/s/holiday-video), expiration (1 day, 1 week, never), password, max views, description. Create. Copy the link, or Send to an email from the app. The recipient sees a page listing the files with individual and zip downloads, no account, no app. Your My shares page shows views and lets you delete early.
5. Reverse shares: let them send to you
Reverse shares → Create: how many shares may be created, max size, expiry. Copy the link; send it to the client ("upload the photos of the error here"). They open it, drag files, done — you get an email and the files appear under your shares. No account for them, no "it's too big for email", nothing pasted into a stranger's upload site.
6. Tidy
Expired shares and their files are deleted automatically. ./data otherwise grows with what you've shared — a monthly glance, or shorter default expiry. It's not a backup target; it's a transfer area, so the nightly backup (23) can skip it or include it, your call.
Alternatives
Send (the Firefox Send fork, end-to-end encrypted in the browser, no accounts at all), Gokapi, Nextcloud links (32), or Pairdrop for devices on the same LAN (185). Pingvin's reverse shares and admin controls make it the business-friendly one.
Troubleshooting
Upload stalls at a percentage. The proxy's body size or timeout; client_max_body_size 0 and the buffering lines.
"Request entity too large" on Cloudflare. Chunk size above 100 MB; set it to 10–50 MB.
Emails not sent. SMTP settings in Admin; test from there.
Links show http. The app URL in Admin → General, and TRUST_PROXY.
Wrapping up
One container behind HTTPS with upload buffering off, registration closed after your account, a reverse-share link in your email signature. Files of any size go out as a link that expires, and come in the same way — on your server, with no account on anyone else's.
