Deployment guide

Frappe CRM

Overview

Frappe CRM is a modern open source sales CRM built on the Frappe framework. It gives sales teams leads and deals that move through configurable pipelines and statuses, plus contacts and organizations, tasks and notes, and activity timelines that capture email and comments. You can work in Kanban, list and group-by views. Assignment rules route work to the right owner, and service level agreements keep response times visible.

The SecureAnyCloud image installs CRM v1.79.1 on Frappe framework version-15 as a full production deployment. It runs MariaDB, Redis, a Python gunicorn web tier, a node realtime process, background workers and a scheduler managed by supervisor, and nginx on port 80.

The entire headless install runs at build time, so no command-line bootstrap is needed on first use. On the first boot of every VM, the image rotates the Frappe Administrator password, the site database password and the Frappe encryption key. Backed by 24/7 SecureAnyCloud support.

What you get:

  • Frappe CRM v1.79.1 on Frappe framework version-15, served on port 80 by nginx in front of a gunicorn web worker
  • MariaDB on loopback (Barracuda / utf8mb4 / large packets per Frappe), tuned for a small VM
  • Redis for cache, queue and socketio; supervisor managing the Frappe web, worker, schedule and socketio processes
  • A unique Administrator password, site database password and Frappe encryption key generated on first boot, with no default login
  • nginx.service, supervisor.service, mariadb.service and redis-server.service as enabled and active systemd units
  • 24/7 SecureAnyCloud support

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.

Standard_B2s (2 vCPU / 4 GiB RAM) is the supported minimum. For larger sales teams or higher record volume, choose a larger size such as Standard_B2ms or Standard_D2s_v3.

In the network security group (NSG), allow inbound 22/tcp from your management network and 80/tcp for the CRM web interface. For public exposure, front the CRM with TLS (see Enabling HTTPS).

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Frappe CRM by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).

Select Review + create, then Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:frappe-crm-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name frappe-crm \
  --image sac1647283583153:frappe-crm-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name frappe-crm --port 80 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the CRM stack is running

On first boot, the image rotates the Frappe encryption key, the site database password and the Administrator password. It points the site at this VM's public IP and starts the production stack. Confirm that all four systemd services are active:

systemctl is-active mariadb redis-server supervisor nginx

All four services report active, and supervisor runs the Frappe web, socketio, worker and schedule processes.

Confirm the Frappe web tier answers its health endpoint:

curl -s http://127.0.0.1/api/method/ping

Frappe returns {"message":"pong"}. To see the exact installed apps and versions, Frappe framework version-15 and CRM v1.79.1, run:

sudo -u frappe -H bash -lc 'cd /opt/frappe/frappe-bench && bench --site crm.localhost list-apps'

Step 5 - Retrieve the Administrator password

The VM generates the per-VM Administrator password on first boot and writes it to a root-only credentials file, along with the site URL and login name:

sudo cat /root/frappe-crm-credentials.txt

Because these secrets are generated on first boot, no two deployments share the same password, and the vendor default login is rejected.

The CRM interface at /crm requires an authenticated session, so it is not reachable anonymously. Sign in through the API with the password from your credentials file, then fetch the CRM page with that session to confirm that the interface is being served:

curl -s -c /tmp/crm-cookies -o /dev/null -w 'login: %{http_code}\n' \
  http://127.0.0.1/api/method/login \
  --data-urlencode 'usr=Administrator' --data-urlencode 'pwd=<CRM_ADMIN_PASSWORD>'
curl -s -b /tmp/crm-cookies -o /dev/null -w 'crm: %{http_code}\n' http://127.0.0.1/crm rm -f /tmp/crm-cookies

Both requests return 200.

Step 6 - Sign in to Frappe CRM

Browse to http://<vm-public-ip>/crm and sign in as Administrator with the password from Step 5. After your first sign-in, change this password from the user menu.

Step 7 - Work with leads

After you sign in, you land on the CRM. The Leads section lists every lead with its name, organization, status and owner. Use the filter, sort and group-by controls at the top to narrow the list, and switch between list and Kanban views. Select Create to add a lead.

Open a lead to see its full record. The side panel holds contact details, organization and status. The activity timeline records emails, comments, calls, tasks and notes, so the whole history of the relationship sits in one place.

You can convert a qualified lead into a deal, which carries its contact and organization across.

Step 8 - Track deals through your pipeline

The Deals section holds opportunities that move through your sales pipeline. The Kanban view groups deals by status, so you can drag a deal from one stage to the next. Each deal keeps its own contacts, organization, expected close date, deal value and activity timeline.

From the settings menu, you can also configure lead and deal statuses, invite users and set their roles, and define assignment rules and service level agreements. You can connect an email account so that replies are captured onto the record automatically.

Enabling HTTPS

For public exposure, front the CRM with TLS. Point a DNS A record at the VM's public IP. Then issue a certificate with Certbot and the nginx plugin, which you run interactively:

sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com

Certbot edits the Frappe nginx site in place and sets up automatic renewal. Allow 443/tcp in your NSG.

Maintenance

The OS keeps receiving security updates through unattended-upgrades.

You can update Frappe CRM and the framework with bench as the frappe user (sudo -u frappe -H bash -lc 'cd /opt/frappe/frappe-bench && bench update'). Review the CRM release notes before you apply a major version upgrade. Take a snapshot of the OS disk before any upgrade.

Support

This image is published and supported by SecureAnyCloud. Frappe and Frappe CRM are trademarks of Frappe Technologies Pvt. Ltd. SecureAnyCloud is not affiliated with or endorsed by the Frappe project. For assistance, contact SecureAnyCloud support.

Deploy on Azure

Launch Frappe CRM on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure