Fe
Applications Azure

Frappe Education on Ubuntu 24.04 on Azure User Guide

| Product: Frappe Education on Ubuntu 24.04 LTS on Azure

Overview

Frappe Education is an open-source student information and school management application built on the Frappe framework and ERPNext. It covers the academic lifecycle: admissions and student applicants, student records and guardians, academic years and terms, programs and courses, program enrollment, student groups and instructors, course scheduling, attendance, assessment plans and results, and fee structures, fee schedules and collection.

Frappe Education declares ERPNext as a required application, so this image ships the complete ERPNext suite alongside it. The cloudimg image installs the whole stack as a full production deployment - MariaDB, Redis, a Python gunicorn web tier, 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, completes the ERPNext setup wizard so the desk opens straight to work rather than a setup screen, and rotates the Frappe Administrator password, the site database password and the Frappe encryption key on the first boot of every VM. No student, guardian or fee data is seeded - your records are yours to enter. Backed by 24/7 cloudimg support.

What is included:

  • Frappe Education v16.1.0 on ERPNext v16.31.1 and Frappe framework version-16, served on port 80 by nginx in front of a gunicorn web worker
  • Python 3.14 and Node.js 24, which Frappe version-16 requires
  • 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 and schedule processes
  • A neutral starter company with a standard chart of accounts, so ERPNext-scoped features such as fees and accounting work the moment you sign in
  • 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 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_B4ms (4 vCPU / 16 GiB RAM) is the recommended size and matches cloudimg's ERPNext image, because this appliance contains ERPNext. The stack is memory tuned and runs on a Standard_B2s (2 vCPU / 4 GiB RAM) for evaluation, but choose B4ms or larger for production workloads and multiple concurrent users. NSG inbound: allow 22/tcp from your management network and 80/tcp for the 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 Education 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-education \
  --image <marketplace-image-urn> \
  --size Standard_B4ms \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_rsa.pub \
  --public-ip-sku Standard

Then open the web port:

az vm open-port --resource-group <your-rg> --name frappe-education --port 80 --priority 900

Step 3 - Connect to your VM

ssh azureuser@<vm-ip>

Step 4 - Confirm the education stack is running

All four services should report active:

systemctl is-active mariadb redis-server supervisor nginx

Frappe Education services active on the VM

Frappe answers an unauthenticated health check, and both applications are installed on the site:

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

Frappe Education health check and installed apps

Step 5 - Retrieve the Administrator password

Every VM generates its own Administrator password on first boot and writes it to a root-only file. Nothing is shared between deployments and there is no default login.

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

Per-VM Frappe Education credentials file

The file is readable only by root:

sudo stat -c '%a %U:%G %n' /root/frappe-education-credentials.txt

The per-VM password authenticates while published vendor defaults are rejected, and the education module is proven working by a real Program and Course round-trip:

Frappe Education secure by default and education self-test

Step 6 - Sign in to Frappe Education

Browse to http://<vm-ip>/ and sign in as Administrator with the password from Step 5.

Frappe Education sign-in page

After signing in, the site root takes you straight to the Frappe desk - the setup wizard is already complete, so there is no setup screen to work through.

Frappe desk home after signing in

Step 7 - Set up your company

The image ships a neutral starter company named Demo Company with a standard chart of accounts, so ERPNext-scoped features such as fee structures and collection are usable immediately. It contains no transactional data.

For production use, either rename it or create your own:

  • Rename: go to http://<vm-ip>/app/company, open Demo Company, and use Menu -> Rename to set your own legal entity name and abbreviation. Then set your country, default currency and fiscal year on the same form.
  • Create a new company: from the same list choose Add Company, fill in the name, abbreviation, default currency and country, and pick a chart of accounts template. Set it as the default in Global Defaults.

Step 8 - Explore the Education workspace

Open the Education workspace at http://<vm-ip>/app/education. It gathers the module's day-to-day tools - students, programs, courses, student groups, instructors, program enrollment, attendance, assessment and fees - in one place.

Frappe Education workspace

Step 9 - Create a program and a course

A Program is a course of study (for example a grade, class or degree) that students enroll in; a Course is a subject taught within it.

Go to http://<vm-ip>/app/program and choose Add Program, give it a name and save. Then go to http://<vm-ip>/app/course, choose Add Course, give it a name and save. You can attach courses to a program from the program form, and from there build student groups, schedule classes and record assessments.

Frappe Education programs

Step 10 - Verify the education module from the command line

The image ships a self-test that creates a real Program and Course, reads both back, and removes them again. It is the same check cloudimg runs against the published image, and it is safe to run at any time:

sudo /usr/local/sbin/frappe-education-selftest.sh

Step 11 - Enabling HTTPS

The image serves plain HTTP on port 80. For anything beyond evaluation, terminate TLS in front of the site. Install certbot and issue a certificate for a DNS name that points at the VM:

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

Then tell Frappe its public URL so generated links use HTTPS:

sudo -u frappe -H bash -lc "cd /opt/frappe/frappe-bench && bench --site education.localhost set-config host_name 'https://school.your-domain.example'"
sudo systemctl restart supervisor

Open 443/tcp in the NSG and restrict 80/tcp to the redirect only.

Step 12 - Maintenance

Check the Frappe process tree:

sudo supervisorctl status

Back up the site (database plus files). Backups are written under the site's private/backups directory:

sudo -u frappe -H bash -lc "cd /opt/frappe/frappe-bench && bench --site education.localhost backup"

Keep the operating system patched:

sudo apt-get update && sudo apt-get -y upgrade

Restart the application tier after configuration changes:

sudo systemctl restart supervisor && sudo systemctl reload nginx

Troubleshooting

The site does not respond on port 80. Confirm nginx and supervisor are active with systemctl is-active nginx supervisor, then check the Frappe processes with sudo supervisorctl status. Confirm the NSG allows inbound 80/tcp.

Sign-in fails. Re-read the password with sudo cat /root/frappe-education-credentials.txt. The username is Administrator. There is no default password in this image; each VM generates its own on first boot.

First boot did not complete. Inspect the one-shot service with sudo systemctl status frappe-education-firstboot.service and sudo journalctl -u frappe-education-firstboot.service.

A fee document will not save. Fee documents are company-scoped and post to the general ledger, so the fee structure must reference a valid company and income account. Open the fee structure and confirm its company and account fields point at your chart of accounts.

Compliance and data protection. You are responsible for your own regulatory posture for the student data you enter into this system. cloudimg makes no compliance claims on your behalf.

Support

cloudimg provides 24/7 support for this image by email at support@cloudimg.co.uk and via live chat, with a one hour average response time for critical issues.

Frappe, ERPNext and Frappe Education are trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.