Sign inSign up

cj0r/lftp-sync-manager

By cj0r

•Updated 2 days ago

LFTP Transfer Manager with a sleek Web GUI for automated, fast SFTP push/pull operations.

Image
Integration & delivery
Databases & storage
0

9.5K

cj0r/lftp-sync-manager repository overview

⁠LFTP Sync Manager

Docker Image Version (latest semver) Docker Pulls License

lftp-sync-manager is a sleek, web-based control panel and automation manager for lftp transfers. It provides a modern Web GUI to orchestrate and monitor fast, multi-segmented, parallel file transfers (Push/Pull) over SFTP, complete with real-time file-watching, cron schedules, and multi-profile connection management.

Full documentation, screenshots, and source on GitHub →⁠


⁠Features

  • Sleek Web GUI: Real-time progress bars, speed calculations (Mbps/MBs), log viewers, and 30-day transfer speed graphs.
  • High-Performance Transfers: Segmented downloads (nsegment), parallel file queues (nfile), and automatic reconnects.
  • Multi-Profile Connections: Configure multiple independent SFTP connection profiles (different hosts, credentials, and sync settings) and switch the active one from the header.
  • Secure Web Access: Optional password-protected login with TOTP-based Multi-Factor Authentication (Google Authenticator compatible), plus rate-limited login attempts.
  • SSH Key Handshake Tool: Automatically generates and installs SSH keypairs to your remote host directly from the Web UI — no need to store passwords in configuration files.
  • Real-Time Push Sync: Watches a local directory and uploads modified files instantly. Respects your exclude filters, so partial/in-progress files never trigger a sync.
  • Cron-Scheduled Syncs: Automates push/pull schedules using standard cron expressions.
  • Connection-Rate Protection: A failed sync backs off automatic retries for 30 minutes instead of repeatedly hammering a rate-limited or soft-banned host.
  • Pause, Resume & Abort: Freeze a running sync in place without losing progress and resume it later, or cancel it outright. Pausing also holds off that direction's cron schedule until you resume.
  • File Explorer: Dual-pane local/remote browser with per-item push/pull — transfer a single file or folder on demand without running a full sync. Transfers show live progress, speed and ETA, and can be paused, resumed or aborted mid-flight. Multi-select batch operations, sortable columns, name filtering, and rename support in both panes.
  • Webhook & Event Notifications: Alerts on sync success/failure, File Explorer transfers, connection cooldowns, and failed logins via Discord embeds, Telegram, Gotify, Ntfy, or a custom JSON webhook. Channels are per-profile with independent per-event toggles and a built-in Test button.
  • Readable Logs with Raw Fallback: The live log view is filtered to what matters (transfers, errors, summaries) with a one-click toggle to full raw lftp output. Complete unfiltered logs are always written to disk, SFTP passwords are masked before anything is logged, and a "download redacted log" button additionally strips host and username so logs are safe to share.
  • Credentials Stay on the Server: Stored passwords, MFA secrets, and notification tokens are replaced with a placeholder in every response sent to the browser — testing a saved connection or channel never requires re-typing them.
  • Bandwidth Throttling & Scheduling: Restrict download/upload speeds globally or on a custom time-of-day/day-of-week schedule.
  • Wildcard Filters & Advanced Sync Options: Include/exclude glob patterns, true mirroring (delete-on-destination), dry-run mode, and more.
  • Installable PWA: Add to Home Screen on desktop and mobile for quick access without a browser tab.
  • Unraid Optimized: Runs cleanly on Unraid or any standard Docker daemon.

⁠Quick Start (Docker Compose)

Create a docker-compose.yml file:

services:
  lftp-sync-manager:
    image: cj0r/lftp-sync-manager:latest
    container_name: lftp-sync-manager
    restart: unless-stopped
    ports:
      - "9342:9342"
    volumes:
      - /path/to/config:/config              # Configuration, logs, SSH keys
      - /path/to/local/upload:/local-push    # Files placed here are pushed/uploaded
      - /path/to/local/download:/local-pull  # Remote files are pulled/downloaded here

Run docker compose up -d and navigate to http://localhost:9342.


⁠Volume Mappings

Container PathDescription
/configconfig.json, SSH keys (id_rsa/id_rsa.pub), history, and logs.
/local-pushFiles placed here are pushed/uploaded to the remote host.
/local-pullTarget directory where remote files are pulled/downloaded.

⁠Environment Variables & Ports

  • Exposed Port: 9342 (Web GUI)
  • PORT: Override the default Web GUI port (default: 9342)
  • CONFIG_DIR: Location of configuration files inside the container (default: /config)

⁠Security

This app holds credentials for a remote server and can permanently delete files on both ends. Don't expose the container directly to the internet — put it behind a reverse proxy with TLS. Web authentication is optional and off by default. Prefer the built-in SSH key handshake over storing a password. Provided as is, with no warranty, and used entirely at your own risk — see Security Considerations⁠ and the Disclaimer⁠ before deploying.


⁠What's Next

Actively developed — Plex/Jellyfin/Emby/Sonarr/Radarr rescan integrations, a persistent SQLite history database with long-term analytics, and remote storage/health diagnostics are all on the roadmap. See the full roadmap on GitHub⁠ for details and to leave feedback.


⁠☕ Support the Project

If LFTP Sync Manager has simplified your transfers or automated your backups, consider supporting its continued development! Any contribution is highly appreciated.

Buy Me A Coffee Ko-fi

Tag summary

Content type

Image

Digest

sha256:07d1b362e…

Size

86.9 MB

Last updated

2 days ago

docker pull cj0r/lftp-sync-manager