Self-Hosting Chamilo LMS with Docker Compose
Want an LMS that doesn’t require 8 GB of RAM just to display a course catalog? Chamilo handles the same e-learning fundamentals as Moodle and Open edX — courses, quizzes, certificates, SCORM support — while using roughly half the resources. It’s particularly popular in European and Latin American educational institutions.
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 2 GB of free RAM (minimum)
- 5 GB of free disk space
- A domain name (optional, for remote access)
Updated February 2026: Verified with latest Docker images and configurations.
Docker Compose Configuration
Create a docker-compose.yml file:
services:
chamilo:
image: chamilo/docker-chamilo:1.10.8
container_name: chamilo
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "8080:80"
environment:
- CHAMILO_DB_HOST=db
- CHAMILO_DB_PORT=3306
- CHAMILO_DB_NAME=chamilo
- CHAMILO_DB_USER=chamilo
- CHAMILO_DB_PASSWORD=${DB_PASSWORD}
volumes:
- chamilo-data:/var/www/chamilo/app/upload
- chamilo-courses:/var/www/chamilo/app/courses
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
db:
image: mariadb:10.11
container_name: chamilo-db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=chamilo
- MYSQL_USER=chamilo
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- chamilo-db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
volumes:
chamilo-data:
chamilo-courses:
chamilo-db:
Create a .env file alongside:
# Database passwords — change these
DB_PASSWORD=change-me-strong-password
MYSQL_ROOT_PASSWORD=change-me-root-password
Start the stack:
docker compose up -d
Initial Setup
Chamilo uses a web-based installation wizard that runs on first access.
- Open
http://your-server:8080in your browser - The installer checks PHP requirements — all should pass with the official image
- Database settings:
- Host:
db - Port:
3306 - Database:
chamilo - Username:
chamilo - Password: your
DB_PASSWORDvalue
- Host:
- Admin account: Set your admin username, password, and email
- Platform settings: Name your platform, set language and timezone
- Complete the wizard — Chamilo populates the database and redirects to the login page
Configuration
| Setting | Location | Description |
|---|---|---|
| Platform name | Admin → Configuration | Displayed in header and emails |
| Default language | Admin → Configuration → Languages | 40+ languages supported |
| Registration | Admin → Configuration → Registration | Allow/restrict self-registration |
| Disk quota | Admin → Configuration → Uploads | Per-course file upload limits |
| SCORM support | Built-in | Import SCORM 1.2 and 2004 packages |
Email Configuration
Configure SMTP through the admin panel: Administration → Configuration → Mail Settings.
Alternatively, set environment variables:
environment:
- CHAMILO_SMTP_HOST=smtp.gmail.com
- CHAMILO_SMTP_PORT=587
- [email protected]
- CHAMILO_SMTP_PASSWORD=your-app-password
Advanced Configuration
PHP Tuning
For large course catalogs or file uploads, tune PHP limits by mounting a custom php.ini:
volumes:
- ./php-custom.ini:/usr/local/etc/php/conf.d/custom.ini
; php-custom.ini
upload_max_filesize = 256M
post_max_size = 256M
memory_limit = 512M
max_execution_time = 300
LDAP Authentication
Chamilo supports LDAP/Active Directory for enterprise authentication. Enable via Administration → Configuration → LDAP settings. Requires the php-ldap extension (included in the official image).
Reverse Proxy
For HTTPS access, place Chamilo behind a reverse proxy. With Nginx Proxy Manager, proxy to chamilo:80 on the Docker network.
See Reverse Proxy Setup for detailed instructions.
Backup
Back up these volumes:
- chamilo-data — uploaded files, user content
- chamilo-courses — course materials and resources
- chamilo-db — all user data, enrollments, grades
Database backup:
docker exec chamilo-db mysqldump -u chamilo -p chamilo > chamilo-backup.sql
See Backup Strategy for a complete approach.
Troubleshooting
Installation Wizard Won’t Load
Symptom: Blank page or 500 error on first access.
Fix: Check container logs: docker logs chamilo. Common cause: MariaDB not ready yet. Wait 30 seconds and refresh. Verify the database container is healthy: docker ps.
”Access Denied” Database Error During Install
Symptom: Wizard fails at database connection step.
Fix: Verify your DB_PASSWORD matches between the Chamilo and MariaDB containers. The database user must have CREATE and ALTER privileges. Check that MYSQL_DATABASE=chamilo was set before the MariaDB container first started (can’t add after initial creation without manual SQL).
File Upload Fails for Large Files
Symptom: SCORM packages or large files fail to upload.
Fix: Increase PHP limits. Mount a custom php.ini with upload_max_filesize = 256M and post_max_size = 256M. If using a reverse proxy, also increase its upload limit (Nginx: client_max_body_size).
Slow Performance with Many Users
Symptom: Pages load slowly with 50+ concurrent users.
Fix: Add PHP opcache configuration, increase MariaDB innodb_buffer_pool_size, and consider adding Redis for session storage. Chamilo v1.11 on 2 GB RAM handles ~100 concurrent users comfortably.
Resource Requirements
| Resource | Minimum | Recommended |
|---|---|---|
| RAM | 1 GB | 2 GB |
| CPU | 1 core | 2 cores |
| Disk | 2 GB (app) | 10 GB+ (with course materials) |
Chamilo uses ~50% less RAM than Moodle for equivalent workloads, making it viable on smaller servers.
Verdict
Chamilo is the right choice when you need a full-featured LMS without the resource overhead of Moodle or Open edX. It handles courses, quizzes, certificates, SCORM, and user management well — and it does it on half the RAM. The trade-off is a smaller community and plugin ecosystem compared to Moodle’s dominant position.
For organizations already familiar with Moodle’s ecosystem, switching to Chamilo for resource savings alone may not justify the retraining cost. For new deployments on constrained hardware, Chamilo earns its place.
FAQ
How does Chamilo compare to Moodle?
Chamilo is lighter on resources and has a simpler interface. Moodle has a larger plugin ecosystem (2,000+ vs hundreds), more community support, and wider adoption. See Chamilo vs Moodle for a detailed comparison.
Does Chamilo support SCORM?
Yes. Chamilo imports SCORM 1.2 and SCORM 2004 packages. Upload SCORM zip files directly through the course content manager.
Can I migrate courses from Moodle to Chamilo?
Not directly. Moodle and Chamilo use different backup formats. You can export SCORM packages from Moodle courses and import those into Chamilo. Manual content migration is needed for quizzes, forums, and assignments.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments