Frappe CRM on Ubuntu 24.04 on Azure User Guide
Overview
Frappe CRM is a modern open-source sales CRM built on the Frappe framework. It gives sales teams leads and deals moving through configurable pipelines and statuses, contacts and organizations, tasks and notes, and activity timelines that capture email and comments, presented through Kanban, list and group-by views. Assignment rules route work to the right owner and service level agreements keep response times visible. The cloudimg image installs CRM v1.79.1 on Frappe framework version-15 as a full production deployment - MariaDB, Redis, a Python gunicorn web tier plus a node realtime process, background workers and a scheduler managed by supervisor, and nginx on port 80 - runs the entire headless install at build time so there is no command-line bootstrap on first use, and rotates the Frappe Administrator password, the site database password and the Frappe encryption key on the first boot of every VM. Backed by 24/7 cloudimg support.
What is included:
- 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.serviceandredis-server.serviceas systemd units, enabled and active- 24/7 cloudimg support
Prerequisites
An active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is the supported minimum; choose a larger size such as Standard_B2ms or Standard_D2s_v3 for larger sales teams or higher record volume. NSG inbound: allow 22/tcp from your management network and 80/tcp for the CRM web interface (front with TLS for public exposure - 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 cloudimg, and select Create. On Basics 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). Then Review + create -> Create.
Step 2 - Deploy from the Azure CLI
az vm create \
--resource-group <your-rg> \
--name frappe-crm \
--image <marketplace-image-urn> \
--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, points the site at this VM's public IP, and starts the production stack. Confirm 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"}. You can see the exact installed apps and versions - Frappe framework version-15 and CRM v1.79.1:
sudo -u frappe -H bash -lc 'cd /opt/frappe/frappe-bench && bench --site crm.localhost list-apps'

Step 5 - Retrieve the Administrator password
The per-VM Administrator password is generated on first boot and written 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 and fetch the CRM page with that session to confirm 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. Change this password after your first sign-in, from the user menu.

Step 7 - Work with leads
After signing 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, switch between list and Kanban views, and use the Create button 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. A qualified lead can be converted into a deal, which carries its contact and organization across.

Step 8 - Track deals through your pipeline
The Deals section holds opportunities moving through your sales pipeline. The Kanban view groups deals by status so you can drag a deal from one stage to the next, and 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, define assignment rules and service level agreements, and connect an email account so 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 (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. Frappe CRM and the framework can be updated 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 applying a major version upgrade. Take a snapshot of the OS disk before any upgrade.
Support
This image is published and supported by cloudimg. Frappe and Frappe CRM are trademarks of Frappe Technologies Pvt. Ltd.; cloudimg is not affiliated with or endorsed by the Frappe project. For assistance, contact cloudimg support.