Run a standalone LaaHTech School deployment locally for B2B testing.
| 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 |
Use one of the downloadable package options:
The zip package includes:
docker-compose.yml.env for teams that want to alter configurationDefault 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
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
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
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:
| 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 -vpermanently deletesmariadb_data,moodledata, and certificate 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 downkeeps volumes. Use-vonly for intentional reset.
If your browser lands on the wrong host, verify DOMAIN in .env and clear browser cache/HSTS state for previous local domains.
Check MariaDB health:
docker compose ps
docker compose logs mariadb
Expected for self-signed/local hostnames. Use a public domain + certbot profile for trusted certificates.
docker compose down -v
docker compose up -d
lsof -i :80
lsof -i :443
Stop conflicting services, then restart compose.