Self-hosted Press in production: version compatibility and setup guidance needed

Hello everyone,

I am setting up a self-hosted Frappe Press environment and would like some guidance regarding the recommended versions and installation procedure.

My goal is to have a production environment where Press manages multiple Frappe sites, including Frappe v16 sites.

I have already built and tested a Press environment, but I would like to validate whether the versions and installation approach I used are still recommended.

The environment I initially used was:

  • Ubuntu 22.04

  • Python 3.10.12

  • Frappe v15

  • Bench 5.31.0

  • Node.js 20.20.2

  • npm 10.8.2

  • Yarn 1.22.22

  • MariaDB 10.6.23

  • Nginx 1.18.0

  • Supervisor 4.2.1

  • Press 0.7.0

I followed the Local Frappe Cloud / Press setup documentation and created a separate environment for:

  • Press

  • Docker/Build Server

  • Database Server

  • Monitor Server (Prometheus/Grafana/Node Exporter)

  • Log Server

I also configured:

  • SSH access between Press and the managed servers

  • Ansible with passwordless sudo

  • Docker Registry

  • App Sources and App Releases

  • Release Groups

  • Deploy Candidates

  • Standalone Server

  • Wildcard DNS

  • Wildcard TLS certificate

  • Prometheus monitoring

  • Alert rules

  • Log Server

During the setup I had to make several manual adjustments. For example:

  1. A private GitHub repository could not be cloned correctly using the GitHub Access Token configured in Press, so I had to adjust app_source.py so that the token was also used when no GitHub App installation ID was configured.

  2. When using a Standalone Server, Press still tries to create an Add Site to Upstream job against a Proxy Server on every new site, even though none is used in Standalone mode. This job fails silently and leaves the site marked as “Pending” in the dashboard — cosmetic only, the site actually works fine behind it. I patched process_new_site_job_update in site.py so the status reflects reality when is_standalone is set.

  3. Scheduled Press jobs were not synchronized automatically in the database. I had to run sync_jobs() manually to populate the Press Scheduled Job Types.

  4. Any server trying to reach its own public domain from inside the same network gets refused by the router (classic NAT hairpin/loopback). This is expected behavior for any self-hosted setup behind NAT — not a Press bug — but it’s worth mentioning since Press’s internal HTTP calls (server-to-server, not from the visitor’s browser) surface it in a few different places: the Press server reaching sites for “Login as Administrator”, and the Monitor Server reaching the managed servers for scraping. I had to configure internal DNS resolution (dnsmasq / /etc/hosts) on each affected server so it resolves those hostnames to the private IP instead of the public one.

  5. I also had to manually configure the wildcard TLS certificate because the DNS provider was configured as Generic and the wildcard certificate required DNS-01 validation (Press only automates this with AWS Route 53 configured).

The environment eventually worked, including site creation, deployment, monitoring and TLS.

However, I am concerned that some of these adjustments may indicate that I am using an outdated installation procedure or an incompatible combination of versions.

So I would like to ask:

Recommended versions

What is currently the recommended/stable combination of:

  • Press

  • Press Agent

  • Bench

  • Python

  • Node.js

  • MariaDB

  • Redis/Valkey

  • Docker

specifically for a new self-hosted production Press installation?

Installation

Is there currently a recommended installation procedure for a new self-hosted Press environment?

Should Press be installed from a specific release/tag, or is develop recommended?

Is the Local Frappe Cloud setup documentation still the recommended approach for production installations, or is there a more complete environment/architecture reference (beyond the initial setup steps) that covers day-2 operations, monitoring and log server configuration?

Architecture

For a production installation, is the following architecture recommended?

Press Server
→ Proxy Server (Nginx + Agent)
→ Application Server (Docker + benches)
→ Database Server (MariaDB)

I also set up two additional VMs for:

  • Monitor Server

  • Log Server

Or is there a newer/recommended architecture?

I would especially appreciate feedback from people currently running self-hosted Press in production.

I would like to rebuild the environment using the currently supported versions and avoid carrying forward workarounds that may only have been necessary because my original installation was based on older versions.

Documentation I used:

.docs.frappe.io/cloud/local-fc-setup
.frappe.io/support-versions
.frappe.io/press
.docs.frappe.io/framework/user/en/installation

Thank you!

Not to discourage you, but frappe/pilot might be a good fit here if you’re just using it for your own sites. It’s quite trivial to setup. You could also try running frappe/atlas to add additional layers of management/control (i haven’t heard of anyone self-hosting this yet though).

I could be wrong, but I seemed to gather from frappeverse 2026 that pilot is an eventual replacement(?) for press.

Thank you so much for the recommendation and for taking the time to look at my post!

We ended up testing both Pilot and Atlas in the meantime, and Press showed some additional features that felt more attractive compared to the other two. Since what we want is a single place that centralizes monitoring, site creation, and so on. And this was actually a request from my manager as a test.. we’re going to have a meeting with him and put the suggestion of using Pilot on the table as well. Thanks again for the recommendation; because of your comment, we’ll take Pilot into consideration once more.

My biggest concern is that I might be configuring things the “wrong” way, or in a way that’s overly complex — especially since I’m not using AWS or similar managed services. I honestly haven’t been able to find a manual that really focuses on the Press environment specifically: Supported versions - Frappe covers Frappe Cloud on the master version, and Local Development Environment Setup only really addresses the Ubuntu version. In one of the issues I opened, someone told me I need to use Python 3.10 and Frappe v15 — for the rest of the stack (MariaDB, Node, Redis) I’ve been going off Installation.

In addition to pilot+atalas, there is also ‘central’ which adds additional management features - i haven’t tried it myself.

Good luck! It’s a tricky path to try to implement the whole stack since that’s part of Frappe’s secret sauce for offering cloud hosting at a good cost, and they don’t document it very well - probably because if they did everyone and their grandmother would be offering frappe cloud clones :laughing:

Installing and using/managing press requires heavy knowledge and continuous monitoring and server monitoring. You may follow my guide here https://discuss.frappe.io/t/guide-installing-press-and-get-it-up-and-running-part-1/

We haven’t tested the ‘central’ yet. I’ll speak to the team about it and request the test.
Thanks again for the help.

Thank you so much — your guide was really helpful, especially the SSH section. I think the main complication on our end is that we’re not running on AWS, so some steps didn’t map directly. We’re still in the testing phase, so we ended up piecing together a setup that fits our environment, but I’ll definitely revisit your step-by-step guide more closely once we move toward a full rollout. Really appreciate you taking the time to share it.