
LimeSurvey è una piattaforma open source per la creazione e gestione di sondaggi online, nata nel 2003 e oggi una delle alternative gratuite più diffuse a servizi commerciali come SurveyMonkey, Typeform o Google Forms.
È utilizzata da aziende, università, enti pubblici e organizzazioni non profit per raccogliere dati tramite questionari anche molto complessi, restando al 100% sotto il controllo di chi la installa: nessun dato di sondaggio transita verso server di terzi, il che la rende una scelta naturale quando la titolarità dei dati raccolti (specialmente dati personali dei rispondenti) deve rimanere interna.
La Community Edition (CE), quella che installeremo, è distribuita sotto licenza GPL v2 ed è completamente gratuita e autonoma: comprende sondaggi e domande illimitate, oltre 30 tipologie di domanda, più di 900 template grafici, supporto multilingua (80+ lingue), logica condizionale avanzata, autenticazione a due fattori, integrazioni LDAP/SAML e API REST, oltre a funzionalità di accessibilità (WCAG 2.0) e strumenti per la conformità GDPR.
Le funzionalità aggiuntive di supporto, hosting gestito e servizi enterprise restano nell’offerta commerciale a pagamento di LimeSurvey GmbH, ma non sono necessarie per un’installazione self-hosted funzionale al 100%.
NOTE IMPORTANTI
Un paio di note prima di partire, verificate di recente:
- Con MySQL 9.x l’autenticazione di LimeSurvey si rompe perché è stato rimosso mysql_native_password → meglio pinnare MySQL 8.4.
- La cartella /var/www/html/upload contiene anche temi e plugin, non solo i file dei sondaggi: va montata per intero, altrimenti un rebuild del container li cancella.
PREREQUISITI
Docker e Docker Compose già installati sul tuo Ubuntu Server 26.04.
NSTALLAZIONE DI DOCKER E DOCKER COMPOSE
Se il server non ha già Docker installato eseguire i comandi elencati di seguito:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
Verificare l’installazione di docker con i comandi:
|
0 |
docker --version
|
Dovremmo visualizzare il seguente output:
|
0 |
Docker version 29.7.2, build a7dcaa6
|
Eseguire quindi il comando:
|
0 |
docker compose version
|
Dovremmo visualizzare il seguente output:
|
0 |
Docker Compose version v5.5.0
|
(Facoltativo) Per usare docker senza sudo eseguire i comandi:
|
0
1
|
sudo usermod -aG docker $USER
newgrp docker
|
STRUTTURA DELLE CARTELLE
Eseguire i comandi:
|
0
1
|
mkdir -p ~/limesurvey/{upload,db-data}
cd ~/limesurvey
|
CREAZIONE FILE .ENV
Eseguire il comando:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
cat > .env << 'EOF'
# Database
MYSQL_ROOT_PASSWORD=CambiaQuestaPassword!
MYSQL_DATABASE=limesurvey
MYSQL_USER=limesurvey
MYSQL_PASSWORD=CambiaAncheQuestaPassword!
# LimeSurvey Admin
LS_ADMIN_USER=admin
LS_ADMIN_NAME=Amministratore
LS_ADMIN_EMAIL=admin@tuodominio.it
LS_ADMIN_PASSWORD=CambiaQuestaPasswordAdmin!
# URL pubblico (adatta al tuo dominio/reverse proxy)
LS_PUBLIC_URL=https://survey.mypsx.net
EOF
|
Quindi eseguire il comando:
|
0 |
chmod 600 .env
|
CREAZIONE DEL FILE DOCKER-COMPOSE.YML
Creare il file docker-compose.yml con il comando:
|
0 |
sudo nano docker-compose.yml
|
Quindi incollare all’interno il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
services:
mysql:
image: mysql:8.4
container_name: limesurvey-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ./db-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 10
limesurvey:
image: martialblog/limesurvey:7-apache
container_name: limesurvey-app
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
environment:
DB_TYPE: mysql
DB_HOST: mysql
DB_PORT: 3306
DB_NAME: ${MYSQL_DATABASE}
DB_USERNAME: ${MYSQL_USER}
DB_PASSWORD: ${MYSQL_PASSWORD}
ADMIN_USER: ${LS_ADMIN_USER}
ADMIN_NAME: ${LS_ADMIN_NAME}
ADMIN_EMAIL: ${LS_ADMIN_EMAIL}
ADMIN_PASSWORD: ${LS_ADMIN_PASSWORD}
PUBLIC_URL: ${LS_PUBLIC_URL}
ports:
- "8080:8080"
volumes:
- ./upload:/var/www/html/upload
|
AVVIO DEL CONTAINER
Avviare il container con il comando:
|
0 |
docker compose up -d
|
Dovremmo visualizzare un output simile al seguente:
|
0
1
2
3
4
5
|
[+] up 40/40
✔ Image martialblog/limesurvey:7-apache Pulled
✔ Image mysql:8.4 Pulled
✔ Network limesurvey_default Created
✔ Container limesurvey-mysql Healthy
✔ Container limesurvey-app Started
|
Quindi analizzare i log con il comando:
|
0 |
docker compose logs -f limesurvey
|
Dovremmo visualizzare un output simile al seguente:
|
0
1
2
3
4
5
6
7
8
9
|
limesurvey-app | Info: Customizing Apache Listen port to 8080
limesurvey-app | Connection to mysql (172.18.0.2) 3306 port [tcp/*] succeeded!
limesurvey-app | Info: Generating config.php
limesurvey-app | Info: Using MySQL configuration
limesurvey-app | Info: Using TCP connection
limesurvey-app | Info: Creating security.php
limesurvey-app | Warning: No encryption keys were provided
limesurvey-app | Warning: A security.php config will be created by the application
limesurvey-app | Info: Check if database already provisioned. Nevermind the Stack trace.
limesurvey-app | Warning: THIS FILE NEEDS TO BE PERSISTENT
|
PRIMO AVVIO TRAMITE WEB GUI
Al primo avvio l’entrypoint crea config.php ed esegue l’installazione via CLI usando le variabili ADMIN_*.
Attendere che i log mostrino il completamento poi richiamare i seguenti link:
Frontend: http://<ip-server>:8080/
Questo è il Front End
Backend: http://<ip-server>:8080/index.php/admin
Questo è il Back End
Inserire le credenziali censite nel file .env quindi cliccare Log In
NOTA BENE: cambiare le variabili ADMIN_* dopo l’installazione iniziale non ha alcun effetto. Le credenziali si modificano solo dal pannello di amministrazione.
Cliccare su Chiudere per andare direttamante alla Dashboard oppure Creare una Nuova Indagine se si intende procedere subito con la creazione di una survey
Sopra un immagine che mostra la Dashboard di Backend di LimeSurvey
CONFIGURAZIONE REVERSE PROXY (NGINX PROXY MANAGER)
In Ngnix Proxy Manager creare un Proxy Host puntato a limesurvey-app:8080 (se sono sulla stessa rete Docker) o all’IP:8080 del server, con SSL Let’s Encrypt.
Se noti redirect che portano con sé la porta interna nell’URL aggiungere in Advanced:
|
0
1
|
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
|
BACKUP DI LIMESURVEY
Di seguito i comandi per effettuare il backup di Limesurvey
|
0
1
|
# Database
docker exec limesurvey-mysql sh -c 'exec mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" limesurvey' > backup_$(date +%F).sql
|
|
0
1
|
# File (temi, plugin, upload sondaggi)
tar czf upload_backup_$(date +%F).tar.gz ./upload
|
PRO E CONTRO
PRO
- Open source, GDPR-friendly per chi deve gestire dati sensibili in EU
- Immagine Docker martialblog/limesurvey mantenuta attivamente, con supporto sia Apache che FPM
- Motore di survey molto maturo: logica condizionale avanzata, quote, token per inviti, export in decine di formati
- Nessun limite sul numero di sondaggi, domande o risposte raccolte
- Enorme flessibilità nei tipi di domanda e nella logica dei questionari (skip logic, quote, randomizzazione)
- Dati dei sondaggi interamente sotto il proprio controllo, nessuna trasmissione a terzi
- Community ampia e attiva, centinaia di template e plugin disponibili
- Multilingua nativo, utile per sondaggi rivolti a pubblici internazionali
CONTRO
- Configurazione iniziale non banale dietro reverse proxy con sub-path (bug noto sul routing dell’area admin)
- L’immagine Docker non è “ufficiale” LimeSurvey ma community-maintained
- L’engine MyISAM di default per le tabelle dei sondaggi è datato; per uso serio conviene passare a InnoDB via DB_MYSQL_ENGINE=InnoDB
- Nessuna immagine Docker ufficiale: bisogna scegliere e fidarsi di un’immagine mantenuta dalla community
- Stack PHP + database relazionale più “pesante” da configurare correttamente (permessi file, cron per task pianificati, configurazione email) rispetto a soluzioni moderne a container singolo
- Interfaccia amministrativa meno immediata rispetto a strumenti commerciali blasonati; richiede un minimo di curva di apprendimento
- Gli aggiornamenti tra versioni maggiori possono richiedere passaggi manuali (backup e migrazione del database) più delicati

0 Commenti