Claroline Connect LMS on Ubuntu 24.04 on Azure User Guide
Overview
Claroline Connect is the open source learning management system (LMS) and e-learning platform used by schools, universities and training organisations to build and deliver online courses. It brings workspaces, courses, learning paths, activities and exercises, forums, resource libraries and learner tracking together in one web interface. The cloudimg image ships Claroline Connect 15.0.15 — a Symfony back end with a React front end — served by nginx and PHP 8.3 FPM on a hardened, fully patched Ubuntu 24.04 LTS base, together with a bundled local MySQL 8.0 server, so the appliance is complete and useful on its own. The React front end is compiled and the platform is installed and migrated at build time, so the platform is ready the moment the instance boots — no composer, npm or webpack ever runs on your VM. The bundled MySQL listens only on the loopback interface (127.0.0.1:3306) and keeps its data on a dedicated Azure data disk. A unique administrator password, database password and application secret are generated on the first boot of every VM. Claroline Connect is redistributed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later). Backed by 24/7 cloudimg support.
What is included:
- Claroline Connect 15.0.15 (Symfony + React) served by nginx with PHP 8.3 FPM, managed by systemd
- A bundled MySQL 8.0 server holding the Claroline database, already installed, migrated and ready
- The React front end pre compiled at build time, so no build toolchain (Node, Composer) ships on the customer VM
- A per VM administrator password, database password and Symfony application secret generated on first boot
- No shipped default login: the administrator is created only on first boot and the app to database password ships rotated to a discarded random
- MySQL bound to
127.0.0.1only, never exposed to the network - A dedicated Azure data disk carrying both the MySQL database and Claroline's uploaded files and resources
- Links generated from the request host, so the site answers correctly on the public IP, the private IP or any DNS name you point at it
nginx.service,php8.3-fpm.serviceandmysql.serviceas enabled systemd units- An unauthenticated
/healthzendpoint for Azure Load Balancer health probes - 24/7 cloudimg support
Prerequisites
An active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region. Standard_B2ms (2 vCPU / 8 GiB RAM) is a sensible starting point; move up to Standard_D2s_v3 or larger for bigger cohorts or heavy usage. NSG inbound: allow 22/tcp from your management network, 80/tcp for the application and 443/tcp if you terminate TLS on the VM. The bundled MySQL is never exposed: it listens on 127.0.0.1 only, so port 3306 stays off the network.
Step 1 - Deploy from the Azure Marketplace
In the Azure portal choose Create a resource, search for Claroline Connect LMS / e-Learning Platform on Ubuntu 24.04 LTS by cloudimg, and select Create. Pick your subscription, resource group and region, choose the Standard_B2ms size, select SSH public key authentication with the username azureuser, and allow inbound 22, 80 and 443. The image attaches its own 30 GiB data disk for your database and uploaded files, so you do not need to add one.
Step 2 - Deploy from the Azure CLI
az vm create \
--resource-group <your-rg> \
--name claroline \
--image <marketplace-image-urn> \
--size Standard_B2ms \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku Standard
Then open ports 80 and 443:
az vm open-port --resource-group <your-rg> --name claroline --port 80,443
Step 3 - Confirm the services are running
SSH to the VM as azureuser and confirm nginx, PHP-FPM and MySQL are active, then check the installed Claroline version.
systemctl is-active nginx php8.3-fpm mysql
head -1 /var/www/claroline/VERSION.txt
Expected output:
active
active
active
15.0.15

Step 4 - Confirm the network posture and health endpoint
MySQL is bound to 127.0.0.1:3306 only, while nginx serves Claroline on port 80. The unauthenticated /healthz endpoint answers 200 for Azure Load Balancer probes, and the application shell answers 200 at the site root.
ss -ltn 'sport = :3306 or sport = :80'
curl -s -o /dev/null -w 'healthz -> %{http_code}\n' http://127.0.0.1/healthz
Expected output:
healthz -> 200

Step 5 - Retrieve the per VM administrator password
The first boot service generates an administrator password unique to your VM and writes it to a root only file. Confirm the file exists (it is 0600 root), then read it over SSH:
ls -l /root/claroline-credentials.txt
sudo cat /root/claroline-credentials.txt

CLAROLINE_URL is the VM's own address as seen from inside the VM. Azure does not expose the public IP to the instance, so this is usually the private address. Browsing the public IP shown in the Azure portal works identically, because Claroline derives its links from the request host rather than baking one in at build time.
Step 6 - Sign in
Browse to http://<vm-ip>/ and sign in with the username admin and the password from the credentials file.

After signing in you land on your Claroline desktop, the personal home area with the tool bar and navigation for your workspaces, courses and account. From here an administrator reaches the platform administration tools.

Step 7 - Create your first workspace
Open the administration tools and use the workspaces section to create your first workspace. A workspace is the container for a course: inside it you build learning paths, add activities and exercises, upload resources, open forums and enrol your learners. Claroline links these together, so a learning path can chain resources and activities and track each learner's progress.

Step 8 - No known or default credentials
This image ships with no usable login. No administrator account exists in the shipped image; the first boot service creates the admin administrator with a fresh password unique to your VM, generates a fresh Symfony application secret, and rotates the application to database password, all before Claroline serves a single request. The check below confirms that the per VM administrator password authenticates through the real Claroline login endpoint while a blank password and common weak guesses are all rejected.
sudo bash /usr/local/sbin/claroline-cred-roundtrip.sh
Expected output:
OK per-VM administrator authenticates via POST /login; blank + weak guesses rejected
Change the administrator password to one of your own from your account settings once you have signed in for the first time.
Step 9 - Verify the release and where your data lives
Confirm the installed release and the data disk layout. Both the MySQL database and Claroline's uploaded files live on the dedicated data disk, bind mounted into place, so your data is kept off the operating system disk.
head -1 /var/www/claroline/VERSION.txt
df -h /data && findmnt -no SOURCE,TARGET /var/lib/mysql
Step 10 - Enable HTTPS (optional)
Claroline derives its links from the request, so putting a TLS terminating proxy in front of it, or a certificate on the VM, upgrades the site to https:// with no reconfiguration. To terminate TLS on the VM itself, point a DNS name at the public IP and use Certbot:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com
Certbot obtains a certificate, configures the nginx virtual host for port 443 and sets up automatic renewal. Once TLS is in front, browse to https://your-domain.example.com/.
Support
This product is backed by 24/7 cloudimg support. For deployment guidance, workspace and course configuration, learning path and activity setup, version upgrades, performance tuning or MySQL database administration, contact support@cloudimg.co.uk.
About cloudimg
cloudimg publishes hardened, fully patched, ready to run open source images for Microsoft Azure and other clouds. Every image is built to a consistent security baseline, ships without default or shared credentials, keeps customer data on a dedicated data disk, and is paired with a step by step deploy guide. Claroline Connect is redistributed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later). All product and company names are trademarks or registered trademarks of their respective holders; use of them does not imply any affiliation with or endorsement by them.