Při hostování ve vlastní režii běží Listmonk na VPS, který už platíte. Odesílání stojí tolik, kolik si váš SMTP relay účtuje za tisíc e-mailů. Počet odběratelů ani jedno z těchto čísel nemění. To je ten zásadní rozdíl, díky kterému se vlastní hostování vyplatí, jakmile přerostete bezplatnou úroveň spravované služby.
Listmonk je open-source správce newsletterů napsaný v jazyce Go. Získáte neomezený počet odběratelů, seznamů a kampaní za cenu VPS plus účtu u SMTP relay. Jednu věc je třeba ujasnit ještě dřív, než zadáte první příkaz: Listmonk se stará o všechno kromě samotného odesílání. To, zda váš e-mail dorazí do schránky nebo do spamu, určuje SMTP relay, který nastavíte, a DNS záznamy, které vytvoříte na odesílací doméně.
Co tento návod pokrývá
- Nasazení Listmonk a PostgreSQL pomocí Docker Compose za reverzní proxy Nginx (nebo Caddy) s HTTPS
- Výběr správného SMTP relay podle objemu a rozpočtu (Amazon SES, Postmark, Brevo nebo jiný)
- Nastavení SPF, DKIM a DMARC na odesílací doméně
- Vyhnutí se čtyřem produkčním selháním, která často nehlásí žádnou jasnou chybu
- Odhadovaný čas: 30 minut, pokud máte připravený VPS a doménu
- Mimo rozsah: dripová automatizace, transakční e-maily, nasazení s více instancemi (viz FAQ)
Kdy je Listmonk špatný nástroj
Listmonk je správná odpověď pro konkrétní situaci. Pokud je vaše situace jiná, existuje lepší odpověď.
Objem pod přibližně 10K e-maily měsíčně. Bezplatné úrovně u Brevo nebo Mailchimp mohou v součtu vyjít levněji než VPS plus SMTP relay v tomto měřítku. Vlastní hostování se začne vyplácet, jakmile tuto hranici překročíte. Než cokoliv nasadíte, porovnejte čísla se svým skutečným počtem odběratelů a frekvencí odesílání.
Netechnický tým. Mailchimp a Brevo mají opravdu lepší rozhraní pro lidi, kteří nepracují v terminálu. Listmonk předpokládá, že se někdo v týmu umí přihlásit přes SSH na server, číst logy Dockeru a interpretovat propagaci DNS. Pokud takový člověk neexistuje, jsou spravované služby správná volba.
Potřebujete automatizační workflow. Listmonk odesílá kampaně. Nepodporuje dripové sekvence, e-maily spouštěné chováním ani vizuální editory workflow. Pokud je potřebujete, provozujte Mautic nebo propojte Listmonk s n8n a získejte automatizační vrstvu.
Seznamy odběratelů citlivé z hlediska GDPR. Pokud jsou vaši odběratelé převážně z EU nebo se na váš seznam vztahují pravidla GDPR o umístění dat, provozujte Listmonk v evropském datovém centru. Nabízíme lokality ve Frankfurtu a Londýně, které splňují požadavky na umístění dat v EU.
Co potřebujete, než začnete
Listmonk plus PostgreSQL plus středně velká fronta potřebují na minimum 2 GB RAM. 4 GB je pohodlný produkční cíl.
Hardware. Pro osobní seznam pod 50K e-maily měsíčně stačí VPS s 2 vCPU, 4 GB RAM a 120 GB úložištěm NVMe. Rostoucí seznamy nad 200K měsíčně potřebují 4 vCPU a 8 GB RAM. Toto nastavení Compose provozujeme na 4 GB VPS ve Frankfurtu. Pokud můžete, zvolte lokalitu blízko svým odběratelům. Latence odesílání moc nezáleží, na odezvě administrátorského panelu ano.
Doména. Doména směřovaná na váš VPS přes A záznam. Pro administrátorské rozhraní použijte subdoménu, například mail.example.com. Odesílací doména a administrátorská subdoména mohou být na stejné kořenové doméně.
Účet u SMTP relay. Zatím žádný nevytvářejte. Volba relay je nejzávažnější rozhodnutí v tomto návodu a závisí na vašem objemu. Přeskočte do sekce „Výběr SMTP relay“, vyberte poskytovatele a pak se sem vraťte s SMTP hostem, portem, uživatelským jménem a heslem po ruce.
Software na VPS. Ubuntu 22.04 LTS nebo 24.04 LTS. Docker Engine 24.0 nebo vyšší s pluginem Docker Compose. UFW nebo obdobný firewall s otevřenými porty 22, 80 a 443. SSH přístup jako sudo uživatel bez root práv.
Nasazení Listmonk pomocí Docker Compose

Vytvořte adresář pro nasazení a pak do něj vložte docker-compose.yml soubor se dvěma službami: postgres pro databázi a listmonk pro aplikaci. Obě se při selhání restartují. Listmonk se naváže na 127.0.0.1 takže reverzní proxy je jediné, co se k němu dostane.
Soubor Docker Compose
I'd be happy to help translate, but your message appears to be incomplete. Could you please provide the full text you'd like me to translate to Czech? docker-compose.yml. Ověřte přesné tagy obrazů a názvy proměnných prostředí podle oficiální dokumentace instalace Listmonk. S každým vydáním se aktualizují.
# docker-compose.yml
services:
postgres:
image: postgres:16-alpine
container_name: listmonk-postgres
restart: unless-stopped
environment:
POSTGRES_USER: listmonk
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: listmonk
volumes:
- listmonk-postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U listmonk"]
interval: 10s
timeout: 5s
retries: 6
app:
image: listmonk/listmonk:latest
container_name: listmonk-app
restart: unless-stopped
# Bind to loopback only. The reverse proxy is the public entrypoint.
ports:
- "127.0.0.1:9000:9000"
depends_on:
postgres:
condition: service_healthy
environment:
LISTMONK_app__address: "0.0.0.0:9000"
LISTMONK_db__host: postgres
LISTMONK_db__port: 5432
LISTMONK_db__user: listmonk
LISTMONK_db__password: ${POSTGRES_PASSWORD}
LISTMONK_db__database: listmonk
volumes:
listmonk-postgres:
Vytvořit .env soubor s POSTGRES_PASSWORD= nastaveno na dlouhý náhodný řetězec. Pak spusťte stack a proveďte jednorázovou instalaci databáze:
# Pull images and start the database first
docker compose up -d postgres
# Run the install step (creates schema and the first admin user)
docker compose run --rm app ./listmonk --install --idempotent --yes
# Start the application
docker compose up -d
--install příkaz se zeptá na administrátorský e-mail a heslo. Uložte si je. Ověřte, že oba kontejnery běží:
docker compose ps
Očekávaný výstup: dvě uvedené služby, obě se stavem Up. U řádku postgres by se mělo zobrazit (healthy).
127.0.0.1:9000 navázání je záměrné. Listmonk nemá vestavěný omezovač počtu pokusů o přihlášení ani povolování podle IP. Vystavení portu 9000 do veřejného internetu znamená, že kdokoliv na planetě se může pokusit o přihlášení do vašeho administrátorského rozhraní. Reverzní proxy je to, co zpřístupní toto přihlášení pouze přes HTTPS.
Reverzní proxy Nginx a SSL
Nainstalujte Nginx a Certbot z repozitářů Ubuntu. Vytvořte konfiguraci webu v /etc/nginx/sites-available/listmonk s proxy hlavičkami, které Listmonk potřebuje ke generování správných odkazů v kampaních:
# /etc/nginx/sites-available/listmonk
server {
listen 80;
server_name mail.example.com;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Listmonk streams campaign progress over WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Vytvořte symbolický odkaz do sites-enabled, otestujte konfiguraci, znovu načtěte Nginx a pak vydejte certifikát:
sudo ln -s /etc/nginx/sites-available/listmonk /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d mail.example.com
Certbot přepíše server blok, aby naslouchal na portu 443 s novým certifikátem, a přidá přesměrování z HTTP na HTTPS. Ověřte:
curl -I https://mail.example.com
Očekávaný výstup: HTTP/2 200 s platnou hlavičkou strict-transport-security. Pokud dostanete smyčku přesměrování, zkontrolujte, že je v konfiguraci Nginx výše nastavena hlavička X-Forwarded-Proto Devětkrát z deseti je tou smyčkou právě tato hlavička.
Pokud je Listmonk jediná věc na tomto VPS, použijte raději Caddy. Caddyfile má tři řádky a obstará obnovu certifikátu bez cron úlohy:
mail.example.com {
reverse_proxy 127.0.0.1:9000
}
Oprava hlavičky Message-ID
Ve výchozím nastavení Listmonk používá v odchozí hlavičce Message-ID systémový hostname. Pokud je hostname vašeho VPS localhost nebo cokoliv, co není platný FQDN, Listmonk odesílá Message-ID: <[email protected]>. Spamové filtry u Gmailu a Outlooku to okamžitě označí. Je to zdokumentováno ve vláknu 15410 na Cloudron Foru.
Oprava je jeden řádek v souboru Listmonk config.tomlPro čerstvou instalaci vygenerujte soubor pomocí docker compose run --rm app ./listmonk --new-config. Pak nastavte:
[app]
hostname = "mail.example.com"
Po úpravě restartujte kontejner aplikace:
docker compose restart app
Udělejte to dřív, než odešlete jedinou kampaň. Seznam zamořený localhost.localdomain Message-ID se obnovuje hůř než ten, který začal čistě.
Profesionální tip
Pokud byste se nastavení přes Compose raději vyhnuli, podívejte se na náš one-click Listmonk VPS a nasaďte Listmonk během pár minut jediným kliknutím. Instance přichází předkonfigurovaná s PostgreSQL. Stále musíte nastavit svůj SMTP relay a přidat DNS záznamy. Tyto kroky nejsou volitelné, ať už nasazujete jakkoliv.
Výběr SMTP relay

Veškeré odesílání probíhá přes relay, který nastavíte. To, zda váš e-mail dorazí do schránky nebo do spamu, určuje reputace IP relay, jeho limity rychlosti a zpracování odražených e-mailů.
Zde je funkční srovnání. Ceny a limity bezplatných úrovní se mění. Před rozhodnutím si ověřte každý na oficiální cenové stránce poskytovatele.
| Poskytovatel | Struktura nákladů | Webhooky pro odražené e-maily | Nejlepší pro |
|---|---|---|---|
| Amazon SES | Za e-mail, při objemu velmi nízká | Ano, přes SNS | Cena při objemu; už jste na AWS |
| Postmark | Měsíční základ plus za e-mail | Ano, nativně | Prioritou je doručitelnost; transakční reputace |
| Brevo | Bezplatná úroveň pro nízký objem, placené úrovně výše | Ano | Nízký objem s možností přejít výš |
| Mailgun | Ceny za e-mail | Žádný nativní webhook endpoint; v případě potřeby použijte obecné API pro odražené e-maily. | Známé vývojářům |
To byl jen krátký pohled na každý SMTP relay. Teď si každý projdeme do hloubky.
Amazon SES (doporučený výchozí bod)
SES je nejlevnější varianta při objemu a nejvíce probíraná v komunitě Listmonk. Nastavení má víc kroků než u Postmarku nebo Brevo, ale rozdíl v ceně za e-mail je při jakémkoliv reálném objemu dostatečně velký, aby tu práci ospravedlnil.
Nastavte ho ve třech fázích. Nejprve vytvořte IAM uživatele s politikou AmazonSESFullAccess (nebo přísnější vlastní politikou pouze s ses:SendRawEmail a ses:GetSendQuota). Za druhé ověřte svou odesílací doménu v konzoli SES. SES vás provede DKIM CNAME záznamy, které máte přidat. Za třetí vygenerujte SMTP přihlašovací údaje v panelu SMTP nastavení SES. Nejsou to vaše přístupové klíče AWS; SES vygeneruje samostatné uživatelské jméno a heslo specifické pro SMTP, když kliknete na „Create SMTP credentials“.
V administraci Listmonk pod Settings → SMTP přidejte nový server s:
- Hostitel:
email-smtp.<region>.amazonaws.com(použijte SES region, ve kterém jste doménu ověřili) - Port: 587
- Auth protocol: LOGIN
- TLS: STARTTLS
- Username a password: SMTP přihlašovací údaje, které SES vygeneroval
SES vyžaduje STARTTLS na portu 587. Pokud necháte TLS nastavené na none nebo zvolíte port 465, Listmonk se připojí, SES vrátí 530 Must issue a STARTTLS command first, a test SMTP přihlašovacích údajů v administrátorském panelu může stejně ukázat úspěch. Před spuštěním jakékoliv kampaně odešlete skutečný testovací e-mail do osobní schránky, kterou ovládáte.
Nové účty SES začínají v sandbox režimu. V sandboxu můžete odesílat pouze na ověřené e-mailové adresy, což pro seznam odběratelů není užitečné. Otevřete v konzoli SES tiket podpory a požádejte o produkční přístup. Schválení obvykle trvá jeden pracovní den.
Postmark (alternativa s prioritou na doručitelnost)
Postmark stojí za e-mail víc než SES, ale má nativní podporu webhooků pro odražené e-maily a pověst vysoké míry doručení do schránky díky přísným pravidlům pro odesílatele. Vyplatí se, pokud jsou vaše newslettery zásadní pro byznys nebo nechcete řešit schvalování přechodu ze sandboxu do produkce u SES.
Konfigurace Listmonk má stejnou podobu jako u SES: host, port 587, STARTTLS, přihlašovací údaje z panelu API tokenů serveru Postmark. Ověřte svou odesílací doménu v nastavení podpisu Postmark, přidejte DKIM záznamy, které Postmark vygeneruje, a můžete odesílat.
Postmark zvolte, když na doručitelnosti záleží víc než na ceně za e-mail. SES zvolte, když na objemu záleží víc než na vodění za ruku.
Varování ohledně testu SMTP přihlašovacích údajů. Test připojení v administraci Listmonk vždy hlásí úspěch, dokonce i s neplatnými přihlašovacími údaji. Je to zdokumentováno v několika GitHub issues. Nevěřte mu. Po nastavení jakéhokoliv relay odešlete kampaň jednomu testovacímu odběrateli a potvrďte si přijetí v cílové schránce, než budete odesílat na celý seznam.
Pro hromadné odesílání kampaní se Mailersend vyhněte. Jeho limit 5 e-mailů na připojení produkuje chyby 421 Service not available které Listmonk eviduje jako odeslané, přestože doručení selhalo. Kampaň vypadá v Listmonk úspěšně a bez varování zahodí většinu svých zpráv.
Aby e-mail skutečně dorazil: SPF, DKIM a DMARC

Toto jsou tři DNS záznamy na vaší odesílací doméně, které přijímacím poštovním serverům sdělí, že vaše doména pověřila tento relay odesíláním ve vašem zastoupení. Vynechte kterýkoliv z nich a podstatná část vašich odeslaných e-mailů ve větším měřítku skončí ve spamu, bez ohledu na to, jak čistý je váš relay nebo text. Přidejte je u svého DNS poskytovatele před odesláním první kampaně.
Záznam SPF
SPF autorizuje konkrétní IP nebo odesílací služby k odesílání e-mailů za vaši doménu. Přidejte jediný TXT záznam v kořeni vaší odesílací domény s include pro váš relay. Pro SES vypadá záznam takto:
v=spf1 include:amazonses.com ~all
Pro Postmark nahraďte include hodnotou include:spf.mtasv.net. Vždy si ověřte přesnou hodnotu include v oficiální SPF dokumentaci vašeho relay. Liší se podle poskytovatele a někdy i podle regionu.
Doména může mít jen jeden SPF záznam. Pokud už nějaký máte pro jinou službu (Google Workspace, Microsoft 365), sloučte include do stávajícího záznamu místo přidávání druhého.
DKIM
DKIM připojuje k odchozím e-mailům kryptografický podpis, který přijímací servery ověřují proti veřejnému klíči ve vašem DNS. Váš relay vygeneruje klíčový pár. Veřejný klíč přidáte jako TXT záznam na subdoméně selektoru (například sel1._domainkey.example.com) s přesnou hodnotou, kterou vám relay dá.
Listmonk DKIM podepisování neřeší. Dělá to relay. Žádná DKIM konfigurace specifická pro Listmonk neexistuje. Postupujte podle průvodce nastavením DKIM vašeho relay, přidejte záznamy, které vám dá, a počkejte na propagaci DNS (obvykle do 30 minut, někdy několik hodin).
DMARC
DMARC říká přijímacím serverům, co dělat s e-mailem, který neprojde kontrolami SPF nebo DKIM. Začněte v režimu monitorování s p=none abyste mohli vidět selhání v souhrnných reportech, aniž byste ovlivnili doručitelnost, zatímco si dolaďujete chybná nastavení. Přidejte TXT záznam v _dmarc.example.com:
v=DMARC1; p=none; rua=mailto:[email protected]
Po dvou nebo třech týdnech čistých reportů zpřísněte politiku na p=quarantine or p=reject. Fázi monitorování nepřeskakujte. Překlep ve vašem SPF include v kombinaci s p=reject v první den smaže vaše vlastní legitimní e-maily bez jediného signálu, že se něco pokazilo.
Hlavičku List-Unsubscribe (RFC 8058) generuje Listmonk automaticky. Potvrďte, že je zapnutá pod Settings → General. Gmail a Apple Mail zobrazují tuto hlavičku jako možnost odhlášení jedním kliknutím, což chrání reputaci odesílatele.
Co se v produkci skutečně rozbije
Čtyři selhání, která se neprojeví, dokud neodešlete svou první skutečnou kampaň. Odhalte je dřív než vaši odběratelé.
Problém 1: Míra odražených e-mailů neodpovídá číslu vašeho relay. Listmonk zpracovává odražené e-maily čtením určené e-mailové adresy pro odražené zprávy přes POP3 a mazáním každé zprávy, kterou přečte. To zahrnuje automatické odpovědi z dovolené, doručenky a oznámení o nepřítomnosti, vše klasifikované jako odražené. Váš relay počítá pouze skutečná selhání doručení vrácená poštovními servery příjemců. Pokud SES hlásí 0.6 % a Listmonk hlásí 4 %, tady je ten rozdíl. Oprava spočívá v nastavení webhook callbacků pro odražené e-maily místo POP3. Pro SES použijte SNS k doručování oznámení o odražených e-mailech na webhook endpoint Listmonk. Pro Postmark nasměrujte jeho nativní webhook na stejný endpoint. Webhook odražené e-maily jsou přesné; POP3 odražené e-maily čísla nadhodnocují.
Problém 2: Test SMTP přihlašovacích údajů hlásí úspěch, i když je to špatně. Jak bylo zmíněno v sekci o relay, test připojení vždy hlásí úspěch bez ohledu na platnost přihlašovacích údajů. Nevěřte mu. Po nastavení nebo změně jakéhokoliv SMTP nastavení vždy odešlete skutečný testovací e-mail.
Problém 3: Kampaň se uprostřed odesílání zastaví bez chyby. Listmonk označuje kampaně jako Finished i tehdy, když e-mail obdrželo jen 60 % odběratelů. Zbývající odeslání byla odmítnuta relay nebo přiškrcena na síťové vrstvě VPS a Listmonk ani jedno nehlásí jako chybu na úrovni kampaně (vlákno 13165 na Cloudron Foru). Pokud kampaň vykazuje méně odeslání než odběratelů, otevřete dashboard svého relay pro časové okno odeslání a porovnejte počet přijatých zpráv u relay s počtem u Listmonk. Pravda je u relay.
Problém 4: Nikdo nezálohuje PostgreSQL. Compose volume uchovává data napříč restarty. Nechrání před selháním hostitele, omylem zadaným docker volume rm nebo poškozenými aktualizacemi. Přidejte denní pg_dump:
0 2 * * * docker exec listmonk-postgres pg_dump -U listmonk listmonk > /backups/listmonk-$(date +\%Y\%m\%d).sql
Spusťte ten řádek nejprve jednou ručně. Než budete cron záznamu věřit, ověřte, že výstupní soubor není prázdný. Zálohovací skript, který zapíše soubor o nulové velikosti, aniž by nahlásil chybu, je horší než žádná záloha, protože na zálohování přestanete myslet.
Než cokoliv z toho v produkci nasadíte, odešlete testovací kampaň jednomu odběrateli a potvrďte si přijetí v cílové schránce. Pokud ten jeden e-mail dorazí čistě, dorazí i dalších deset tisíc.
Časté dotazy
Proč jsou míry odražených e-mailů v Listmonk vyšší než to, co hlásí Amazon SES?
Zpracování odražených e-mailů přes POP3 v Listmonk nadhodnocuje počty tím, že čte automatické odpovědi z nepřítomnosti a z dovolené jako odražené. Pro přesné počty nastavte SNS webhook callbacky u SES.
Podporuje Listmonk transakční e-maily?
Listmonk je nástroj na newslettery a hromadné kampaně. Nativně neřeší transakční e-maily (obnovy hesel, potvrzení objednávek, individuálně spouštěné e-maily). Pro transakční e-maily ze stejné odesílací domény nastavte transakční endpoint svého relay samostatně nebo použijte vyhrazený nástroj jako Postal nebo transakční API Postmark vedle Listmonk.
Jak naimportuji své odběratele z Mailchimpu do Listmonk?
Exportujte svůj seznam z Mailchimpu jako CSV přes Audience → Export Audience. V Listmonk přejděte na Subscribers → Import a nahrajte CSV. Při výzvě namapujte sloupce e-mailu a jména. Listmonk přijímá standardní CSV exporty z Mailchimpu, ConvertKit a většiny newsletterových platforem bez převodu formátu.
Co se stane, když se někdo odhlásí z kampaně Listmonk?
Listmonk přidává do každého e-mailu kampaně odhlašovací odkaz ve výchozím nastavení. Když na něj odběratel klikne, je přidán na blokovací seznam a odstraněn ze všech budoucích kampaní. Hlavička List-Unsubscribe (RFC 8058) je zahrnuta automaticky, takže poštovní klienti, kteří podporují odhlášení jedním kliknutím (Gmail, Apple Mail), ji zobrazí nativně. Záznam odběratele zůstává v databázi pro účely auditu, ale žádné další kampaně mu odeslány nebudou.