Benchpress
Press a button. Get a Frappe bench. Self-hosted, Docker-powered, VPN-secured.
- Author: Venkateshvenki404224
- Repository: https://github.com/Venkateshvenki404224/benchpress
- GitHub stars: 3
- Forks: 1
- License: AGPL-3.0
- Category: Developer Tools
- Maintenance: Actively Maintained
- Frappe versions: develop, v16
Install Benchpress
bench get-app https://github.com/Venkateshvenki404224/benchpress
Tags
- code-server
- dev-environment
- developer-onboarding
- developer-tools
- devops
- docker
- erpnext
- frappe
- frappe-framework
- self-hosted
- traefik
- vue
- wireguard
Add the Frappe Gems badge to your README
Maintain Benchpress? Paste this into your README:
[](https://frappegems.com/gems/apps/Venkateshvenki404224/benchpress)
About Benchpress
**Press a button. Get a Frappe bench. Self-hosted, Docker-powered, VPN-secured.**
[](https://github.com/Venkateshvenki404224/benchpress/actions/workflows/ci.yml)
[](https://github.com/Venkateshvenki404224/benchpress/actions/workflows/linter.yml)
[](license.txt)
[](https://frappeframework.com)
[](https://fossunited.org/hack/fosshack26/p/f5fk2d9gqd)
[](https://python.org)
[](https://vuejs.org)
[](https://docker.com)
[](https://wireguard.com)
*A self-hosted onboarding and dev-environment tool for teams running Frappe apps.*
**[Read the documentation](docs/index.mdx)**
[Use a bench](docs/user/quick-tour.mdx) · [Run the server](docs/operator/index.mdx) · [Read the internals](docs/reference/index.mdx) · [Install](docs/operator/install.mdx)
Vue 3 SPA (frappe-ui)"] Web["Control plane
the BenchPress Frappe app
api.py · hooks.py · vpn_adapter.py"] RQ["Redis queue (RQ)
queue-long carries the Docker socket"] DM["deploy_pipeline.py
docker_manager.py"] Docker["Docker engine"] Traefik["Traefik
wildcard TLS on 80 and 443"] WG["WireGuard wg0
owned by vpn_management"] Bridge["Bench bridge benchpress-N
10.20.x.0/20"] C1["Bench container
site 8000 · code-server 8080"] C2["Bench container"] MariaDB[("benchpress-mariadb
one site database per bench")] Browser -- "HTTPS / socket.io" --> Web Web --> RQ RQ --> DM DM --> Docker Docker --> Bridge Bridge --> C1 Bridge --> C2 Traefik -- "https://<id>.<base domain>" --> C1 WG -- "tunnel address" --> C1 C1 --> MariaDB C2 --> MariaDB ``` ### How the pieces fit together | Component | Role | |---|---| | **Control plane** | The BenchPress app in its own bench. It serves the SPA, answers the whitelisted API, and never runs a bench's code | | **Redis queue** | Carries image builds and deploys. Only `backend` and `queue-long` hold the Docker socket, so a deploy must run on `queue-long` | | **Docker engine** | Builds one image for each lab, then creates and destroys containers under CPU and memory limits | | **Traefik** | Terminates TLS for `.` and `ide-.`, from a flat route directory with one file per bench | | **WireGuard** | The tunnel plane, owned by the [vpn_management](https://github.com/Venkateshvenki404224/vpn_management) app. Each bench and each registered device claims one address | | **Shared MariaDB** | One `benchpress-mariadb` container holds every bench site's database. Backed up nightly | | **Bench container** | A Frappe bench with an SSH server, the lab's apps, its site on port 8000 and code-server on port 8080 | A bench answers on up to four addresses at once. [Networking](docs/reference/networking.mdx) names all four and says who can reach each one. [Architecture](docs/reference/architecture.mdx) lists every module and what it owns. --- ## Features - **Lab templates.** A catalog of ready-made stacks, plus a form for a stack the catalog does not carry. See [Deploy from a template](docs/user/deploy-from-template.mdx). - **Layer-cached image builds.** System packages, SSH, the bench, the apps and the site each cache separately. Only the layers below a change rebuild. - **Golden images.** A lab's finished site is baked into the lab image as a database dump, so a deploy restores it instead of creating the tables again. Measured on a 2-vCPU host, the site step falls from 37.2 s to 9.1 s and the whole deploy from 43.3 s to 13.3 s. See [Golden images](docs/operator/golden-images.mdx). - **Live build and deploy logs.** A collapsible step viewer streams the eleven deploy steps and the raw Docker output over socket.io. - **WireGuard access.** Every bench claims a tunnel address. Nothing about a bench is published on a port of the host. - **Browser VS Code.** Each bench runs code-server on port 8080. Hand a teammate a live session instead of describing the bug. - **VPN devices.** Register a laptop or a phone, download its WireGuard config, and run a connection test when a site does not open. - **Resource limits.** CPU cores and memory for each lab, enforced by Docker. - **Lifecycle actions.** Start, stop, restart, redeploy and delete, each stating what it keeps and what it destroys. - **Stats and health.** CPU, memory and container health sampled for every running bench, with eleven read-only host checks beside them. - **Two roles.** BenchPress Admin and BenchPress User. Ownership, not the role, decides which benches a person sees. - **Optional metering.** Credits, leases, concurrency caps and self-serve signup are all off by default and do not apply to a plain install. --- ## Screenshots Four screens, in the order a new user meets them. Every screen is described in full on its own documentation page. **The Overview dashboard** counts what you own and how long a deploy has been taking. It is the screen a login lands on.  **A deploy in progress** shows the eleven pipeline steps as they complete, each with its own duration.  **A running bench** reports its container status, its health, its resource use and the site the deploy created.  **code-server** puts a VS Code window on the bench in the browser, rooted at the bench directory.  --- ## Documentation The documentation is the source of truth. This page is a map into it. Start at [docs/index.mdx](docs/index.mdx), or pick a track below. An agent working in a clone should read [AGENTS.md](AGENTS.md) instead, which points at the flattened copy in `docs-bundle/`. ### User track — you were handed a login | Page | What it covers | |---|---| | [Quick tour](docs/user/quick-tour.mdx) | The five screens in the sidebar, and every number the Overview dashboard reports | | [Deploy from a template](docs/user/deploy-from-template.mdx) | Turn a catalog template into a running bench, and read the eleven pipeline steps while they run | | [Create a lab](docs/user/create-a-lab.mdx) | Fill in the New lab form when no catalog template matches the app list you need | | [Read a lab page](docs/user/lab-detail.mdx) | Every field on the lab page, and why container status and container health can disagree | | [Start, stop and redeploy](docs/user/lifecycle.mdx) | The
Related Developer Tools apps for Frappe & ERPNext
- Frappe — Low code web framework for real world applications, in Python and Javascript
- Frappe Docker — Docker environment for developing, deploying, and running Frappe applications (ERPNext and custom apps) in production and development
- Builder — Craft beautiful websites effortlessly with an intuitive visual builder and publish them instantly
- Bench — CLI to manage Multi-tenant deployments for Frappe apps
- Frappe Ui — A set of components and utilities for rapid UI development
- Press — Full service cloud hosting for the Frappe stack - powers Frappe Cloud
- Gameplan — Open Source Discussions Platform for Remote Teams
- Doppio — A Frappe app (CLI) to magically setup single page applications and Vue/React powered desk pages on your custom Frappe apps.