Introducing BenchPress — Self-hosted Frappe Cloud alternative (Docker + WireGuard + Vue 3 Dashboard)

Hey everyone :waving_hand:

I’ve been working on something that I think a lot of Frappe/ERPNext developers will relate to.

The problem we all know too well:

Every time you start a new project or onboard a team member, it’s the same 30-minute ritual — install bench CLI, MariaDB, Redis, Node.js, wkhtmltopdf, and a dozen other dependencies. Different projects need different Frappe versions and your OS gets polluted. One broken bench can affect everything on your machine. And there’s no easy way for team members to SSH into each other’s dev environments.

So I built BenchPress.

BenchPress is a Frappe app (built on Frappe v16, Python 3.14+) that acts as a self-hosted Frappe Cloud alternative. The idea is simple:

  1. Create a Lab — A reusable template where you define which apps you need (Frappe, ERPNext, HRMS, CRM, LMS, Helpdesk, Wiki, Webshop, or any custom app), the Frappe version (v14/v15/v16/develop), and resource limits (CPU/memory)
  2. Build once — A 5-layer cached Dockerfile builds the image with all apps baked in. Only changed layers rebuild, so iterative builds are fast
  3. Deploy in clicks — Each bench spins up in its own Docker container on a shared infrastructure — a single benchpress-mariadb and benchpress-redis container (managed via docker-compose) serve all benches
  4. SSH via WireGuard — Each container runs its own wg0 WireGuard interface with a dedicated VPN IP (10.10.0.X). No iptables DNAT hassles — you SSH directly to the container’s VPN IP
  5. Real-time logs — Watch Docker image builds and container deployments stream live in the browser via frappe.publish_realtime WebSocket, GitHub Actions-style with collapsible steps and status indicators
  6. Manage everything — Start, stop, restart, redeploy, delete benches. Create multiple Frappe sites per bench. Monitor CPU and memory usage.

The frontend is a full Vue 3 SPA built with Vite, TailwindCSS, and frappe-ui — not just a Desk UI. It includes:

  • Searchable/filterable Labs list with status badges
  • Tabbed Lab Detail page (Dashboard, Sites, Build Log)
  • Connection info panel with VPN IP, SSH command, password (copy-to-clipboard)
  • Bench Instances table with live CPU/memory progress bars
  • Collapsible log viewers for both build and deploy logs
  • VPN Device Management — register persistent devices (Laptop, Mobile, etc.) and download WireGuard configs
  • Dark mode toggle

Tech stack:

  • Backend: Python 3.14 + Frappe v16
  • Frontend: Vue 3 + Vite + TailwindCSS + frappe-ui
  • Containers: Docker Engine (Python SDK)
  • VPN: WireGuard (inside-container, kernel-level)
  • Database: Shared MariaDB 10.6 container (docker-compose)
  • Cache/Queue: Shared Redis 7 container + RQ for background jobs
  • Real-time: Socket.io via Frappe

Data model: 11 DocTypes — Lab, Lab App, Bench Instance, Bench App, Bench Site, Site App, Database Server, BenchPress Settings, Bench Device, Deploy Log, Build Log

Scheduler jobs:

  • Stats collection every 1 minute (Docker + WireGuard metrics)
  • MariaDB health check every 5 minutes (auto-restart if down)
  • Daily backup at 2 AM with 7-day retention

Quick setup:

bench get-app https://github.com/Venkateshvenki404224/benchpress --branch develop
bench pip install docker
bench --site your-site install-app benchpress
bench --site your-site migrate
bash apps/benchpress/setup.sh your-site
cd apps/benchpress/frontend && yarn install && yarn build
bench start

The setup.sh script is idempotent and handles Docker group, shared MariaDB/Redis, IP forwarding, sudoers, WireGuard tools, and WireGuard server setup in one go.

I also made a video explaining what BenchPress is and why I built it:
:backhand_index_pointing_right: https://www.youtube.com/watch?v=DzTNwA39PqA

GitHub repo (8 :star:, 5 forks so far):
:backhand_index_pointing_right: GitHub - Venkateshvenki404224/benchpress: Press a button. Get a Frappe bench. Self-hosted, Docker-powered, VPN-secured. · GitHub

Detailed docs including Getting Started, Creating Labs, Connecting to Benches, Logs & Monitoring, Device Management, and WireGuard Setup are all in the /docs/ folder.

This was built for FOSS Hack 2026 and is MIT licensed.

Phase 1 is complete. Phase 2 will bring more MariaDB management features, backup scheduling improvements, and more.

I’d love to hear your feedback, suggestions, and ideas. PRs and issues are very welcome!

Cheers :raising_hands:

9 Likes

great job.

1 Like

Seems like a well-made app! Great Work!

1 Like

Hi @Venkatesh_M

Looks interesting … perhaps you may want to give us a small table showing differences (e.g. Wireguard VPN) with GitHub - rtCamp/Frappe-Manager: A CLI tool based on Docker Compose to easily manage Frappe based projects. · GitHub

Also great if you can fill the below form in community marketplace to get better coverage: -

1 Like

Thanks @asieftejani! Great suggestion. Here’s a quick comparison:

Frappe Manager (rtCamp) BenchPress
Interface CLI (fm create mysite) Web UI (Vue 3 SPA dashboard)
Target Local dev machines (Mac/Linux) Remote servers (self-hosted, team-shared)
Container model Docker Compose per bench (each bench gets its own MariaDB, Redis) Shared benchpress-mariadb + benchpress-redis via docker-compose, lighter per-bench footprint
Remote access Not built-in (local only) WireGuard VPN — each container gets a VPN IP, SSH in from anywhere
Multi-user Single user / single machine Multi-user with VPN Device Management (register Laptop, Mobile, etc.)
Build caching Uses official Frappe Docker images Custom 5-layer cached Dockerfile — only changed layers rebuild
Live logs Terminal output Real-time WebSocket streaming in browser (GitHub Actions-style)
SSL Built-in Let’s Encrypt Not yet (planned)
VSCode integration Yes (debugger support) Not yet
Dev/Prod modes Yes (environment switching) Dev-focused for now
Admin tools Mailpit, Adminer, Redis Dashboard Stats monitoring (CPU/memory), connection info panel
Built with Python CLI (pipx/uv) Frappe app itself (dogfooding)

TL;DR: Frappe Manager is great for local dev workflows on your own machine. BenchPress is built for teams who want a shared, remote-accessible server where anyone can spin up a bench and SSH in via VPN — think “self-hosted Frappe Cloud” rather than “local dev tool.”

They’re complementary more than competitive. Use FM for local work, BenchPress when you need shared remote environments.

Thanks for the community marketplace link — I’ll fill that out!

1 Like

Can this app be used as a replacement for the Frappe Press App? Or do they serve totally different purposes? If they are different, how do they differ? or if it can be used instead of press, what functionalities your app is missing from the press app?

1 Like

@Omar-Abdullah I think a lot of people (most probably freelancers) want a mini press without the complexities of the current press setup

@Venkatesh_M perhaps you can join this team in creating that

1 Like

That is why I am asking about that. Thanks for the reply.

1 Like

Great question — and one I get asked a lot!

Short answer: They serve different purposes. BenchPress is NOT a replacement for Frappe Press.

Frappe Press is a full-scale production cloud platform — it’s what powers Frappe Cloud. It handles multi-tenancy, billing/subscriptions, app marketplace, automated updates, SSL via Let’s Encrypt, offsite backups, server provisioning via Ansible, role-based team permissions, Stripe/Razorpay payment integration, hybrid cloud support, and much more. It’s designed to run hundreds of customer sites in production.

BenchPress is a dev environment manager — it solves the “I need a fresh Frappe bench with these apps” problem. It’s meant for development teams, freelancers, workshops, and testing.

Here’s where they differ:

Frappe Press BenchPress
Purpose Production hosting platform Dev environment provisioning
Scale Hundreds of production sites Handful of dev benches
Multi-tenancy Full (multiple sites, versioned apps, rolling updates) Basic (multi-site per container)
Billing Subscriptions, wallets, Stripe, Razorpay None
Marketplace App listing, pricing, payouts None
SSL Automated Let’s Encrypt Not yet
Server provisioning Ansible-based, multi-server (app/db/proxy) Single server, Docker containers
Updates Automated rolling updates Manual (SSH in, bench update)
Backups Automated on-site + offsite MariaDB daily backup with 7-day retention
Access Dashboard + SSH WireGuard VPN + SSH
Team management Roles, permissions, teams VPN Device Management
Setup complexity High (Press + Agent + Ansible + Docker + multiple servers) Low (one Frappe app + setup.sh)

What BenchPress is missing from Press: Billing, marketplace, automated updates, multi-server orchestration, Ansible provisioning, SSL, team permissions, and production-grade scaling.

What BenchPress adds that Press doesn’t focus on: WireGuard VPN for instant remote SSH into dev containers, Lab templates for repeatable dev environments, and a much simpler setup (single server, single script).

Think of it this way:

  • Press = Heroku for Frappe (production)
  • BenchPress = Docker Desktop for Frappe (development)

Hope that clarifies it!

1 Like

Great job! Can I vote for you on FOSS Hack 2026 or has it already finished? (I don’t even know if it works on votes)

My doubt, what is the difference between BenchPress and Nano Press GitHub - BuildWithHussain/nano_press: Nano Press automates your Frappe/ERPNext deployment from zero to production. Connect your server, pick your version, add official or custom GitHub apps, set your domain, and launch — all in one smooth workflow. Built for quick proof-of-concepts, but powerful enough for real-world use. · GitHub?

Is planned for Bench Press to support production setup in the future?

Great Job.

@szufisher Nanopress told me they’ve dropped the project.
It was a good idea—simple, with a solid foundation. But anyway, they don’t want to continue with it.

the problem is too many alternatives, we need really viable options, in the long run. otherwise we will waste a lot of times learn and try a lot of options.

2 Likes

Great question! Full disclosure — I built NanoPress too.

They solve different sides of the same coin:

NanoPress = Production deployment. It automates the full server-to-production pipeline — Ansible provisioning, Docker, Traefik, Let’s Encrypt SSL, domain setup, health checks. You point it at a fresh VPS and get a production-ready Frappe site.

BenchPress = Development environments. Spin up isolated dev benches with WireGuard VPN for remote SSH. Lab templates, one-click deploys, live build logs. No production concerns like SSL or domains.

I had paused NanoPress development due to other commitments, but seeing the community interest in both projects, I’m planning to pick it back up soon.

The vision: NanoPress for production, BenchPress for development. Two tools, complete Frappe lifecycle covered.

1 Like

Thanks @federico_calvo! Small addition here — I’m actually the one who built NanoPress during my internship with @BuildWithHussain. It was his idea, I developed it.

Sad to see it being dropped, but that experience directly influenced how I designed BenchPress. A lot of the patterns (Docker-based isolation, real-time build logs, app configuration via UI) carry over.

BenchPress is dev-focused for now, but the production side (SSL, domain management, Ansible provisioning) is something I’m keeping in mind for the future. Having built both, I know what’s needed on each end.

One step at a time.

1 Like

BTW you could take over Nanopress :grin:

2 Likes

Haha :laughing: intern to owner arc complete — I’m taking it over, thanks Hussain :raising_hands:

2 Likes

Just shipped Code Server for BenchPress
Deploy a lab and get VS Code running right in your browser — no setup, no local installs, password protected out of the box.

1 Like

great job there keep it up