Listmonk kurulumu, bülten yazılımı arayanların çoğu için beklenenden çok daha kısa süren bir iştir: Go ile yazılmış tek bir ikili dosya, bir PostgreSQL veritabanı ve bir yapılandırma dosyası — hepsi bu. PHP yığını yok, onlarca eklenti gereksinimi yok, beş dakikada bir çalışması gereken altı ayrı cron işi yok. Uygulama kendi kuyruğunu, kendi zamanlayıcısını ve kendi arayüzünü içinde taşır.
Bu rehberde Listmonk'u sıfır bir sunucuya kurmayı, PostgreSQL hazırlığını, systemd servisi ve nginx ters vekil yapılandırmasını, gönderim hızını sunucunuzu boğmadan ayarlamayı, dönen mailleri işlemeyi ve sürüm yükseltmelerini güvenli yapmayı anlatıyorum. Ayrıca Listmonk'un nerede parladığını, nerede yetersiz kaldığını da baştan netleştiriyorum — çünkü yanlış aracı iyi kurmak, doğru aracı kötü kurmaktan daha pahalıya patlıyor.
Listmonk Neyi Farklı Yapıyor#
Listmonk'un tasarım felsefesi tek cümlede özetlenebilir: büyük listelere hızlı bülten göndermek. Bunu iyi yapar, ve bunun dışındaki şeyleri kasten yapmaz.
Somut farkları şunlar. Tek ikili dosya olduğu için kurulumu ve taşınması kolaydır; sunucu değiştirmek dosyayı kopyalayıp veritabanını taşımaktan ibarettir. PostgreSQL kullanır ve abone sorgularını doğrudan SQL ifadeleriyle yazmanıza izin verir — bu, karmaşık segmentleri arayüzdeki kısıtlı filtrelerle boğuşmadan kurmanızı sağlar. Kuyruğu ve gönderim eşzamanlılığı kendi içindedir, dolayısıyla cron zincirine bağımlı değildir.
Yapmadıkları da net: görsel sürükle-bırak kampanya akışı yoktur, çok müşterili bir gönderim platformu değildir, açılış sayfası ve CRM özellikleri sunmaz.
| İhtiyaç | Listmonk | Alternatif |
|---|---|---|
| Hızlı, sade bülten gönderimi | En uygun | — |
| SQL ile serbest segmentasyon | Güçlü yanı | — |
| Görsel otomasyon akışları | Yok | Mautic |
| Çok müşterili gönderim servisi | Yok | MailWizz |
| Kendi MTA'nızı işletmek | Kapsam dışı | Postal |
| Düşük bakım yükü | En güçlü tarafı | — |
PostgreSQL ve Sistem Hazırlığı#
Listmonk yalnızca PostgreSQL ile çalışır; MySQL desteği yoktur. Güncel bir PostgreSQL sürümü kurun ve uygulamaya ayrı bir veritabanı ile kullanıcı açın.
sudo apt update
sudo apt install -y postgresql nginx unzip curl
sudo systemctl enable --now postgresql
-- postgres kullanıcısıyla: sudo -u postgres psql
CREATE USER listmonk WITH PASSWORD 'guclu-bir-parola';
CREATE DATABASE listmonk OWNER listmonk;
GRANT ALL PRIVILEGES ON DATABASE listmonk TO listmonk;
Parolayı üretirken tahmin edilebilir bir şey seçmeyin; şifre üretici aracımız işinizi görür. Veritabanı aynı sunucuda duracaksa ssl_mode ayarını disable bırakabilirsiniz; ayrı bir sunucudaysa mutlaka TLS ile bağlanın.
Donanım tarafında Listmonk oldukça mütevazıdır: birkaç yüz bin aboneli bir kurulum 2 vCPU ve 4 GB RAM ile rahat çalışır. Asıl darboğaz uygulama değil, gönderim yaptığınız SMTP sunucusunun saniyede kaç mesaj kabul edebildiğidir.
Kurulum ve Şema Oluşturma#
Uygulamayı ayrı bir dizine kurun ve kendi sistem kullanıcısıyla çalıştırın.
# Sistem kullanıcısı ve dizin
sudo useradd --system --home /opt/listmonk --shell /usr/sbin/nologin listmonk
sudo mkdir -p /opt/listmonk
cd /opt/listmonk
# Sürüme uygun ikili dosyayı indirip açın, ardından:
sudo chmod +x /opt/listmonk/listmonk
# Örnek yapılandırma dosyasını üret
sudo -u listmonk /opt/listmonk/listmonk --new-config
Üretilen config.toml dosyasını düzenleyin:
[app]
# Yalnızca yerel arayüzü dinle; dışarıya nginx üzerinden açacağız
address = "127.0.0.1:9000"
[db]
host = "localhost"
port = 5432
user = "listmonk"
password = "guclu-bir-parola"
database = "listmonk"
ssl_mode = "disable"
max_open = 25
max_idle = 25
address alanını 0.0.0.0:9000 bırakmak, yönetim arayüzünü doğrudan internete açmak demektir. Bunu yapmayın; her zaman 127.0.0.1 dinleyip önüne TLS sonlandıran bir ters vekil koyun.
Şimdi veritabanı şemasını kurun ve uygulamayı bir kez elle başlatıp arayüze girin:
# Şemayı oluştur (yalnızca ilk kurulumda)
sudo -u listmonk /opt/listmonk/listmonk --install
# Elle çalıştırıp deneyin
sudo -u listmonk /opt/listmonk/listmonk
İlk çalıştırmada yönetici hesabınızı oluşturursunuz. Kullandığınız sürüme göre bu ya config.toml içindeki yönetici alanlarıyla ya da tarayıcıda açılan ilk kurulum ekranıyla yapılır; arayüz size hangisini kullandığını söyler. Hesabı oluşturduktan sonra varsayılan parolayı mutlaka değiştirin.
systemd Servisi ve Nginx Ters Vekil#
Uygulamayı kalıcı hale getirmek için bir servis birimi yazın:
# /etc/systemd/system/listmonk.service
[Unit]
Description=Listmonk bulten sunucusu
After=network.target postgresql.service
[Service]
Type=simple
User=listmonk
Group=listmonk
WorkingDirectory=/opt/listmonk
ExecStart=/opt/listmonk/listmonk --config /opt/listmonk/config.toml
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
ProtectSystem=full
PrivateTmp=true
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now listmonk
sudo systemctl status listmonk --no-pager
Nginx tarafında ters vekil ve TLS:
server {
listen 443 ssl http2;
server_name bulten.firmaniz.com;
ssl_certificate /etc/letsencrypt/live/bulten.firmaniz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/bulten.firmaniz.com/privkey.pem;
client_max_body_size 64M;
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;
proxy_read_timeout 300s;
}
}
client_max_body_size değeri, büyük CSV içe aktarmalarında işinize yarar. proxy_read_timeout ise uzun süren içe aktarma ve sorgu işlemlerinin yarıda kesilmesini önler.
SMTP Ayarları ve Gönderim Hızını Doğru Kurmak#
Gönderim ayarları arayüzde Settings → SMTP altındadır. Listmonk birden fazla SMTP bloğu tanımlamanıza izin verir ve yükü aralarında dağıtır — ama tek bir sunucuyla başlamanızı öneririm.
| Ayar | Önerilen başlangıç | Açıklama |
|---|---|---|
| Host | mail.firmaniz.com | rDNS'i doğru olmalı |
| Port | 587 | STARTTLS |
| TLS | STARTTLS | 465 kullanacaksanız SSL |
| HELO hostname | mail.firmaniz.com | Boş bırakmayın |
| Max connections | 5 | Sunucunuza göre artırın |
| Message rate | Düşük başlatın | Saniyedeki mesaj tavanı |
| Retries | 2 | Geçici hatalar için |
Buradaki en kritik iki ayar max connections ve message rate. Listmonk hızlı bir gönderici olduğu için varsayılan değerlerle bile kendi posta sunucunuzu boğabilir; sunucu bağlantı sınırına takılır, geçici hatalar birikir ve kampanya yarıda kalır. Yeni bir gönderim IP'siyle başlıyorsanız hızı bilinçli olarak düşük tutun ve birkaç hafta boyunca kademeli artırın.
Alıcı sağlayıcıların çoğu saatlik ve günlük kabul sınırları uygular; bu sınırı aştığınızda kalıcı bir ret değil, 4xx ile başlayan geçici hatalar alırsınız. Listmonk bu mesajları yeniden dener, ama sınır sürekli zorlanıyorsa kuyruk birikir ve kampanya saatlerce sürüncemede kalır. Bu yüzden gönderim hızını belirlerken kendi posta sunucunuzun kapasitesi kadar, en çok gönderim yaptığınız alıcı alan adlarının davranışını da hesaba katın: tek bir sağlayıcıya yoğunlaşan bir liste, toplam hacminiz düşük olsa bile o sağlayıcının sınırına takılabilir. Kampanya sonrası posta sunucusu günlüklerinde geçici hata sayısını saymak, bir sonraki gönderimde hızı artırıp artıramayacağınızı söyleyen en güvenilir ölçüdür.
Ayarları kaydetmeden önce yolu bağımsız olarak sınayın:
swaks --to [email protected] --from [email protected] \
--server mail.firmaniz.com:587 --tls \
--auth-user [email protected] --auth-password 'parola'
Port ve TLS uyumsuzlukları için SMTP test aracı hızlı bir ön kontrol sağlar. Gönderen alan adınızın SPF kaydında teslimatı yapan sunucunun yetkili olduğundan ve DKIM imzasının hizalı olduğundan emin olun; aksi hâlde DKIM doğrulaması başarısız sonucunu alırsınız.
Bounce İşleme ve Liste Bakımı#
Listmonk dönen mailleri iki yoldan öğrenebilir: bir posta kutusunu tarayarak ya da gönderim servisinizin webhook bildirimlerini alarak. Kendi sunucunuzu kullanıyorsanız kutu tarama yolu doğru olanıdır.
Settings → Bounces altında bounce işlemeyi açın, bir POP3 ya da IMAP kutusu tanımlayın ve gönderim yaptığınız mesajların dönüş adresini (Return-Path) o kutuya yönlendirin. Ardından davranış kuralını belirleyin: kaç dönüşten sonra abonenin engelli listesine alınacağı ya da silineceği.
Pratik bir yapılandırma şudur: sert dönüşte doğrudan engelle, yumuşak dönüşte üç denemeden sonra engelle. Bu ayrımın neden bu kadar önemli olduğunu ve dönüş kodlarının nasıl okunacağını mail listesi temizleme ve liste hijyeni yazısında ayrıntılı anlattım.
Listmonk'un asıl kullanışlı tarafı, abone sorgularını doğrudan SQL ile yazabilmenizdir. Örneğin uzun süredir hiç etkileşim vermemiş aboneleri bir segmentte toplamak için:
-- Aboneler sayfasındaki gelişmiş sorgu kutusuna yazılır
subscribers.created_at < NOW() - INTERVAL '12 months'
AND subscribers.status = 'enabled'
Bu esneklik, arayüz filtreleriyle kurulamayacak segmentleri tek satırda kurmanızı sağlar — ama aynı zamanda dikkatli olmanızı gerektirir; yanlış bir koşul, göndermek istemediğiniz bir kitleye gönderim başlatabilir. Kampanyayı başlatmadan önce sorgunun döndürdüğü abone sayısını mutlaka kontrol edin.
Yükseltme, Yedekleme ve Sık Yapılan Hatalar#
Yükseltme sırası her zaman aynıdır: yedek al, servisi durdur, ikili dosyayı değiştir, şema geçişini uygula, servisi başlat.
# 1) Veritabanı yedeği
sudo -u postgres pg_dump listmonk | gzip > /yedek/listmonk-$(date +%F).sql.gz
# 2) Servisi durdur ve yeni ikiliyi yerleştir
sudo systemctl stop listmonk
sudo cp /opt/listmonk/listmonk /opt/listmonk/listmonk.onceki
# 3) Şema geçişini uygula
sudo -u listmonk /opt/listmonk/listmonk --upgrade
# 4) Servisi başlat
sudo systemctl start listmonk
En sık yapılan hatalar şunlar. Birincisi, uygulamayı 0.0.0.0 üzerinde dinletip doğrudan internete açmak: yönetim arayüzü TLS'siz ve korumasız kalır. İkincisi, yükseltmeden önce --upgrade çalıştırmayı unutmak; yeni ikili eski şemayla başlamaz ve servis hata vererek durur.
Üçüncüsü, gönderim hızını varsayılanda bırakmak: Listmonk kendi posta sunucunuzu kolayca boğar ve geçici hatalar kampanyayı yarıda bırakır. Dördüncüsü, bounce işlemeyi hiç açmamak: ölü adresler listede birikir ve dönüş oranınız her kampanyada biraz daha yükselir.
Beşincisi, veritabanı yedeği almadan sürüm atlamak. Altıncısı ise SQL segment sorgusunu test etmeden kampanya başlatmaktır; yanlış bir koşulla yanlış kitleye gönderim yaptığınızda geri alma imkânı yoktur.
Sıkça Sorulan Sorular#
Listmonk ücretsiz mi#
Evet, Listmonk açık kaynaklıdır ve yazılım için ücret ödemezsiniz. Maliyetiniz sunucu, gönderim altyapısı ve bakım zamanınızdır. Diğer açık kaynak seçeneklere göre bakım yükü belirgin biçimde düşüktür; tek ikili dosya ve tek veritabanı olduğu için güncelleme ve taşıma işlemleri de basittir.
Listmonk MySQL ile çalışır mı#
Hayır, yalnızca PostgreSQL destekler ve bu bilinçli bir tasarım tercihidir. Uygulama, PostgreSQL'e özgü sorgu yeteneklerini abone segmentasyonunda doğrudan kullanır. Elinizde yalnızca MySQL varsa Listmonk için ayrı bir PostgreSQL örneği kurmanız gerekir; aynı sunucuda ikisini birlikte çalıştırmak sorun çıkarmaz.
Listmonk cron gerektirir mi#
Hayır. Kampanya zamanlaması, kuyruk işleme ve gönderim eşzamanlılığı uygulamanın kendi içindedir; harici bir cron zincirine ihtiyaç duymaz. Bu, PHP tabanlı alternatiflere göre en büyük pratik avantajlarından biridir. Yalnızca veritabanı yedeği gibi işletim görevleri için kendi cron işlerinizi kurmanız yeterlidir.
Kaç aboneye kadar ölçeklenir#
Uygulama tarafında birkaç yüz bin aboneli listeler mütevazı bir sunucuda sorunsuz çalışır. Gerçek sınır neredeyse her zaman gönderim tarafındadır: posta sunucunuzun saniyede kaç mesaj kabul edebildiği ve alıcı sağlayıcıların uyguladığı hız sınırları belirleyicidir. Ölçek büyüdükçe veritabanı belleğini artırmanız ve gönderimi birden fazla SMTP bloğuna dağıtmanız gerekebilir.
Gönderim çok yavaş, nasıl hızlandırırım#
Önce darboğazın nerede olduğunu belirleyin. Posta sunucunuzun günlüklerinde geçici hata veya bağlantı reddi görüyorsanız sorun hızın fazla olmasıdır, az olması değil. Sunucu rahatsa max connections ve message rate değerlerini kademeli artırın. Yeni bir IP kullanıyorsanız hızı zorlamayın; itibar oturmadan yapılan hacim artışı teslimatı kalıcı biçimde bozar.
Listmonk yerine ne kullanmalıyım#
Davranışa dayalı otomasyon akışlarına, açılış sayfalarına ve form yönetimine ihtiyacınız varsa Mautic daha uygundur. Birden çok müşteriye kota bazlı gönderim hizmeti veriyorsanız MailWizz'in yapısı daha oturur. Sorununuz kampanya yönetimi değil de gönderimin kendisiyse, yani kendi MTA'nızı işletmek istiyorsanız, Postal bu araçlarla birlikte çalışan tamamlayıcı bir katmandır.
Kapanış#
Listmonk, "sade bülten sistemi" ihtiyacına doğrudan cevap veren ve bakım yükü en düşük seçeneklerden biri. Aklınızda kalması gereken dört alışkanlık şu: uygulamayı yalnızca yerel arayüzde dinletip önüne TLS sonlandıran bir ters vekil koyun, gönderim hızını düşük başlatıp posta sunucunuzun günlüklerine bakarak artırın, bounce işlemeyi ilk kampanyadan önce açın, ve her sürüm yükseltmesinde önce veritabanı yedeği alıp --upgrade adımını atlamayın. SQL segmentlerini de kampanya başlatmadan önce mutlaka sayarak doğrulayın.
Uygulama ne kadar iyi kurulursa kurulsun teslimat kalitesi gönderim sunucunuzda belirlenir. Listmonk'u çalıştırmak için root erişimli VDS veya bulut sunucu paketlerimizi, gönderim tarafı için Postfix, DKIM ve TLS yapılandırması kurulu gelen SMTP sunucu paketlerimizi kullanabilirsiniz. Sunucu bakımını üstlenmemizi isterseniz sunucu yönetimi hizmetimiz, kampanya tarafını devretmek isterseniz e-posta pazarlama çözümümüz hazır.