Configuration Docker complète pour Moodle avec support de MariaDB, MySQL et PostgreSQL.
- Docker 20.10+
- Docker Compose 2.0+
- 2 GB RAM minimum (4 GB recommandé)
- 10 GB d'espace disque
# Créer le répertoire du projet
mkdir moodle-docker && cd moodle-docker
# Copier les fichiers (Dockerfile, config.php, docker-compose.yml)
# ...
# Copier le fichier d'environnement
cp .env.example .envÉditez le fichier .env et configurez le type de base de données :
MOODLE_DB_TYPE=mariadb
MOODLE_DB_HOST=mariadbLancer avec :
docker-compose --profile mariadb up -dMOODLE_DB_TYPE=mysqli
MOODLE_DB_HOST=mysqlLancer avec :
docker-compose --profile mysql up -dMOODLE_DB_TYPE=pgsql
MOODLE_DB_HOST=postgres
MOODLE_DB_PORT=5432Lancer avec :
docker-compose --profile postgres up -dAprès le démarrage des conteneurs (attendre ~30 secondes), installez la base de données :
# Pour MariaDB/MySQL
docker-compose exec moodle php /var/www/moodle/admin/cli/install_database.php \
--agree-license \
--adminpass=Admin123! \
--fullname="Mon Site Moodle" \
--shortname="Moodle"
# Pour PostgreSQL (même commande)
docker-compose exec moodle php /var/www/moodle/admin/cli/install_database.php \
--agree-license \
--adminpass=Admin123! \
--fullname="Mon Site Moodle" \
--shortname="Moodle"- URL : http://localhost:9000
- Utilisateur :
admin - Mot de passe :
Admin123!
- Ajoutez au fichier
.env:
MOODLE_SESSION_HANDLER=\core\session\redis
MOODLE_SESSION_REDIS_HOST=redis
MOODLE_SESSION_REDIS_PORT=6379
MOODLE_SESSION_REDIS_DB=0- Lancez avec le profile Redis :
docker-compose --profile mariadb --profile redis up -dLancez avec le profile cron :
docker-compose --profile mariadb --profile cron up -dLe CRON s'exécutera automatiquement toutes les minutes.
Ajoutez au fichier .env :
MOODLE_SMTP_HOST=smtp.gmail.com:587
MOODLE_SMTP_SECURE=tls
MOODLE_SMTP_USER=[email protected]
MOODLE_SMTP_PASSWORD=votre-mot-de-passe
MOODLE_NOREPLY_ADDRESS=[email protected]MOODLE_DEBUG=15
MOODLE_DEBUG_DISPLAY=true
MOODLE_CACHE_JS=false
MOODLE_CACHE_TEMPLATES=false# Démarrer
docker-compose --profile mariadb up -d
# Arrêter
docker-compose down
# Arrêter et supprimer les volumes (⚠️ PERTE DE DONNÉES)
docker-compose down -v# Voir tous les logs
docker-compose logs -f
# Logs Moodle uniquement
docker-compose logs -f moodle
# Logs base de données
docker-compose logs -f mariadb# Backup de la base de données (MariaDB)
docker-compose exec mariadb mysqldump -u moodle -pmoodle_pass moodle > backup_$(date +%Y%m%d).sql
# Backup des fichiers
docker run --rm -v moodle_data:/data -v $(pwd):/backup alpine tar czf /backup/moodledata_$(date +%Y%m%d).tar.gz -C /data .# Restore de la base de données
docker-compose exec -T mariadb mysql -u moodle -pmoodle_pass moodle < backup_20250127.sql
# Restore des fichiers
docker run --rm -v moodle_data:/data -v $(pwd):/backup alpine tar xzf /backup/moodledata_20250127.tar.gz -C /data# 1. Arrêter Moodle
docker-compose stop moodle
# 2. Backup (voir ci-dessus)
# 3. Reconstruire l'image avec la nouvelle version
docker-compose build --no-cache moodle
# 4. Redémarrer
docker-compose --profile mariadb up -d
# 5. Mettre à jour la base de données
docker-compose exec moodle php /var/www/moodle/admin/cli/upgrade.php --non-interactive# Shell dans le conteneur Moodle
docker-compose exec moodle bash
# Shell dans la base de données
docker-compose exec mariadb mysql -u moodle -pmoodle_pass moodle# Purger tous les caches
docker-compose exec moodle php /var/www/moodle/admin/cli/purge_caches.php
# Réinitialiser un mot de passe utilisateur
docker-compose exec moodle php /var/www/moodle/admin/cli/reset_password.php --username=admin
# Installer un plugin
docker-compose exec moodle php /var/www/moodle/admin/cli/install_plugins.php- Changer tous les mots de passe par défaut
- Activer HTTPS avec un certificat SSL valide
- Configurer
MOODLE_FORCE_SSL=true - Désactiver le debug :
MOODLE_DEBUG=0 - Changer le nom du dossier admin :
MOODLE_ADMIN=monsuperadmin - Générer un salt unique :
MOODLE_PASSWORD_SALT=$(openssl rand -hex 32) - Configurer les sauvegardes automatiques
- Limiter l'accès réseau avec un firewall
- Activer les logs d'audit Moodle
- Configurer fail2ban si exposition publique
Exemple de docker-compose.override.yml :
version: '3.8'
services:
moodle:
labels:
- "traefik.enable=true"
- "traefik.http.routers.moodle.rule=Host(`moodle.example.com`)"
- "traefik.http.routers.moodle.entrypoints=websecure"
- "traefik.http.routers.moodle.tls.certresolver=letsencrypt"
environment:
- MOODLE_WWW_ROOT=https://moodle.example.com
- MOODLE_FORCE_SSL=truedocker-compose psdocker stats# Espace utilisé par les volumes
docker system df -v
# Taille du répertoire moodledata
docker run --rm -v moodle_data:/data alpine du -sh /data# Recréer les volumes de la base de données
docker-compose down -v
docker-compose --profile mariadb up -dVérifiez que le Dockerfile pointe bien vers /var/www/moodle/public comme document root.
# Tester la connexion depuis le conteneur Moodle
docker-compose exec moodle mysql -h mariadb -u moodle -pmoodle_pass moodle -e "SELECT 1;"- Activer Redis pour le cache
- Augmenter la mémoire PHP :
MOODLE_EXTRA_MEMORY_LIMIT=512M - Activer OPcache (déjà configuré par défaut)
Vérifiez les permissions :
docker-compose exec moodle chown -R www-data:www-data /var/moodledata
docker-compose exec moodle chmod -R 755 /var/moodledataPour obtenir de l'aide :
- Consultez les logs :
docker-compose logs -f - Vérifiez la configuration :
docker-compose config - Forum Moodle : https://moodle.org/mod/forum/
- Documentation Docker : https://docs.docker.com/
Ce projet suit la licence GPL v3, comme Moodle lui-même.