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)

  1. Clone & Install:git clone cd ghostfile pip install -r requirements.txt
  2. Run the Server:
    • By default:
      • Runs on 0.0.0.0:5000 (accessible on LAN)
      • Saves files to ./downloads/
  3. python3 upload_server.py
  4. Upload Files:
    • Open a browser to http://:5000
    • Drag and drop files or select them
    • Click Upload
    • The server automatically shuts down

🐳 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:

Ghostfile Screenshot

🌍 Get GhostFile

💾 GitHub Repo:

Would love to hear what you think! 🚀 Have suggestions or feature requests? Drop them in the comments. 🖖