Ubuntu 24.04 پر Listmonk انسٹال کرنے کا مکمل طریقہ
Ubuntu 24.04 پر Listmonk v6.2.0 کو PostgreSQL اور systemd کے ساتھ سیٹ اپ کریں۔ اس گائیڈ میں config.toml کی ترتیب، TLS کنفیگریشن اور SMTP کے ذریعے ای میل ڈیلیوری کے اخراجات شامل ہیں۔
Listmonk پر مبنی سیلف ہوسٹڈ نیوز لیٹر کے لیے درکار لوازمات
Listmonk ایک سیلف ہوسٹڈ نیوز لیٹر اور میلنگ لسٹ مینیجر ہے: اس میں ایک Go بائنری، ایک PostgreSQL ڈیٹا بیس، ایک کنفیگریشن فائل، اور ایک systemd یونٹ شامل ہے۔ ایک چھوٹا VPS اسے آسانی سے چلا سکتا ہے، کیونکہ Listmonk صرف سبسکرائبرز کو اسٹور کرتا ہے اور مہمات کو قطار میں لگاتا ہے، لیکن خود میل ڈیلیور نہیں کرتا۔ یہ ہر پیغام کو ایک SMTP (Simple Mail Transfer Protocol) سرور کے حوالے کر دیتا ہے، لہذا آپ کی ڈیلیوری ریٹ کا انحصار اس سرور کی ساکھ پر ہوتا ہے، نہ کہ اس سافٹ ویئر پر۔
یہ گائیڈ Ubuntu 24.04 پر Listmonk v6.2.0 انسٹال کرتی ہے، جو جولائی 2026 تک کا موجودہ ریلیز ہے۔ آپ کو ایک عوامی IP ایڈریس والے VPS، ایک ڈومین نام جس پر آپ کا کنٹرول ہو، اور PostgreSQL 12 یا اس سے نیا ورژن درکار ہے۔ انسٹالیشن میں تقریباً 1 گھنٹہ لگتا ہے۔ ای میل بھیجنے کی ساکھ (sending reputation) بنانے میں ہفتے لگتے ہیں، اور اس حصے کا احاطہ آخر میں کیا گیا ہے۔
PostgreSQL انسٹال کریں اور ڈیٹا بیس بنائیں
Ubuntu 24.04 اپنے ریپوزٹری میں PostgreSQL 16 فراہم کرتا ہے، جو Listmonk کی ضرورت سے کہیں زیادہ جدید ہے۔
sudo apt update
sudo apt install -y postgresql curl
sudo systemctl enable --now postgresqlایک ہی psql سیشن میں رول اور ڈیٹا بیس بنائیں۔ -v ON_ERROR_STOP=1 کی وجہ سے psql پہلی ناکام سٹیٹمنٹ پر ہی بند ہو جاتا ہے، تاکہ کسی ٹائپو (typo) کی وجہ سے آپ کا سیٹ اپ ادھورا نہ رہ جائے جو بظاہر مکمل لگے۔
sudo -u postgres psql -v ON_ERROR_STOP=1 <<'SQL'
CREATE USER listmonk WITH PASSWORD 'pick-a-long-random-password';
CREATE DATABASE listmonk OWNER listmonk;
SQLOWNER listmonk محض دکھاوے کے لیے نہیں ہے۔ اسکیما انسٹالیشن ٹیبلز، ٹائپس، انڈیکسز اور فنکشنز بناتی ہے، اس لیے رول کا ڈیٹا بیس کا مالک ہونا ضروری ہے۔ اگر آپ Listmonk کو کسی ایسے ڈیٹا بیس کی طرف اشارہ کریں گے جس کا مالک کوئی اور رول ہو، تو انسٹالیشن permission denied کے ساتھ رک جائے گی، حالانکہ آپ GRANT CONNECT چلا چکے ہوں گے۔
مزید آگے بڑھنے سے پہلے تصدیق کریں کہ ڈیٹا بیس موجود ہے۔
sudo -u postgres psql -tAc "SELECT datname FROM pg_database WHERE datname='listmonk';"یہ listmonk پرنٹ کرتا ہے۔ خالی لائن کا مطلب ہے کہ CREATE سٹیٹمنٹ کبھی نہیں چلی، لہذا psql آؤٹ پٹ کو دوبارہ پڑھیں۔
Listmonk بائنری کو انسٹال کریں
Listmonk ہر آرکیٹیکچر کے لیے ایک سٹیٹک بائنری جاری کرتا ہے۔ پہلے اپنے سسٹم کا آرکیٹیکچر چیک کریں، کیونکہ ARM VPS پر amd64 بائنری ایک ایسی فائل ہے جسے کرنل چلانے سے انکار کر دے گا۔
dpkg --print-architecture
cd /tmp
curl -fsSLO https://github.com/knadh/listmonk/releases/download/v6.2.0/listmonk_6.2.0_linux_amd64.tar.gz
tar -xzf listmonk_6.2.0_linux_amd64.tar.gz
sudo install -m 755 listmonk /usr/bin/listmonk
listmonk --versionARM VPS پر فائل کے نام میں amd64 کی جگہ arm64 استعمال کریں۔ listmonk --version ورژن سٹرنگ کو پرنٹ کرنا اس بات کا پہلا ثبوت ہے کہ بائنری مشین کے ساتھ مطابقت رکھتی ہے۔
config.toml تیار کریں اور اسے محفوظ بنائیں
--new-config، config.toml کو موجودہ ورکنگ ڈائریکٹری میں لکھتا ہے۔ یہی وجہ ہے کہ cd، sh -c کے اندر موجود ہے، نہ کہ sudo سے پہلے۔
sudo install -d -m 750 /etc/listmonk
sudo sh -c 'cd /etc/listmonk && listmonk --new-config'تیار کردہ فائل مختصر ہے۔ [app] کے تحت، address = "localhost:9000" ایچ ٹی ٹی پی سرور کو صرف لوپ بیک (loopback) تک محدود کرتا ہے، لہذا ایڈمن پینل انٹرنیٹ سے قابل رسائی نہیں ہوتا جب تک کہ آپ اس کے سامنے ریورس پراکسی نہ لگا دیں۔ اس لائن کو تبدیل نہ کریں۔ [db] کے تحت آپ کو host = "localhost"، port = 5432، user = "listmonk"، database = "listmonk" اور ssl_mode = "disable" ملتے ہیں۔ یہ ڈیفالٹس آپ کے بنائے ہوئے ڈیٹا بیس سے پہلے ہی مطابقت رکھتے ہیں، لہذا واحد لائن جسے آپ کو تبدیل کرنا ہے وہ پاس ورڈ ہے۔
ssl_mode = "disable" اس وقت درست ہے جب Postgres اسی مشین پر لوپ بیک پر لسن (listen) کر رہا ہو، کیونکہ یہ ٹریفک مشین سے باہر نہیں جاتی۔ اگر ڈیٹا بیس کو کسی دوسرے ہوسٹ پر منتقل کریں تو اسے require پر سیٹ کریں، ورنہ پاس ورڈ نیٹ ورک پر کلیئر ٹیکسٹ (cleartext) میں جائے گا۔
[db] کے تحت پاس ورڈ لائن کو ایڈٹ کریں تاکہ وہ رول (role) سے مطابقت رکھے، پھر سروس اکاؤنٹ بنائیں اور فائل کو دیگر تمام لاگ انز سے دور کر دیں۔
sudo useradd --system --home-dir /var/lib/listmonk --create-home --shell /usr/sbin/nologin listmonk
sudo chown -R root:listmonk /etc/listmonk
sudo chmod 640 /etc/listmonk/config.tomlاب سروس اکاؤنٹ فائل کو پڑھ سکتا ہے اور کوئی دوسرا صارف ایسا نہیں کر سکتا۔
sudo -u listmonk cat /etc/listmonk/config.toml > /dev/null && echo readable
stat -c '%U:%G %a' /etc/listmonk/config.tomlپہلی کمانڈ readable پرنٹ کرتی ہے۔ دوسری کمانڈ root:listmonk 640 پرنٹ کرتی ہے۔ کوئی بھی دوسرا غیر مراعات یافتہ اکاؤنٹ جو وہی cat استعمال کرنے کی کوشش کرے گا اسے Permission denied ملے گا، اور یہی مقصد ہے: یہ فائل آپ کے ڈیٹا بیس کا پاس ورڈ کلیئر ٹیکسٹ میں رکھتی ہے، اور سرور پر عام طور پر ایک سے زیادہ لاگ ان ہوتے ہیں۔ یہی منطق ہر اس سروس پر لاگو ہوتی ہے جسے آپ چلاتے ہیں، لہذا کم سے کم مراعات والے سروس صارفین کو ایک بار پڑھیں اور اسے ہر جگہ لاگو کریں۔
--install کے ساتھ اسکیما (schema) بنائیں
--install ٹیبلز بناتا ہے اور ڈیفالٹ سیٹنگز کو سیڈ (seed) کرتا ہے۔ پہلے ایڈمن لاگ ان کو انوائرمنٹ ویری ایبلز کے ساتھ سیٹ کریں، تاکہ پینل تک رسائی سے پہلے ہی اکاؤنٹ موجود ہو۔
sudo -u listmonk env LISTMONK_ADMIN_USER=admin \
LISTMONK_ADMIN_PASSWORD='another-long-random-password' \
listmonk --config /etc/listmonk/config.toml --install --yes--yes تصدیقی پرامپٹ کا جواب دیتا ہے۔ اسے خودکار بنانے سے پہلے ایک بار پرامپٹ کو پڑھ لیں، کیونکہ --install پہلی بار انسٹال کرنے والا ٹول ہے اور یہ موجودہ Listmonk اسکیما کو ختم کر دیتا ہے۔ لائیو ڈیٹا بیس پر اسے دوسری بار چلانے سے آپ کے سبسکرائبرز ضائع ہو جائیں گے۔ کسی بھی ایسی اسکرپٹ میں جو دو بار چل سکتی ہو، --install --idempotent --yes استعمال کریں، جو ٹیبلز پہلے سے موجود ہونے کی صورت میں کچھ نہیں کرتا۔ نئے ریلیز میں آنے والی اسکیما تبدیلیاں --upgrade کے ساتھ لاگو کی جاتی ہیں، کبھی بھی --install کے ساتھ نہیں۔
نتیجے کو براؤزر کے بجائے ڈیٹا بیس کی جانب سے چیک کریں۔
sudo -u postgres psql -d listmonk -c '\dt'
sudo -u postgres psql -d listmonk -tAc "SELECT username FROM users;"پہلی کمانڈ Listmonk ٹیبلز کی فہرست دکھاتی ہے، جن میں subscribers، lists، campaigns، templates اور bounces شامل ہیں۔ دوسری کمانڈ admin پرنٹ کرتی ہے۔ دوسرے سے خالی نتیجہ ملنے کا مطلب ہے کہ انوائرمنٹ ویری ایبلز پروسیس تک نہیں پہنچے، لہذا پینل آپ سے براؤزر میں پہلا صارف بنانے کے لیے کہے گا۔
Listmonk کو systemd کے تحت چلانا
/etc/systemd/system/listmonk.service لکھیں۔
[Unit]
Description=Listmonk newsletter and mailing list manager
After=network-online.target postgresql.service
Wants=network-online.target
[Service]
Type=simple
User=listmonk
Group=listmonk
WorkingDirectory=/var/lib/listmonk
ExecStart=/usr/bin/listmonk --config /etc/listmonk/config.toml
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.targetWorkingDirectory اہم ہے کیونکہ Listmonk رشتہ دار راستوں (relative paths) کو، بشمول فائل سسٹم میڈیا اپ لوڈ پاتھ، اسی کے مطابق حل کرتا ہے۔ After=postgresql.service صرف شروع ہونے کی ترتیب طے کرتا ہے، یہ اس بات کا انتظار نہیں کرتا کہ Postgres کنکشن قبول کرنے کے لیے تیار ہے یا نہیں، لہذا Restart=on-failure اس صورتحال کو سنبھالتا ہے جہاں Listmonk بہت جلدی شروع ہو جائے اور کنیکٹ نہ ہو سکے۔
sudo systemctl daemon-reload
sudo systemctl enable --now listmonk
ss -ltnp | grep 9000
curl -sI http://127.0.0.1:9000/ss کو 127.0.0.1:9000 کو LISTEN حالت میں دکھانا چاہیے۔ curl کا کوئی بھی HTTP اسٹیٹس لائن واپس کرنا اس بات کا ثبوت ہے کہ سرور جواب دے رہا ہے۔ curl کا Connection refused کے ساتھ ناکام ہونا اس بات کی نشاندہی کرتا ہے کہ عمل (process) اسٹارٹ اپ کے دوران ختم ہو گیا، اور journalctl -u listmonk -n 50 --no-pager اس کی وجہ بتائے گا۔ نوٹ کریں کہ enable --now وہ حصہ ہے جو ریبوٹ کے بعد بھی برقرار رہتا ہے: ہاتھ سے شروع کیا گیا عمل اگلی kernel اپ گریڈ کے بعد ختم ہو جاتا ہے۔
nginx اور TLS کو سامنے لانا
Listmonk لوپ بیک (loopback) پر سادہ HTTP استعمال کرتا ہے، اس لیے nginx TLS (ٹرانسپورٹ لیئر سیکیورٹی) کو ٹرمینیٹ کرتا ہے اور درخواست کو آگے بھیجتا ہے۔
server {
listen 443 ssl;
server_name lists.example.com;
client_max_body_size 25m;
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;
}
}client_max_body_size کو بڑھانا ضروری ہے کیونکہ سبسکرائبر امپورٹس اور میڈیا اپ لوڈز فائل پوسٹس ہوتے ہیں، اور nginx بائی ڈیفالٹ 1 MB سے بڑی کسی بھی چیز کو 413 Request Entity Too Large کے ساتھ مسترد کر دیتا ہے۔ سرٹیفکیٹ کو certbot کے ساتھ جاری کریں، جو آپ کے لیے listen 443 ssl لائنیں اور پورٹ 80 سے ری ڈائریکٹ بھی لکھ دیتا ہے: اس کے مراحل nginx کے لیے Let's Encrypt سرٹیفکیٹ گائیڈ میں موجود ہیں۔ پورٹ 80 اور 443 کو کھولیں، اور 9000 کو بند رہنے دیں، کیونکہ پراکسی اس تک لوپ بیک کے ذریعے پہنچتی ہے۔ اگر فائر وال ابھی تک غیر تبدیل شدہ ہے، تو ufw فائر وال کی بنیادی باتیں سے آغاز کریں۔
پھر ایڈمن پینل کھولیں اور Settings کے تحت روٹ URL کو https://lists.example.com پر سیٹ کریں۔ ایک تازہ انسٹال میں http://localhost:9000 موجود ہوتا ہے، اور Listmonk اس ویلیو کو ہر اس ان سبسکرائب لنک اور میڈیا URL میں لکھتا ہے جسے وہ ای میل میں شامل کرتا ہے۔ اگر آپ اسے تبدیل کرنے سے پہلے کوئی مہم (campaign) بھیجتے ہیں تو ہر وصول کنندہ کو ایسے لنکس ملیں گے جو ان کی اپنی مشین کی طرف اشارہ کر رہے ہوں گے۔ وہ قاری کے لیے ناکام ہو جائیں گے، اور اسپیم فلٹر کے نزدیک وہ ایسے بھیجنے والے کی طرح نظر آئیں گے جو اپنا ڈومین کنفیگر نہیں کر سکتا۔
SMTP کو مربوط کرنا، جو config.toml میں موجود نہیں ہے
config.toml میں SMTP سیکشن تلاش کریں، آپ کو وہاں کچھ نہیں ملے گا۔ میل کی ترتیبات ڈیٹا بیس میں، settings ٹیبل کے اندر موجود ہوتی ہیں، اور آپ انہیں ایڈمن پینل میں Settings اور SMTP کے تحت تبدیل کرتے ہیں۔ یہی وجہ ہے کہ تیار کردہ فائل مختصر رہتی ہے، اور اسی وجہ سے SMTP میں تبدیلی کے لیے کسی ری اسٹارٹ کی ضرورت نہیں ہوتی۔
خود SMTP سرور کے لیے دو ایماندارانہ آپشنز موجود ہیں۔ اپنا سرور چلائیں، جس میں ساکھ کی مکمل ذمہ داری آپ پر ہوتی ہے اور یہ بذات خود ایک بڑا پروجیکٹ ہے: Mailcow کے ساتھ اپنا میل سرور چلانا اس میں شامل تفصیلات کا احاطہ کرتا ہے۔ یا پھر Listmonk کو کسی ٹرانزیکشنل ریلے (transactional relay) کی طرف پوائنٹ کریں اور IP ساکھ کی ذمہ داری کسی اور پر چھوڑ دیں۔
دونوں صورتوں میں، STARTTLS کے ساتھ port 587، یا implicit TLS کے ساتھ port 465 استعمال کریں۔ آؤٹ باؤنڈ port 25 پر انحصار نہ کریں۔ زیادہ تر VPS فراہم کنندگان نئے اکاؤنٹس پر اسے بائی ڈیفالٹ بلاک رکھتے ہیں، اور بلاک شدہ port 25 بالکل ہینگ کنکشن کی طرح دکھائی دیتی ہے، کیونکہ پیکٹس کو مسترد کرنے کے بجائے ڈراپ کر دیا جاتا ہے، اس لیے کلائنٹ فوری ناکامی کے بجائے ٹائم آؤٹ کا انتظار کرتا ہے۔
اس پر بھروسہ کرنے سے پہلے اسے ٹیسٹ کریں۔ ایک لسٹ بنائیں، بطور سبسکرائبر اپنا ایڈریس شامل کریں، اور ایک وصول کنندہ کے لیے مہم (campaign) بھیجیں۔ موصول شدہ پیغام کھولیں اور مکمل ہیڈرز پڑھیں۔ وصول کرنے والی سائیڈ کی طرف سے شامل کردہ Authentication-Results ہیڈر آپ کو بتاتا ہے کہ آیا SPF اور DKIM پاس ہوئے یا نہیں۔
Deliverability ہی اصل کام ہے
Listmonk پیغام تیار کرتا ہے، لسٹ کو ٹریک کرتا ہے، اور میل کو آگے بھیج دیتا ہے۔ یہ فیصلہ کہ آیا وہ میل ان باکس تک پہنچے گی یا نہیں، مکمل طور پر وصول کنندہ فراہم کنندہ (receiving provider) کرتا ہے، جو بھیجنے والے کے IP ایڈریس اور ڈومین کا استعمال کرتا ہے۔ ایک نئے VPS IP کی کوئی تاریخ (history) نہیں ہوتی، اور ہر بڑا میل باکس فراہم کنندہ کسی بھی تاریخ کے نہ ہونے کو قدرے مشکوک سمجھتا ہے۔
چار چیزیں لازمی ہیں:
- ایک SPF (sender policy framework) TXT ریکارڈ جو اس ہوسٹ کا نام بتائے جسے آپ کے ڈومین کی جانب سے میل بھیجنے کی اجازت ہے۔
- ایک DKIM (domainkeys identified mail) کی (key) جو TXT ریکارڈ کے طور پر شائع کی گئی ہو، جس میں سائن کرنے کا عمل Listmonk کے بجائے میل سرور انجام دے۔
- ایک DMARC (domain based message authentication, reporting and conformance) ریکارڈ، جو وصول کنندگان کو بتاتا ہے کہ جب پہلے دو ناکام ہو جائیں تو کیا کرنا ہے۔
- ایک باؤنس میل باکس جسے Listmonk پڑھتا ہے، تاکہ جو پتے میل مسترد کر دیں وہ لسٹ سے خارج ہو جائیں اور انہیں بار بار بھیجنے کی کوشش نہ کی جائے۔
پھر شروع میں آہستہ میل بھیجیں۔ ایک ایسا ڈومین جس نے کبھی میل نہیں بھیجی اور اچانک ایک گھنٹے میں 10000 پیغامات بھیج دے، وہ بالکل ایک compromised اکاؤنٹ جیسا لگتا ہے، اس لیے اسے اسی طرح فلٹر کر دیا جاتا ہے۔ اپنے سب سے زیادہ متحرک سبسکرائبرز سے شروعات کریں اور دنوں کے دوران حجم میں اضافہ کریں۔
ہر ٹیمپلیٹ میں ایک فعال ان سبسکرائب لنک کا ہونا بھی ضروری ہے۔ Listmonk ٹیمپلیٹ میں یہ {{ UnsubscribeURL }} ہے، اور مہم کا مواد وہاں آتا ہے جہاں {{ template "content" . }} موجود ہو، جس کا ہر ٹیمپلیٹ میں بالکل ایک بار ظاہر ہونا ضروری ہے۔ بغیر ان سبسکرائب لنک والی مہم ان سبسکرائب کے بجائے اسپیم کی شکایات کا باعث بنتی ہے، اور شکایات اس بھیجنے کی ساکھ (sending reputation) کو کھونے کا تیز ترین طریقہ ہیں جسے آپ نے ہفتوں کی محنت سے بنایا ہے۔
بیک اپ، اور بحالی کے لیے درکار ضروریات
سرور سے دو چیزوں کا باہر نکلنا لازمی ہے: ڈیٹا بیس ڈمپ اور config.toml۔ اگر آپ مہمات (campaigns) میں تصاویر اپ لوڈ کرتے ہیں تو میڈیا ڈائریکٹری کو بھی شامل کریں۔
sudo -u postgres pg_dump -Fc listmonk > listmonk-$(date +%F).dumpاس ڈمپ میں سبسکرائبرز، مہمات، ٹیمپلیٹس اور ہر سیٹنگ موجود ہوتی ہے، بشمول SMTP اسناد، لہذا اسے انکرپٹ کریں اور اس سرور سے باہر رکھیں۔ اس کی شیڈولنگ ایک حل شدہ مسئلہ ہے: encrypted restic backups to remote storage ملاحظہ کریں۔ config.toml چند لائنوں پر مشتمل ہے لیکن اس میں ڈیٹا بیس کا پاس ورڈ ہوتا ہے، لہذا اس کے ساتھ بھی ویسا ہی برتاؤ کریں۔
اپ گریڈز ایک خاص ترتیب کی پیروی کرتے ہیں۔ سروس کو روکیں، ڈمپ لیں، /usr/bin میں بائنری کو تبدیل کریں، listmonk --config /etc/listmonk/config.toml --upgrade چلائیں، اور پھر سروس کو شروع کریں۔ اسکیما مائیگریشنز صرف آگے کی طرف چلتی ہیں، لہذا وہ ڈمپ ہی آپ کی واپسی کا واحد راستہ ہے۔
Listmonk شروع ہونے میں ناکام کیوں ہوتا ہے؟
سب سے پہلے journalctl -u listmonk -n 50 --no-pager کے ساتھ جرنل پڑھیں۔ تقریباً ہر اسٹارٹ اپ کی ناکامی [db] بلاک میں ایک لائن پر مشتمل ہوتی ہے۔
pq: password authentication failed for user "listmonk" کا مطلب ہے کہ [db] میں موجود پاس ورڈ Postgres رول سے میل نہیں کھاتا۔ pq کا سابقہ (prefix) یہ ظاہر کرتا ہے کہ Postgres ڈرائیور سرور کی طرف سے مسترد ہونے کی اطلاع دے رہا ہے، لہذا کنفیگریشن درست طریقے سے پڑھی گئی تھی لیکن اسناد غلط تھیں۔ sudo -u postgres psql -c "ALTER USER listmonk WITH PASSWORD 'new-password';" کے ساتھ رول کو ری سیٹ کریں اور فائل میں وہی ایک جیسی اسٹرنگ درج کریں۔
pq: database "listmonk" does not exist کا مطلب ہے کہ [db] میں موجود database ویلیو کسی حقیقی ڈیٹا بیس کا نام نہیں ہے۔ sudo -u postgres psql -l سرور پر موجود اصل ڈیٹا بیسز کی فہرست دکھاتا ہے، جس میں وہ ہجے بھی شامل ہیں جو آپ نے غلطی سے استعمال کیے تھے۔
--install کے دوران permission denied کا مطلب ہے کہ رول کنیکٹ تو ہو سکتا ہے لیکن وہ ڈیٹا بیس کا مالک نہیں ہے، اس لیے وہ اس میں ٹیبلز نہیں بنا سکتا۔ اسے sudo -u postgres psql -c "ALTER DATABASE listmonk OWNER TO listmonk;" کے ساتھ درست کریں اور انسٹالیشن دوبارہ چلائیں۔
سروس کبھی شروع نہیں ہوتی اور جرنل کنفیگ فائل کا نام بتاتا ہے۔ listmonk کے طور پر چلنے والا عمل (process) اس config.toml کو نہیں کھول سکتا جسے root:root کے طور پر چھوڑ دیا گیا ہو اور اس کا موڈ 600 ہو۔ stat -c '%U:%G %a' /etc/listmonk/config.toml کو root:listmonk 640 پرنٹ کرنا چاہیے، اور اس کے اوپر والی ڈائریکٹری root:listmonk 750 ہونی چاہیے۔
پینل کام کرتا ہے لیکن کوئی میل موصول نہیں ہوتی۔ یہ اسٹارٹ اپ کا مسئلہ نہیں ہے۔ پہلے Settings اور SMTP کو چیک کریں، پھر ایڈمن پینل میں مہم (campaign) کا اپنا لاگ دیکھیں، جو ہر کوشش کے لیے میل سرور کی طرف سے واپس بھیجی گئی غلطی کو ریکارڈ کرتا ہے۔
FAQ
کیا Listmonk استعمال کرنے کے لیے مجھے اپنے میل سرور کی ضرورت ہے؟
نہیں۔ Listmonk ایک میل سرور نہیں ہے۔ اسے ایسے سرور کے لیے SMTP اسناد (credentials) درکار ہوتی ہیں جو آپ کی میل کو قبول کر کے اسے ڈیلیور کر سکے، جو کہ ایک ٹرانزیکشنل ریلے یا آپ کا اپنا چلایا ہوا میل سرور ہو سکتا ہے۔ ان اسناد کو ایڈمن پینل میں Settings اور SMTP کے تحت سیٹ کریں، نہ کہ config.toml میں، کیونکہ میل کی ترتیبات ڈیٹا بیس میں محفوظ ہوتی ہیں۔ STARTTLS کے ساتھ پورٹ 587 یا implicit TLS کے ساتھ پورٹ 465 استعمال کریں، کیونکہ زیادہ تر VPS فراہم کنندگان نئے اکاؤنٹس پر آؤٹ باؤنڈ پورٹ 25 کو بلاک کر دیتے ہیں۔
میری مہم (campaign) کے لنکس localhost:9000 کی طرف کیوں اشارہ کر رہے ہیں؟
روٹ URL کی ترتیب ابھی بھی اپنی انسٹالیشن کی ڈیفالٹ ویلیو http://localhost:9000 پر ہے۔ Listmonk مہم بھیجے جانے کے وقت اس ویلیو کو ان سبسکرائب لنکس اور میڈیا URLs میں لکھتا ہے۔ ایڈمن پینل میں Settings کھولیں، روٹ URL کو اپنے حقیقی HTTPS ایڈریس پر سیٹ کریں، اور محفوظ کریں۔ جو پیغامات پہلے ہی ڈیلیور ہو چکے ہیں انہیں درست نہیں کیا جا سکتا، لہذا ایک ٹیسٹ مہم خود کو بھیجیں اور حقیقی لسٹ کو میل کرنے سے پہلے اس میں موجود ان سبسکرائب لنک پر کلک کریں۔
کیا --install کو دوبارہ چلانے سے میرے سبسکرائبرز ختم ہو جائیں گے؟
جی ہاں۔ --install پہلی بار انسٹال کرنے والا ٹول ہے اور یہ موجودہ Listmonk اسکیمہ کو ختم کر دیتا ہے، اور --yes اس پرامپٹ کو ہٹا دیتا ہے جو آپ کو خبردار کرتا۔ کسی بھی ایسی اسکرپٹ میں جو دو بار چل سکتی ہو، --install --idempotent --yes استعمال کریں، جو ٹیبلز کے پہلے سے موجود ہونے کی صورت میں کچھ نہیں کرتا۔ نئی ریلیز میں اسکیمہ کی تبدیلیوں کو لاگو کرنے کے لیے، سروس کو روکیں، pg_dump لیں، پھر --upgrade چلائیں۔
Listmonk یہ کیوں کہتا ہے کہ صارف listmonk کے لیے پاس ورڈ کی تصدیق ناکام ہو گئی؟
/etc/listmonk/config.toml کے [db] بلاک میں موجود پاس ورڈ اسی نام کے Postgres رول سے میل نہیں کھاتا۔ جرنل لائن pq: password authentication failed for user "listmonk" ہے، اور pq وہ Postgres ڈرائیور ہے جو سرور کی جانب سے مسترد کیے جانے کی اطلاع دے رہا ہے، جس کا مطلب ہے کہ کنفیگ فائل مل گئی تھی اور پڑھ لی گئی تھی۔ sudo -u postgres psql -c "ALTER USER listmonk WITH PASSWORD 'new-password';" کے ساتھ رول کا پاس ورڈ ری سیٹ کریں، وہی اسٹرنگ کنفیگ فائل میں لکھیں، پھر sudo systemctl restart listmonk چلائیں۔