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.

  1. Open http://your-server:8080 in your browser
  2. The installer checks PHP requirements — all should pass with the official image
  3. Database settings:
    • Host: db
    • Port: 3306
    • Database: chamilo
    • Username: chamilo
    • Password: your DB_PASSWORD value
  4. Admin account: Set your admin username, password, and email
  5. Platform settings: Name your platform, set language and timezone
  6. Complete the wizard — Chamilo populates the database and redirects to the login page

Configuration

SettingLocationDescription
Platform nameAdmin → ConfigurationDisplayed in header and emails
Default languageAdmin → Configuration → Languages40+ languages supported
RegistrationAdmin → Configuration → RegistrationAllow/restrict self-registration
Disk quotaAdmin → Configuration → UploadsPer-course file upload limits
SCORM supportBuilt-inImport 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

ResourceMinimumRecommended
RAM1 GB2 GB
CPU1 core2 cores
Disk2 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.

Comments