LaaHTech School - Local Guide (B2B Testing)

Run a standalone LaaHTech School deployment locally for B2B testing.


Prerequisites

Requirement Minimum Recommended
OS macOS or Linux Ubuntu 22.04+ / macOS 14+
CPU 2 vCPU 4 vCPU
RAM 2 GB 4 GB
Disk 20 GB SSD 40 GB SSD
Docker Engine/Desktop 24+ latest
Docker Compose v2.20+ plugin latest

Download Compose

Use one of the downloadable package options:

The zip package includes:

  • docker-compose.yml
  • .env for teams that want to alter configuration

Start The Instance

Default local domain is school.laahtech.test.

Add it to hosts:

echo "127.0.0.1 school.laahtech.test" | sudo tee -a /etc/hosts

Then run:

docker login registry.gitlab.com
docker compose up -d
docker compose logs -f app

Check health:

docker compose ps

The first run initializes MariaDB and application services; allow a few minutes.

Open the app:

http://school.laahtech.test

Configure Instance

After first launch, create or update .env next to docker-compose.yml.

DOMAIN=demo.school.laahtech.test
MYSQL_ROOT_PASSWORD=laahtech_root_ChangeMe123!
SCHOOL_DB_NAME=moodle
SCHOOL_DB_USERNAME=moodleuser
SCHOOL_DB_PASSWORD=laahtech_db_ChangeMe123!
MARIADB_PORT=3307
CERTBOT_EMAIL=dev@laahtech.test

Apply changes:

docker compose down
docker compose up -d

SSL Certificates

For local hosts-file testing, the app entrypoint auto-generates a self-signed certificate.

For real domain testing with Let's Encrypt:

docker compose --profile certbot run --rm certbot
docker compose restart app

Post-Install Checks

docker compose exec app php /var/www/html/admin/cli/purge_caches.php
docker compose exec app php /var/www/html/admin/cli/cron.php

Recommended admin actions after first login:

  • configure SMTP
  • verify School company setup
  • validate plugin health and scheduled tasks

Useful Commands

Task Command
Start instance docker compose up -d
Follow app logs docker compose logs -f app
Shell into app docker compose exec app bash
Run cron docker compose exec app php /var/www/html/admin/cli/cron.php
Purge caches docker compose exec app php /var/www/html/admin/cli/purge_caches.php
Restart app only docker compose restart app
Stop (data safe) docker compose down
Wipe all data docker compose down -v

{danger} docker compose down -v permanently deletes mariadb_data, moodledata, and certificate volumes.

Data and Volumes

Persistent volumes used by the local LaaHTech School stack:

Volume Purpose
mariadb_data MariaDB data files
moodledata Files, uploads, cache
ssl_certs TLS certificates
certbot_webroot ACME challenge files

{info} docker compose down keeps volumes. Use -v only for intentional reset.

Troubleshooting

Domain redirects unexpectedly

If your browser lands on the wrong host, verify DOMAIN in .env and clear browser cache/HSTS state for previous local domains.

Database connection errors

Check MariaDB health:

docker compose ps
docker compose logs mariadb

HTTPS certificate warnings

Expected for self-signed/local hostnames. Use a public domain + certbot profile for trusted certificates.

Fresh reset for local testing

docker compose down -v
docker compose up -d

Port 80/443 already in use

lsof -i :80
lsof -i :443

Stop conflicting services, then restart compose.