Deploy a single self-hosted LaaHTech School instance using the distributed Docker Compose package.
| 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 one of the official package options:
The zip package includes:
docker-compose.yml.env for teams that want to alter configurationdocker login registry.gitlab.com
docker compose up -d
docker compose ps
docker compose logs -f app
http://school.laahtech.test
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
Request certificate (public domain only):
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
Validate:
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
| 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 |