Deployment guide

Claroline

Overview

Claroline Connect is the open source learning management system (LMS) and e-learning platform used by schools, universities and training organizations 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 SecureAnyCloud image ships Claroline Connect 15.0.15, a Symfony back end with a React front end. It is 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. The platform is ready as soon as the instance boots, and 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).

What you get:

  • Claroline Connect 15.0.15 (Symfony and React), served by nginx with PHP 8.3 FPM and managed by systemd
  • A bundled MySQL 8.0 server that holds the Claroline database, already installed, migrated and ready
  • A React front end precompiled 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 application's database password is rotated to a discarded random value
  • MySQL bound to 127.0.0.1 only, never exposed to the network
  • A dedicated Azure data disk that carries 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 that you point at it
  • nginx.service, php8.3-fpm.service and mysql.service as enabled systemd units
  • An unauthenticated /healthz endpoint for Azure Load Balancer health probes
  • 24/7 SecureAnyCloud support

Prerequisites

You need 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. For bigger cohorts or heavy usage, move up to Standard_D2s_v3 or larger.

In the NSG, allow inbound 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 SecureAnyCloud, and select Create. Pick your subscription, resource group and region, and 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

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:claroline-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name claroline \
  --image sac1647283583153:claroline-ubuntu-24-04:default:latest \
  --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

Connect to the VM over SSH as azureuser. Confirm that nginx, PHP-FPM and MySQL are active, and 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. Confirm both behaviors:

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 that the file exists (it is 0600 root), and 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 value is usually the private address. Browsing to the public IP shown in the Azure portal works identically, because Claroline derives its links from the request host instead of 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 you sign in, you land on your Claroline desktop. This personal home area has the toolbar 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 enroll your learners. Claroline links these items together, so a learning path can chain resources and activities and track each learner's progress.

Step 8 - Verify that no known or default credentials exist

This image ships with no usable login. No admin administrator account exists in the shipped image. The first-boot service creates the admin administrator with a fresh password unique to your VM. It also generates a fresh Symfony application secret and rotates the application's database password, all before Claroline serves a single request.

The following check 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 stays 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 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. After TLS is in place, browse to https://your-domain.example.com/.

Support

24/7 SecureAnyCloud support backs this product. For help with deployment, workspace and course configuration, learning path and activity setup, version upgrades, performance tuning or MySQL database administration, contact sales@secureanycloud.com.

About SecureAnyCloud

SecureAnyCloud publishes hardened, ready-to-run open source images, patched at build time, 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 deployment 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.

Deploy on Azure

Launch Claroline Connect 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