Aller au contenu principal

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.

· 7 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Journal des modifications

Dernière
Pinned MySQL to 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.

Installer LimeSurvey avec Docker

⚡
TL;DR

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 :

http://localhost:8080/admin

Tableau de bord LimeSurvey

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 :

Vos valeurs pour cette page
défaut
défaut
défaut
S'applique aux commandes de cette pageEnregistré uniquement sur cet appareil
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: 10

Ce 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 :

>user@machine: ~/yourproject

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 :

>user@machine: ~/yourproject

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 :

http://localhost:8080

Page d'accueil de LimeSurvey

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).

http://localhost:8080/admin

Page d'administration de LimeSurvey

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-line
volumes:
# 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: 10

Ce 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.


Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?