LaaHTech School - Self-Hosted Deployment

Deploy a single self-hosted LaaHTech School instance using the distributed Docker Compose package.


Prerequisites

Requirement Minimum Recommended
OS Ubuntu 22.04 LTS Ubuntu 24.04 LTS
CPU 2 vCPU 4 vCPU
RAM 2 GB 4 GB
Disk 20 GB SSD 40 GB SSD
Docker 24+ latest
Docker Compose v2 plugin latest
Open ports 80, 443 80, 443

Download Compose

Download one of the official package options:

The zip package includes:

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

Start Instance

  1. Log in to the image registry.
docker login registry.gitlab.com
  1. Start the stack.
docker compose up -d
docker compose ps
docker compose logs -f app
  1. Open the app in your browser.
http://school.laahtech.test

Configure Instance

After first launch, create or update .env next to docker-compose.yml, then restart the stack.

DOMAIN=learn.example.com
MYSQL_ROOT_PASSWORD=<strong-root-password>
SCHOOL_DB_NAME=moodle
SCHOOL_DB_USERNAME=schooluser
SCHOOL_DB_PASSWORD=<strong-db-password>
MARIADB_PORT=3307
CERTBOT_EMAIL=admin@example.com

Apply changes:

docker compose down
docker compose up -d

SSL Certificates

Request certificate (public domain only):

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

Validate:

  • HTTPS works
  • admin login works
  • license status is valid
  • uploads work

Upgrade

docker login registry.gitlab.com
docker compose pull app
docker compose up -d
docker compose exec app php /var/www/html/admin/cli/upgrade.php --non-interactive
docker compose exec app php /var/www/html/admin/cli/purge_caches.php

Useful Commands

Task Command
Start stack docker compose up -d
Stop stack docker compose down
Follow app logs docker compose logs -f app
Run certbot docker compose --profile certbot run --rm certbot
Restart app docker compose restart app
Run cron manually 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
Reset all data docker compose down -v