Installer LimeSurvey avec Docker
Apprenez à installer LimeSurvey rapidement et facilement avec Docker Compose. Un guide complet sur la mise en place, la persistance des données avec les volumes et l'exécution de versions spécifiques.
Traduction automatique
Cet article fait partie de la série Auto-héberger vos propres services :
Journal des modifications
8.4 (MySQL 9.x removed mysql_native_password, breaking LimeSurvey authentication); added healthcheck and service_healthy to all compose files to eliminate startup race conditions; fixed several grammar errors.
Cet article montre comment démarrer LimeSurvey, un outil de sondage open source, avec Docker Compose et l'image martialblog/docker-limesurvey. Il couvre une configuration minimale pour faire tourner le site sur http://localhost:8080, l'ajout de volumes pour que vos sondages et votre configuration survivent aux redémarrages du container, et le fait de figer LimeSurvey et MySQL sur des versions précises quand vous devez reproduire localement un ancien environnement de production.
LimeSurvey est un outil de sondage open source qui permet de créer et de mener des enquêtes en ligne. C'est un outil puissant et intuitif, utilisable par tout le monde.
Une fois de plus, il est facile de jouer avec et de créer un site bac à sable pour découvrir toutes ses fonctionnalités ; merci Docker.
Deux choses sur lesquelles repose ce compose.yaml et qui sont expliquées ailleurs sur ce blog : les volumes, pour que vos sondages survivent au redémarrage d'un container, et les healthchecks, pour que LimeSurvey attende que MySQL accepte réellement les connexions.
Pour cela, nous allons utiliser l'image Docker https://github.com/martialblog/docker-limesurvey.
LimeSurvey, opérationnel en deux minutes
Un fichier compose.yaml, un docker compose up --detach, et voici ce qui vous attend sur http://localhost:8080/admin :

Une installation LimeSurvey complète — liste des sondages, participants, statistiques — qui tourne sur votre machine, sans rien installer à part Docker. Construisons-la.
À nous de jouer
Ouvrez un shell Linux et lancez mkdir -p /tmp/limesurvey && cd $_ pour créer un dossier limesurvey dans votre dossier temporaire Linux et vous y rendre.
Créez ensuite un fichier compose.yaml dans ce dossier avec ce contenu :
name: limesurvey
services: limesurvey-app: image: docker.io/martialblog/limesurvey:latest container_name: limesurvey-app restart: always environment: - DB_TYPE=mysql - DB_HOST=limesurvey-db - DB_NAME=limesurvey - DB_USERNAME=admin - DB_PASSWORD=admin - ADMIN_USER=admin - ADMIN_PASSWORD=admin - ADMIN_NAME=admin - ADMIN_EMAIL=admin@example.com ports: - 8080:8080 depends_on: limesurvey-db: condition: service_healthy
limesurvey-db: image: docker.io/mysql:8.4 container_name: limesurvey-db environment: - MYSQL_USER=admin - MYSQL_PASSWORD=admin - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=limesurvey healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 10s retries: 10Ce fichier Docker Compose définit une application LimeSurvey avec deux services : un conteneur applicatif qui exécute l'application web, et un conteneur MySQL qui fournit la base de données. L'application est configurée pour se connecter à la base de données et expose le port 8080 ; elle attend que la base de données soit saine avant de démarrer.
Il suffit maintenant de lancer la commande suivante pour télécharger (uniquement la première fois) les images nécessaires (LimeSurvey et MySQL) et créer les deux containers :
Une fois tout téléchargé et démarré, vous pouvez vérifier que vous avez bien deux containers en lançant la commande suivante :
La sortie ci-dessus a été simplifiée
Pour plus de clarté, la sortie de docker container list a été simplifiée ci-dessus ; toutes les colonnes ne sont pas reprises dans l'article.
La condition service_healthy dans le fichier compose garantit que LimeSurvey ne démarrera pas avant que MySQL soit prêt, ce qui élimine les erreurs de connexion dont vous avez peut-être entendu parler dans de vieux tutoriels. Patientez tout de même une ou deux minutes (selon votre machine) le temps que LimeSurvey initialise les tables de sa base de données.
Rendez-vous sur http://localhost:8080 et si vous voyez ERR_CONNECTION_REFUSED, attendez encore un peu et rafraîchissez. Quand c'est prêt, vous devriez voir la page d'accueil par défaut de LimeSurvey.
Regardez les logs
Si l'attente se prolonge et que quelque chose semble anormal, lancez docker compose logs -f pour inspecter les logs. Vous devriez voir [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND' quand LimeSurvey est prêt, ce qui signifie que le serveur web est lancé et accepte les connexions.
Appuyez sur CTRL-C pour arrêter de suivre les logs.
Première connexion
Quand LimeSurvey est prêt, vous verrez la page suivante sur http://localhost:8080 :

Allez sur http://localhost:8080/admin pour ouvrir l'interface d'administration. Les identifiants à utiliser sont admin / admin (comme défini dans le fichier compose.yaml, voir les variables ADMIN_USER et ADMIN_PASSWORD).

Une fois connecté, vous arrivez sur le tableau de bord montré au début de cet article, et vous êtes prêt à jouer avec LimeSurvey sur votre machine.
Utiliser des volumes
Le fichier compose.yaml fourni plus haut n'utilisait aucun volume : quand vous arrêterez les containers, votre travail sera perdu et LimeSurvey redémarrera sans configuration ni sondages, comme après une réinitialisation complète.
Si vous voulez tester LimeSurvey sur plusieurs jours et conserver vos éléments de configuration et vos sondages, vous voudrez garder votre travail. Pour cela, vous devez utiliser des volumes.
Voici un fichier compose.yaml mis à jour pour demander à Docker d'utiliser des volumes qu'il gère lui-même.
name: limesurvey
services: limesurvey-app: image: docker.io/martialblog/limesurvey:latest container_name: limesurvey-app restart: always environment: - DB_TYPE=mysql - DB_HOST=limesurvey-db - DB_NAME=limesurvey - DB_USERNAME=admin - DB_PASSWORD=admin - ADMIN_USER=admin - ADMIN_PASSWORD=admin - ADMIN_NAME=admin - ADMIN_EMAIL=admin@example.com # highlight-next-line volumes: # highlight-next-line - limesurvey:/var/www/html/upload/surveys ports: - 8080:8080 depends_on: # highlight-next-line limesurvey-db: # highlight-next-line condition: service_healthy
limesurvey-db: image: docker.io/mysql:8.4 container_name: limesurvey-db # highlight-next-line volumes: # highlight-next-line - data:/var/lib/mysql environment: - MYSQL_USER=admin - MYSQL_PASSWORD=admin - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=limesurvey # highlight-next-line healthcheck: # highlight-next-line test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] # highlight-next-line timeout: 10s # highlight-next-line retries: 10
# highlight-next-linevolumes: # highlight-next-line limesurvey: # highlight-next-line data:Ce fichier Docker Compose définit une application LimeSurvey complète avec deux services : un conteneur applicatif qui se connecte à une base de données MySQL. L'application expose un port web et utilise des volumes persistants pour stocker les données, tandis que la base de données inclut une vérification de santé pour s'assurer qu'elle est prête avant que l'application démarre.
Envie d'en savoir plus sur les volumes ?
Dans ce cas, lisez cet article : Utiliser les volumes avec Docker, cas d'usage
Télécharger une ancienne version
Cette section fige MySQL 5.7, qui est en fin de vie
MySQL 5.7 est en fin de vie depuis octobre 2023 et ne reçoit plus de correctifs de sécurité. Le figer est volontaire ci-dessous, car tout l'intérêt est de reproduire un ancien environnement de production sur votre machine. N'utilisez jamais mysql:5.7 pour autre chose que la reproduction locale d'une installation legacy.
Vous savez quoi ? Télécharger une ancienne version est vraiment simple.
Imaginons la situation suivante : vous devez intervenir sur une ancienne installation de LimeSurvey. Pour l'exemple, disons que vous devez installer un plugin quelconque mais, évidemment, avant de le faire sur un site de production, vous allez vous salir les mains en local. Il vous faut donc télécharger la même version que celle de production.
Plus tôt dans cet article, nous avons vu qu'on pouvait facilement télécharger la version « latest ».
Recommençons, mais cette fois pour une version précise. En regardant le site de production, vous voyez par exemple la version 3.22.6+200219.
Dans notre compose.yaml, nous devons alors remplacer image: docker.io/martialblog/limesurvey:latest par autre chose, mais par quoi ? Un tag valide, à coup sûr. Allez sur https://hub.docker.com/r/martialblog/limesurvey/tags et, dans la zone Filter Tags, tapez 3.22.6, notre version de production donc. Nous obtenons trois images, mais une seule pour apache (en effet, nous voulons utiliser l'image Docker contenant à la fois PHP et Apache). Bingo, nous savons maintenant que notre ligne sera image: docker.io/martialblog/limesurvey:3.22.6_200219-apache.
La deuxième partie, c'est de savoir avec certitude quelles lignes mettre dans le fichier yaml. Pour cela, rendez-vous simplement sur https://github.com/martialblog/docker-limesurvey/releases/tag/ et essayez de retrouver la même release. Ici, c'est : https://github.com/martialblog/docker-limesurvey/releases/tag/3.22.6%2B200219.
Cliquez par exemple sur Source code (zip) pour télécharger l'archive et ouvrez-la. Récupérez le fichier compose.yaml depuis l'archive et regardez attentivement comment il est configuré.
Par exemple, nous voyons que la version de MySQL utilisée à l'époque était mysql:5.7 (utilisez donc la même pour éviter les conflits).
Notre compose.yaml devient alors :
name: limesurvey
services: limesurvey-app: image: docker.io/martialblog/limesurvey:3.22.6_200219-apache container_name: limesurvey-app restart: always environment: - DB_TYPE=mysql - DB_HOST=limesurvey-db - DB_NAME=limesurvey - DB_USERNAME=limesurvey - DB_PASSWORD=secret - ADMIN_USER=admin - ADMIN_PASSWORD=admin - ADMIN_NAME=admin - ADMIN_EMAIL=admin@example.com ports: - 8080:80 depends_on: limesurvey-db: condition: service_healthy
limesurvey-db: image: mysql:5.7 container_name: limesurvey-db environment: - MYSQL_USER=limesurvey - MYSQL_PASSWORD=secret - MYSQL_ROOT_PASSWORD=secret - MYSQL_DATABASE=limesurvey healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 10s retries: 10Ce fichier Docker Compose définit une application LimeSurvey avec deux services : un conteneur applicatif Apache et une base de données MySQL. L'application se connecte à la base de données une fois qu'elle est saine, en utilisant des variables d'environnement pour la configuration et des placeholders pour les paramètres personnalisables.
Lancez simplement docker compose up --detach puis rendez-vous sur http://localhost:8080 et, félicitations, vous avez un site LimeSurvey v3.22.6 en local.
Conclusion
Deux services dans un compose.yaml, une condition service_healthy pour que LimeSurvey attende sa base de données, et quelques volumes nommés quand vous voulez que vos sondages survivent : c'est tout ce qu'il faut pour obtenir un LimeSurvey jetable — ou persistant — sur votre propre machine. Et comme la version n'est qu'un tag Docker, reproduire exactement la release qui tourne en production ne demande qu'une seule ligne à modifier.
Même recette, autres outils : parcourez les articles self-hosted de ce blog.




