Ospitare Listmonk su un VPS gestito significa custodire le vostre liste di iscritti e le vostre campagne su una macchina tutta vostra, che i nostri team tengono aggiornata e supervisionano giorno e notte. Listmonk è un software libero con licenza AGPL-3.0. Questa guida segue la sua documentazione ufficiale: la versione da scegliere, Docker Compose, PostgreSQL, HTTPS, l'invio tramite SMTP, i rimbalzi, il consenso, i backup e gli aggiornamenti.
Di Simon Vasconcelos Lee
Pubblicato il 12 novembre 2026Lettura: 13 minuti
pg_dump prima di ogni aggiornamento.Listmonk gestisce le vostre liste di distribuzione e le vostre newsletter da un'interfaccia web. È un programma unico, scritto in Go, la cui sola dipendenza è PostgreSQL. Le sue liste sono a senso unico: voi scrivete ai vostri iscritti, e non si tratta di una lista di discussione tra loro.
Listmonk è pubblicato con licenza GNU AGPL versione 3. Potete usarlo, anche in azienda, e inviare le vostre campagne come quelle dei vostri clienti, senza alcuna licenza da acquistare. Resta il costo del server e quello del vostro servizio di invio.
L'articolo 13 aggiunge una condizione propria dell'AGPL: se modificate il programma, la vostra versione deve proporre chiaramente a tutti coloro che lo usano a distanza, tramite la rete, di ottenerne gratuitamente il codice sorgente. Se distribuite delle copie, si applicano anche gli obblighi di condivisione del codice della licenza. Far girare Listmonk senza modificarlo non fa scattare questo articolo.
Un punto da conoscere prima di iniziare. Su GitHub, il tag «Latest» indica in questo momento la v7.0.0-beta.2 del 10 novembre 2026, che il progetto stesso presenta come una beta. L'ultima versione stabile è la v6.2.0, che contiene correzioni di sicurezza sui permessi. All'11 novembre 2026, l'immagine Docker latest indica questa v6.2.0.
| Versione | Immagine Docker | Stato |
|---|---|---|
| v6.2.0 | listmonk/listmonk:v6.2.0 | Stabile: quella di questa guida |
| v7.0.0-beta.2 | listmonk/listmonk:beta | Beta: da provare su una copia, con un backup |
| nightly | listmonk/listmonk:nightly | Non testata, secondo il progetto: a vostro rischio |
La versione 7 sostituisce tutta l'interfaccia di amministrazione, cambia alcuni dei suoi indirizzi, trasforma l'impostazione app.from_email in un elenco di indirizzi e modifica delle chiavi di traduzione, il che riguarda i modelli personalizzati. Leggete le sue note di rilascio prima di passarvi.
Il file Compose del progetto lancia --upgrade --yes a ogni avvio: una nuova immagine migra il database senza chiedervelo. Ora, un database migrato non si rilegge con una versione più vecchia, e tornare indietro impone di ripristinare un backup. Con un tag fisso, come v6.2.0, il cambio di versione resta una vostra decisione.
Il progetto raccomanda Docker Compose: il suo file avvia insieme Listmonk e PostgreSQL. Su un server in cui Docker è installato, create una cartella e scaricate questo file:
mkdir listmonk
cd listmonk
curl -LO https://github.com/knadh/listmonk/raw/master/docker-compose.yml
Il progetto chiede di adattare questo file al vostro ambiente. Ecco le sole righe da cambiare, il resto non si tocca:
x-db-credentials: &db-credentials
POSTGRES_USER: &db-user listmonk
POSTGRES_PASSWORD: &db-password un-mot-de-passe-long
POSTGRES_DB: &db-name listmonk
services:
app:
image: listmonk/listmonk:v6.2.0
ports:
- "127.0.0.1:9000:9000"
hostname: listmonk.example.com
listmonk come valore di partenza. Cambiatela prima del primo avvio, perché l'immagine PostgreSQL legge questa variabile solo su una cartella di dati vuota.latest, per la ragione vista sopra.127.0.0.1: è un nostro adattamento. Il file del progetto pubblica la porta 9000 senza limiti di indirizzo, e limita già PostgreSQL all'indirizzo locale. Trattato allo stesso modo, Listmonk si raggiunge solo tramite il reverse proxy.Avviate poi i servizi, creando in anticipo l'account Super Admin. Queste due variabili servono solo al primo avvio, e senza di esse l'account si crea alla prima visita dell'interfaccia: meglio che esista prima di aprire il vostro dominio.
LISTMONK_ADMIN_USER=votre-identifiant LISTMONK_ADMIN_PASSWORD=votre-mot-de-passe docker compose up -d
Listmonk gira anche come programma singolo, accanto al vostro server PostgreSQL, in versione 12 o successiva, dove il database è già stato creato.
listmonk_6.2.0_linux_amd64.tar.gz, evitando la beta in evidenza, ed estraete il binario.config.toml../listmonk --new-config
./listmonk --install
./listmonk
Per impostazione predefinita, config.toml ascolta su localhost:9000, il che va bene dietro un reverse proxy. Il repository fornisce un file di servizio listmonk@.service per systemd.
Il sito del progetto cita un'istanza di produzione che invia una campagna di oltre 7 milioni di e-mail con una frazione di un core di processore e un picco di 57 MB di memoria. Non pubblica né un minimo né una cifra per PostgreSQL, il cui volume cresce con i vostri iscritti, le vostre aperture e i vostri clic. Su un VPS gestito, descrivetici il vostro uso e vi raccomandiamo la taglia adatta.
I vostri iscritti cliccano su link che puntano alla vostra istanza: cancellazione, conferma, tracciamento dei clic. Essa si serve quindi in HTTPS sul proprio nome di dominio. Create i record A e AAAA di questo nome verso il vostro server, dove i visitatori arrivano sulle porte 80 e 443. La documentazione di Listmonk lascia la scelta del proxy, ecco due configurazioni comuni.
Caddy ottiene e rinnova da solo il certificato:
listmonk.example.com {
reverse_proxy 127.0.0.1:9000
}
Nginx rifiuta per impostazione predefinita le richieste di oltre 1 MB, con un errore 413. Per importare un file di iscritti o delle immagini, alzate questo limite in base ai vostri file:
server {
listen 80;
listen [::]:80;
server_name listmonk.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Certbot installa poi il certificato Let's Encrypt e il reindirizzamento verso HTTPS, quindi rinnova il certificato in autonomia:
sudo certbot --nginx -d listmonk.example.com
Accedete a https://listmonk.example.com/admin, poi aprite «Settings»:
https://listmonk.example.com. Listmonk ne ricava i link di cancellazione, di conferma e di tracciamento delle vostre e-mail. Il suo valore di partenza, http://localhost:9000, non funzionerebbe presso i vostri iscritti./listmonk/uploads, la cartella che il file Compose monta sul server.Per filtrare l'accesso, per indirizzo IP o tramite un proxy di autenticazione, la documentazione suddivide così le route:
| Route | Ruolo | Accesso |
|---|---|---|
/admin/*, /api/*, /webhooks/bounce | L'amministrazione, la sua API e il webhook interno dei rimbalzi | Privato |
/subscription/*, /public/* | Le pagine di iscrizione e i loro file | Pubblico |
/link/*, /campaign/* | Il tracciamento dei link e il pixel di tracciamento | Pubblico |
/webhooks/service/* | I rimbalzi inviati dal vostro servizio di invio | Pubblico |
/uploads/* | Le immagini delle vostre e-mail | Pubblico |
Listmonk prepara e cadenza le vostre e-mail, poi le affida ai server SMTP che dichiarate in «Settings», «SMTP». Non le consegna da sé alle caselle dei vostri iscritti: la qualità della consegna dipende quindi da quel server, dal vostro dominio e dalle vostre liste.
Per un invio massivo, scegliete un servizio di invio specializzato: porta la reputazione dei vostri invii e le firme del vostro dominio, e sa segnalare i rimbalzi. Da un VPS Simafri, l'invio passa da un relay SMTP autenticato, sulla porta 587: qui, quello di questo servizio.
Per orientarvi, la documentazione di Listmonk descrive i rimbalzi di Amazon SES, di Azure Communication Services, di SendGrid, di Postmark, di Forward Email e di Lettermint. Confrontateli in base al vostro volume e ai vostri destinatari.
| Impostazione | Valore | Che cosa verificate |
|---|---|---|
| Host | L'indirizzo SMTP del vostro servizio | Sostituisce il valore d'esempio fornito |
| Port | 587 | Le preimpostazioni della schermata propongono spesso un'altra porta: tornate sulla 587 |
| TLS | STARTTLS | Si accompagna alla porta 587 |
| Auth protocol | Quello del vostro servizio, spesso LOGIN | Con l'identificativo e la password SMTP del servizio |
Cliccate poi su «Test connection»: Listmonk invia un messaggio di prova e mostra l'errore del server se l'invio fallisce. Potete dichiarare più server, sceglierne uno per campagna, oppure instradare gli invii in base all'indirizzo o al dominio di mittente.
Impostatela in «Settings», «Performance», sotto il limite del vostro servizio:
Un messaggio che fallisce viene ritentato secondo l'impostazione «Retries», su altre connessioni del server. Se fallisce ancora, Listmonk lo segna come errore e passa al successivo: sorvegliate questi errori durante una grossa campagna.
Ospitare l'applicazione vi rende padroni di questi temi, ed è da essi che dipende se le vostre e-mail arrivano.
Inviate da un indirizzo del vostro dominio, e pubblicate nella sua zona DNS i record SPF e DKIM che il vostro servizio di invio vi fornisce, insieme a un record DMARC. Google richiede tutti e tre ai mittenti di più di 5 000 messaggi al giorno verso account Gmail, con un dominio di mittente allineato su SPF o DKIM, la cancellazione con un clic per i messaggi di marketing e un tasso di segnalazione come spam sotto lo 0,30 %, idealmente sotto lo 0,10 %.
{{ UnsubscribeURL }} nel piè di pagina del vostro modello. Questo link porta alla gestione delle preferenze e alla cancellazione.Listmonk applica il tipo di lista che scegliete. Su una lista con opt-in singolo, un iscritto aggiunto senza conferma riceve comunque le vostre campagne. Su una lista con double opt-in, riceve prima un'e-mail di conferma, e solo gli iscritti confermati ricevono le vostre campagne. È la scelta che protegge meglio la vostra reputazione di invio e che conserva una traccia chiara del consenso.
Le regole dipendono dal paese dei vostri destinatari. In Francia, per esempio, la CNIL richiede il consenso preventivo dei privati, tramite un'azione positiva come una casella non preselezionata, con un'eccezione per i vostri clienti su prodotti o servizi analoghi. Tra professionisti, la prospezione può fondarsi sul legittimo interesse se riguarda la loro attività. In ogni caso, ogni messaggio identifica il mittente e offre un mezzo semplice per rifiutare i successivi.
Scrivete solo a persone che attendono i vostri messaggi. Una lista acquistata o vecchia fa salire i rimbalzi e le segnalazioni come spam, ed è il vostro dominio a subirne le conseguenze.
Il pixel di tracciamento e il tracciamento dei clic toccano la privacy, e la documentazione chiede di usarli nel rispetto di regole come il GDPR. Per impostazione predefinita, questo tracciamento non è collegato a ciascun iscritto: l'opzione «Individual subscriber tracking» lo collega, e «Disable tracking» lo disattiva del tutto, in «Settings», «Privacy».
Continuare a scrivere a un indirizzo che rifiuta i vostri messaggi danneggia la vostra reputazione di invio. La gestione dei rimbalzi è disattivata in partenza: attivatela in «Settings», «Bounces», poi scegliete una di queste due vie.
https://listmonk.example.com/webhooks/service/ses, con l'ultima parola che cambia in base al servizio. Questo indirizzo deve restare pubblico.Per una casella dedicata, dichiaratela come indirizzo di ritorno in «Settings», «SMTP», «Custom headers»:
[
{"Return-Path": "your-bounce-inbox@example.com"}
]
Le impostazioni di partenza sono quelle che la documentazione indica per SES, e formano una buona base:
| Tipo di rimbalzo | Numero | Azione |
|---|---|---|
| Soft (lieve) | 2 | None: nessuna |
| Hard (definitivo) | 1 | Blocklist: l'indirizzo viene bloccato |
| Complaint (segnalazione come spam) | 1 | Blocklist: l'indirizzo viene bloccato |
Listmonk richiede PostgreSQL 12 o successivo. Il file Compose porta postgres:17-alpine, con i suoi dati nel volume Docker listmonk-data. Iscritti, campagne, modelli, statistiche e la maggior parte delle impostazioni vivono lì; solo le credenziali del database e l'indirizzo di ascolto restano nella configurazione.
Per puntare a un server PostgreSQL esistente, modificate le variabili LISTMONK_db__host, LISTMONK_db__port, LISTMONK_db__user, LISTMONK_db__password e LISTMONK_db__database del servizio app.
Listmonk è progettato per grandi liste. Man mano che il database cresce, è lui a poter rallentare l'interfaccia: con milioni di iscritti, la dashboard e i contatori possono impiegare decine di secondi a comparire. Il progetto consiglia allora due gesti:
VACUUM ANALYZE su un grande database, per esempio ogni settimana. Il comando blocca le query per il tempo del suo passaggio, in genere qualche secondo.docker compose exec db psql -U listmonk -d listmonk -c 'VACUUM ANALYZE;'
Due elementi formano la vostra istanza: il database PostgreSQL e la cartella uploads, se le vostre immagini restano sul disco. pg_dump produce un'esportazione coerente senza fermare Listmonk né bloccare gli altri accessi al database:
docker compose exec -T db pg_dump -U listmonk listmonk > listmonk-$(date +%F).sql
tar -czf listmonk-uploads-$(date +%F).tar.gz uploads
Per ripristinare, fermate Listmonk, svuotate il database, poi ricaricate l'esportazione. Come precisa la documentazione, questo gesto cancella il database in uso:
docker compose stop app
docker compose exec db psql -U listmonk -d listmonk -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;'
docker compose exec -T db psql -U listmonk -d listmonk < listmonk-2026-11-01.sql
docker compose start app
docker-compose.yml.docker compose down app
docker compose pull
docker compose up app -d
Con il binario, fermate Listmonk, sostituite il binario, lanciate ./listmonk --upgrade, poi riavviatelo. Per tornare a una versione precedente, ripristinate l'esportazione fatta prima dell'aggiornamento, poi rimettete il vecchio tag.
Il self-hosting richiede di occuparsi del server oltre che dell'applicazione. Su un VPS gestito, i nostri team prendono in carico il server e seguono la vostra istanza in modo proattivo; Listmonk resta il vostro software, con le sue impostazioni, le vostre liste e le vostre campagne.
| Argomento | I nostri team | Voi |
|---|---|---|
| Il server | Aggiornamenti del sistema e della sicurezza, interventi sul server compresi | Il momento più adatto alla vostra attività |
| La supervisione | Server seguito 24 ore su 24, 7 giorni su 7, con intervento senza attendere la vostra chiamata | Il monitoraggio delle vostre campagne e dei vostri rimbalzi |
| Listmonk | Monitoraggio proattivo: errori, rallentamenti e spazio su disco individuati, correzione raccomandata | La sua installazione, i suoi aggiornamenti e le sue impostazioni, che applicate voi o il vostro assistente IA |
| L'invio | Un server che raggiunge il vostro relay SMTP sulla porta 587 | Il vostro servizio di invio, i vostri record DNS, le vostre liste e il consenso dei vostri destinatari |
| I backup | Ogni notte, cifrati e conservati fuori dalla macchina; ripristino compreso | La richiesta di ripristino e la vostra esportazione prima di ogni aggiornamento |
| La migrazione | Il vostro server attuale migrato, in omaggio | Il momento del passaggio |
Se preferite che i nostri team intervengano nell'applicazione stessa, questa prestazione si fattura a ore o a forfait, con un preventivo comunicato prima dell'intervento.
Con un VPS gestito Simafri, i nostri team tengono aggiornato il server della vostra istanza Listmonk, lo sorvegliano giorno e notte e intervengono senza attendere la vostra chiamata; seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi o il vostro assistente IA. I backup sono cifrati ogni notte e conservati fuori dalla macchina, il loro ripristino è compreso e la migrazione del vostro server attuale è in omaggio.
Sì. Listmonk ha licenza AGPL-3.0: potete usarlo in azienda senza alcuna licenza da acquistare. Se lo modificate, i vostri utenti a distanza devono poter ottenere il codice sorgente della vostra versione. Restano il costo del server e quello del vostro servizio di invio.
La v6.2.0, ultima versione stabile all'11 novembre 2026. La v7.0.0-beta.2, in evidenza su GitHub, è una beta. In Docker Compose, fissate l'immagine su listmonk/listmonk:v6.2.0: il cambio di versione resta così una vostra decisione, perché un database migrato non si rilegge con una versione più vecchia.
Scaricate il file docker-compose.yml del progetto, cambiate la password del database e il tag dell'immagine, poi lanciate docker compose up -d. L'interfaccia risponde sulla porta 9000, con PostgreSQL accanto. Servitela in HTTPS dietro un reverse proxy e compilate la sua Root URL.
Listmonk invia tramite i server SMTP che configurate. Per un invio massivo, scegliete un servizio di invio specializzato, in STARTTLS sulla porta 587, e pubblicate SPF, DKIM e DMARC sul vostro dominio. La documentazione di Listmonk descrive per esempio i rimbalzi di Amazon SES, SendGrid e Postmark.
Attivate la gestione in Settings, Bounces, poi collegate il webhook del vostro servizio di invio o una casella POP3 dedicata. Le impostazioni di partenza bloccano un indirizzo non appena c'è un rimbalzo definitivo o una segnalazione come spam.
Esportate il database con pg_dump, senza fermare il servizio, e conservate la cartella uploads se le vostre immagini sono sul disco. Il progetto chiede questa esportazione prima di ogni aggiornamento, perché una versione precedente non rilegge un database già migrato.
Ne fornisce gli strumenti: liste con double opt-in, link di cancellazione nei vostri modelli, intestazione List-Unsubscribe, esportazione e cancellazione dei dati da parte dell'iscritto. Il consenso stesso resta da raccogliere da parte vostra, secondo le regole del paese dei vostri destinatari.
Un VPS gestito copre il server: sistema, sicurezza, supervisione e backup. I nostri team seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi. Un intervento nell'applicazione si fattura a ore o a forfait.
Simafri
Parliamo del vostro progetto
Diteci in due parole ciò che vi serve: vi rispondiamo rapidamente.
Grazie! La tua richiesta è stata inviata. Ti risponderemo a breve.
Preferite l'email? Scriveteci a support@simafri.com.