Installer Joomla avec Docker Compose (prod) : HTTPS, base de données, volumes

Installer Joomla avec Docker Compose (prod) : HTTPS, base de données, volumes

Guide 2026 pour installer Joomla avec Docker Compose en production : reverse proxy HTTPS, base de données persistante, volumes, sauvegardes et bonnes pratiques sécurité/performance.

Installer Joomla avec Docker Compose (prod) : HTTPS, base de données, volumes

Déployer Joomla en production, ce n’est pas juste lancer un conteneur : il faut gérer HTTPS, une base de données persistante, des volumes pour les fichiers, et une stratégie de sauvegarde réaliste.

Dans ce guide, on part d’un docker-compose.yml simple et on l’amène vers une mise en service propre. Et si vous cherchez une option rapide sans vous coltiner l’exploitation au quotidien, vous pouvez aussi passer par l’application Joomla sur adgents.cloud : déploiement en 1 clic, scaling CPU/RAM et sauvegardes automatiques (jusqu’à 1/h selon l’offre).

Architecture Joomla en conteneurs : reverse proxy HTTPS + Joomla + DB + sauvegardes

Pourquoi Docker Compose pour Joomla en production ?

Docker Compose vous donne un cadre reproductible pour :

  • isoler Joomla et la base de données
  • persister les données via des volumes
  • standardiser la terminaison TLS via un reverse proxy
  • préparer une stratégie de sauvegarde + restauration

Si vous avez déjà fait ce type de déploiement pour un CMS, vous retrouverez les mêmes principes que dans Installer Drupal avec Docker Compose (prod) (HTTPS, DB, volumes).

Prérequis

  • Un serveur Linux (VPS)
  • Un nom de domaine pointant sur le serveur (DNS OK)
  • Docker + Docker Compose

Pour aller plus vite sur l’opérationnel, vous pouvez comparer avec adgents.cloud (hébergement d’applications) : start/stop, facturation à l’heure, backups automatiques, rétention longue.

1) Arborescence recommandée

Créez un dossier de projet clair :

mkdir -p joomla-prod && cd joomla-prod

Dans ce guide on s’appuie sur des volumes Docker (souvent plus simple à maintenir qu’un bind-mount en production).

2) Exemple docker-compose.yml (Joomla + MySQL/MariaDB + volumes)

L’image officielle Joomla accepte des variables d’environnement pour se connecter à la base (et peut même pré-configurer l’admin).

Variables d’environnement Joomla (image Docker officielle)

Créez docker-compose.yml :

services:
  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: joomla_db
      MYSQL_USER: joomla
      MYSQL_PASSWORD: change-me
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db_data:/var/lib/mysql

  joomla:
    image: joomla:latest
    restart: unless-stopped
    depends_on:
      - db
    environment:
      JOOMLA_DB_HOST: db
      JOOMLA_DB_USER: joomla
      JOOMLA_DB_PASSWORD: change-me
      JOOMLA_DB_NAME: joomla_db
      JOOMLA_SITE_NAME: "Mon site Joomla"
      JOOMLA_ADMIN_USER: "Administrateur"
      JOOMLA_ADMIN_USERNAME: admin
      JOOMLA_ADMIN_PASSWORD: "change-me-too"
      JOOMLA_ADMIN_EMAIL: [email protected]
    volumes:
      - joomla_data:/var/www/html
    # À garder pour un test local uniquement (en prod, on passe par HTTPS via reverse proxy)
    ports:
      - "8080:80"

volumes:
  db_data: {}
  joomla_data: {}

Lancez :

docker compose up -d

Puis vérifiez que Joomla répond :

  • http://IP_SERVEUR:8080

Ensuite, passez à la mise en production propre (HTTPS + domaine).

3) HTTPS en production : ne pas exposer Joomla directement

En production, le pattern le plus robuste est :

  • exposer uniquement le reverse proxy en 80/443
  • garder Joomla en interne sur le réseau Docker

Option A — Traefik (Let’s Encrypt automatique)

Voici un exemple Traefik + Joomla + DB. Remplacez le domaine et l’email :

services:
  traefik:
    image: traefik:v3.2
    command:
      - --api.dashboard=false
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - [email protected]
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
      - --certificatesresolvers.le.acme.httpchallenge=true
      - --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_letsencrypt:/letsencrypt
    restart: unless-stopped

  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: joomla_db
      MYSQL_USER: joomla
      MYSQL_PASSWORD: change-me
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db_data:/var/lib/mysql

  joomla:
    image: joomla:latest
    restart: unless-stopped
    depends_on:
      - db
    environment:
      JOOMLA_DB_HOST: db
      JOOMLA_DB_USER: joomla
      JOOMLA_DB_PASSWORD: change-me
      JOOMLA_DB_NAME: joomla_db
    volumes:
      - joomla_data:/var/www/html
    labels:
      - traefik.enable=true
      - traefik.http.routers.joomla.rule=Host(`joomla.exemple.fr`)
      - traefik.http.routers.joomla.entrypoints=websecure
      - traefik.http.routers.joomla.tls.certresolver=le
      - traefik.http.services.joomla.loadbalancer.server.port=80

volumes:
  db_data: {}
  joomla_data: {}
  traefik_letsencrypt: {}

Une fois démarré, Joomla est servi en HTTPS sur votre domaine.

Option B — Nginx Proxy Manager (plus “UI”)

Si vous préférez une configuration via interface web, Nginx Proxy Manager fait très bien le job pour publier Joomla en HTTPS et renouveler les certificats automatiquement. Le principe reste le même : ports 80/443 sur le proxy, Joomla en interne.

4) Volumes : ce qu’il faut persister (sinon, vous perdez vos données)

Deux zones sont critiques :

  • La base de données (/var/lib/mysql)
  • Les fichiers Joomla (/var/www/html) : médias, extensions, configuration

Côté sauvegarde, ça implique généralement :

  • un dump DB régulier
  • une archive des fichiers
  • au moins un test de restauration sur un environnement isolé

Si vous voulez éviter de bricoler tout ça, adgents.cloud peut automatiser les sauvegardes et proposer une rétention longue, tout en conservant une logique “application” (start/stop, scaling).

5) Sécurité et performance : les essentiels

Quelques points simples qui évitent beaucoup de problèmes :

  • Mises à jour : Joomla + extensions (à cadence régulière)
  • Extensions : réduire la surface en gardant le minimum utile
  • Cache : activer les caches Joomla et surveiller la DB
  • Logs : centraliser (au moins les erreurs) et mettre des alertes basiques

Pour une approche similaire sur un autre CMS, voyez aussi Héberger WordPress avec Docker Compose (prod) (HTTPS, perf, sauvegardes).

Tutoriel vidéo (FR) : Traefik et HTTPS

Pour comprendre le reverse proxy HTTPS (utile quel que soit le CMS) :

  • Cloud background

Conclusion

Avec Docker Compose, vous pouvez installer Joomla proprement en production : HTTPS via reverse proxy, DB persistante, volumes pour les fichiers, et une stratégie de sauvegarde réaliste.

Et si vous voulez gagner du temps sur l’exploitation, testez directement l’application Joomla sur adgents.cloud.

Cloud pattern

Cet article vous a été utile ?

N'hésitez pas à découvrir d'autres articles

Voir plus d'articles