Deployment for everyone

By Anand Doshi July 4, 2016 Development 1 comment

Ever since we put up the signup button on our home page, we have been getting about 70-100 signups a day. Most of it is through organic search, which is quite a feat in itself. 

It means that businesses are looking for a modern ERP. However, unlike most other software products, you realize the value of an ERP only after a few months of diligent data entry. Someone new to an ERP often take a few attempts to get started, whereas experienced users run it along with their existing ERPs and see if it fits their daily use. We even have users who have signed up 10 times before subscribing.

So if companies are going to evaluate ERPNext for months, we need the ability to scale our infrastructure, start marketing the product to increase signups and optimistically wait for 2% of them to convert to paid customers. To reach 1,000 paid customers, we would need over 50,000 signups. However, with our current deployment system, we didn’t feel ready to boost our marketing and handle an increase in signups.



Our current deployment system is called Press—an in-house software written in Python to deploy new code for thousands of sites. We start off with a high capacity server installed with the latest CentOS minimal edition. Then we use Ansible scripts—a cross platform way to run tasks on a server, to install dependencies, optimize configurations for performance, add firewall rules and setup the PressWe also setup a mirror server, called a Slave, as a failover in case the main server goes down. 

Once the servers are ready, we configure ERPNext.com to create new sites on the main server. Every week or two, we need to deploy new code and patch the site databases. To do this, we login to each server, and run the command press deploy. This simple command deploys new code and updates each site with minimal downtime per site. Amazing, isn’t it? However, despite its power and simplicity, the Press has reached its limits. 

Imagine manually running press deploy on 50 servers or 500. At preset, we are a team of 13, and our culture leans towards generalists. We want to have a system in place where anyone can deploy a new version without privileged access to the servers. 



Central is our new deployment platform based on Ansible that aims to reduce the bottleneck of managing tens or hundreds of servers. The Press lacked a graphical user interface. It is much easier and safer to click the right button than to type the right commands under pressure. 

With Central, you can setup a new master-slave pair, a proxy server for routing requests, create new benches and sites, manage subscriptions and even selectively deploy new code to specific sites—all by filling out forms and clicking the right buttons. It even shows progress bars! 

It also releases the bottleneck of relying on a few developers for deployment. Not for the lack of trust, it is generally safer for as few people to have access to servers as possible. With the Central platform, a developer won’t need to have privileged access to the server and still be able to update it. With a limited set of action, each logged as soon as executed, it becomes easier to get the status of our servers and their history. 

Our entire deployment system has been consolidated into a single code base and it is much easier to maintain, improve and extend. Central will be our ship’s command center, and we hope to be able to navigate the upcoming flood of signups.



Video showing how deployment works in Central. Just a few clicks and sites get migrated!


Anand Doshi

Anand is the Chief Technology Officer at ERPNext. He reads fiction, dabbles in photography and is always on the watch for the best ToDo app.

1 comment
John September 6, 2017

When will this be available?

Add Comment