This is an automated archive made by the Lemmit Bot.
The original was posted on /r/selfhosted by /u/thehelpfulidiot on 2025-02-17 21:22:31+00:00.
Hey everyone,
A while back, I created Ghostboard, a self-hosted way to share real-time synchronized text between machines. Some users suggested adding file sharing, but I personally use PairDrop for that and didn’t want to overcomplicate Ghostboard’s code.
The issue? PairDrop lacks a command-line option, making it tricky to use in automated workflows. I wanted something that:
✅ Can run on demand
✅ Lets me upload files to a specific folder
✅ Shuts down after use (so it’s not a permanent service)
Thus, GhostFile was born! 🚀
Spin it up from the command line and it will start a webserver which will allow an individual to upload files directly to the host system in a user specified directory.
🔥 What is GhostFile?
GhostFile is an ephemeral file upload server. Unlike a traditional file server, GhostFile:
✅ Starts only when needed
✅ Lets you drag & drop multiple files into a simple web interface
✅ Uploads directly to a local folder or a specified directory
✅ Automatically shuts down after a successful upload
It’s not a persistent service! This is not for always-on file hosting—it’s a simple, fast solution for when you need to quickly move files between machines.
🛠️ How to Use GhostFile
🐍 Bare Metal (Python)
- Clone & Install:git clone cd ghostfile pip install -r requirements.txt
- Run the Server:
- By default:
- Runs on
0.0.0.0:5000
(accessible on LAN) - Saves files to
./downloads/
- Runs on
- By default:
- python3 upload_server.py
- Upload Files:
- Open a browser to
http://:5000
- Drag and drop files or select them
- Click Upload
- The server automatically shuts down
- Open a browser to
🐳 Running with Docker
GhostFile is fully containerized, so you can spin it up quickly:
docker run --rm -t -v ./downloads:/app/downloads -p 5000:5000 thehelpfulidiot/ghostfile
💡 What this does:
--rm
→ Removes the container after it stops-t
→ Allocates a terminal for logging-v ./downloads:/app/downloads
→ Maps the host folder to the container’s upload directory-p 5000:5000
→ Exposes port 5000
Now, just upload your files, and the server closes itself after the transfer is complete. 🎉
💡 Why Use GhostFile?
✔ No extra services required – No SMB/NFS, just a lightweight upload UI
✔ Works anywhere – Run locally or in Docker
✔ LAN-friendly – Works across multiple machines on your network
✔ Doesn’t stay running – Perfect for quick file transfers
✔ Choose your save location – Default is ./downloads/
, but can be overridden
⚠️ Not a Permanent File Server
GhostFile is NOT a file-hosting solution. It’s designed for:
- Quick file transfers between devices
- One-time uploads where PairDrop isn’t practical
- On-the-go use without keeping a service running
Once you upload your files, the server shuts down—no need to manually stop it.
📸 Screenshot
Here’s a preview of GhostFile’s simple web interface:
🌍 Get GhostFile
💾 GitHub Repo:
Would love to hear what you think! 🚀 Have suggestions or feature requests? Drop them in the comments. 🖖