SSD Nodes Learn 8GB RAM — $66/বছর
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-01

VPS-এ Listmonk দিয়ে স্ব-হোস্টেড নিউজলেটার চালান

Ubuntu 24.04-এ Listmonk v6.2.0, PostgreSQL, config.toml, systemd ও TLS সেটআপ করুন। SMTP সংযোগের পর deliverability-এর খরচ এবং sending reputation তৈরি হতে কয়েক সপ্তাহ কেন লাগে জানুন।

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

Listmonk-এ স্ব-হোস্ট করা নিউজলেটারের যা প্রয়োজন

Listmonk হলো স্ব-হোস্ট করা নিউজলেটার ও মেইলিং-লিস্ট ব্যবস্থাপনা সফটওয়্যার: একটি Go বাইনারি, একটি PostgreSQL ডেটাবেস, একটি কনফিগারেশন ফাইল এবং একটি systemd ইউনিট। একটি ছোট VPS-এ এটি সহজেই চালানো যায়, কারণ Listmonk গ্রাহকদের তথ্য ও প্রচারণার সারি সংরক্ষণ করে, কিন্তু নিজে কখনও ইমেইল পাঠায় না। এটি প্রতিটি বার্তা একটি SMTP (simple mail transfer protocol) সার্ভারে পাঠায়। তাই আপনার ইমেইল পৌঁছানোর হার এই সফটওয়্যারের নয়, ওই সার্ভারের সুনামের ওপর নির্ভর করে।

এই নির্দেশিকায় Ubuntu 24.04-এ Listmonk v6.2.0 ইনস্টল করা হবে। July 2026 অনুযায়ী এটিই বর্তমান release। আপনার একটি public IP address-সহ VPS, আপনার নিয়ন্ত্রণাধীন একটি domain name এবং PostgreSQL 12 বা তার পরের সংস্করণ প্রয়োজন। ইনস্টল করতে প্রায় এক ঘণ্টা সময় লাগে। sending reputation তৈরি হতে কয়েক সপ্তাহ লাগে। এই বিষয়টি নির্দেশিকার শেষের দিকে ব্যাখ্যা করা হয়েছে।

PostgreSQL ইনস্টল করুন এবং ডেটাবেস তৈরি করুন

Ubuntu 24.04-এর নিজস্ব repository-তে PostgreSQL 16 রিলিজ করা হয়েছে, যা Listmonk-এর প্রয়োজনের তুলনায় যথেষ্ট নতুন।

sudo apt update
sudo apt install -y postgresql curl
sudo systemctl enable --now postgresql

একটি psql session-এ role এবং database তৈরি করুন। -v ON_ERROR_STOP=1 প্রথম ব্যর্থ statement-এ psql বন্ধ করে, তাই বানানে ভুল হলেও অর্ধেক সম্পন্ন setup সম্পূর্ণ হয়েছে বলে মনে হবে না।

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;
SQL

OWNER listmonk শুধুই আনুষ্ঠানিকতা নয়। Schema ইনস্টল করার সময় table, type, index এবং function তৈরি হয়। তাই role-টির database-এর মালিক হতে হবে। অন্য role-এর মালিকানাধীন database-এ Listmonk নির্দেশ করলে, GRANT CONNECT চালানোর পরও ইনস্টলেশন permission denied-এ থেমে যায়।

এগিয়ে যাওয়ার আগে database-টি আছে কি না নিশ্চিত করুন।

sudo -u postgres psql -tAc "SELECT datname FROM pg_database WHERE datname='listmonk';"

এতে listmonk দেখা যায়। ফাঁকা লাইন মানে CREATE statement চালানো হয়নি। তাই psql-এর output আবার পড়ুন।

Listmonk বাইনারি ইনস্টল করুন

Listmonk প্রতিটি আর্কিটেকচারের জন্য একটি স্ট্যাটিক বাইনারি প্রকাশ করে। প্রথমে আপনার আর্কিটেকচার পরীক্ষা করুন, কারণ ARM VPS-এ amd64 বাইনারি থাকলে সেটি এমন একটি ফাইল হয় যা kernel চালাতে অস্বীকার করে।

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 --version

ARM VPS-এ ফাইলের নামে amd64-এর পরিবর্তে arm64 ব্যবহার করুন। listmonk --version একটি version string প্রিন্ট হলে সেটিই প্রথম প্রমাণ যে বাইনারিটি মেশিনটির সঙ্গে সামঞ্জস্যপূর্ণ।

config.toml তৈরি করুন এবং এর অ্যাক্সেস সীমিত করুন

--new-config বর্তমান working directory-তে 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" HTTP server-কে শুধু loopback-এ bind করে। তাই reverse proxy সেটআপ না করা পর্যন্ত admin panel ইন্টারনেট থেকে পৌঁছানো যায় না। ওই লাইনটি অপরিবর্তিত রাখুন। [db]-এর অধীনে আপনি host = "localhost", port = 5432, user = "listmonk", database = "listmonk" এবং ssl_mode = "disable" পাবেন। এই default-গুলো আপনার তৈরি করা database-এর সঙ্গে ইতিমধ্যেই মিলে যায়। তাই আপনাকে শুধু password-এর লাইনটি পরিবর্তন করতে হবে।

Postgres একই মেশিনে loopback-এ listen করলে ssl_mode = "disable" সঠিক, কারণ ওই traffic মেশিনের বাইরে যায় না। Database অন্য host-এ সরালে এটি require সেট করুন। অন্যথায় password network-এর মধ্য দিয়ে cleartext হিসেবে যাবে।

[db]-এর অধীনে password-এর লাইনটি edit করে role-এর password-এর সঙ্গে মিলিয়ে নিন। এরপর service account তৈরি করুন এবং অন্য সব login-এর কাছ থেকে ফাইলটির অ্যাক্সেস সরিয়ে দিন।

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

এখন service account ফাইলটি পড়তে পারবে, অন্য কেউ পারবে না।

sudo -u listmonk cat /etc/listmonk/config.toml > /dev/null && echo readable
stat -c '%U:%G %a' /etc/listmonk/config.toml

প্রথম command-টি readable দেখায়। দ্বিতীয়টি root:listmonk 640 দেখায়। অন্য কোনো unprivileged account একই cat চালালে Permission denied পাবে। এটাই উদ্দেশ্য: এই ফাইলে আপনার database password cleartext হিসেবে থাকে, এবং একটি server-এ সাধারণত একাধিক login থাকে। একই যুক্তি আপনার চালানো প্রতিটি service-এর ক্ষেত্রেও প্রযোজ্য। তাই সর্বনিম্ন privilege-যুক্ত service user একবার পড়ুন এবং সর্বত্র তা প্রয়োগ করুন।

--install দিয়ে স্কিমা তৈরি করুন

--install টেবিল তৈরি করে এবং ডিফল্ট সেটিংস যুক্ত করে। পরিবেশ ভেরিয়েবল ব্যবহার করে প্রথম অ্যাডমিন লগইন সেট করুন, যাতে প্যানেল কখনও অ্যাক্সেসযোগ্য হওয়ার আগেই অ্যাকাউন্টটি তৈরি থাকে।

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 প্রথমবারের installer এবং এটি বিদ্যমান Listmonk স্কিমা মুছে দেয়। লাইভ ডেটাবেসে এটি দ্বিতীয়বার চালালে আপনার subscriber-রা মুছে যাবে। একাধিকবার চলতে পারে এমন যেকোনো script-এ --install --idempotent --yes ব্যবহার করুন; টেবিল আগে থেকেই থাকলে এটি কিছুই করে না। নতুন release-এ প্রকাশিত স্কিমা পরিবর্তন --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 প্রিন্ট করে। দ্বিতীয় কমান্ডের ফলাফল খালি হলে বুঝতে হবে পরিবেশ ভেরিয়েবলগুলো process-এ পৌঁছায়নি। সে ক্ষেত্রে প্যানেল ব্রাউজারে প্রথম user তৈরি করতে বলবে।

systemd-এর অধীনে Listmonk চালান

/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.target

WorkingDirectory গুরুত্বপূর্ণ, কারণ Listmonk এর মাধ্যমে আপেক্ষিক পাথ resolve করে। এর মধ্যে filesystem media upload path-ও রয়েছে। After=postgresql.service শুধু শুরু করার ক্রম নির্ধারণ করে। এটি Postgres-এর connection গ্রহণের জন্য অপেক্ষা করে না। তাই Listmonk কিছুটা আগে শুরু হয়ে connection করতে না পারলে Restart=on-failure সেই পরিস্থিতি সামলায়।

sudo systemctl daemon-reload
sudo systemctl enable --now listmonk
ss -ltnp | grep 9000
curl -sI http://127.0.0.1:9000/

ss-এ LISTEN অবস্থায় 127.0.0.1:9000 দেখা উচিত। curl থেকে যেকোনো HTTP status line পাওয়া মানে server উত্তর দিচ্ছে। curl-এ Connection refused দিয়ে ব্যর্থ হলে বুঝতে হবে startup-এর সময় process বন্ধ হয়ে গেছে। journalctl -u listmonk -n 50 --no-pager কারণ জানাবে। মনে রাখবেন, reboot-এর পরেও টিকে থাকে enable --now-এর অর্ধাংশ। হাতে শুরু করা process পরবর্তী kernel upgrade-এর পরে বন্ধ হয়ে যায়।

nginx এবং TLS সামনে বসান

Listmonk loopback-এ সরল HTTP ব্যবহার করে। তাই nginx TLS (transport layer security) সমাপ্ত করে এবং অনুরোধটি ফরওয়ার্ড করে।

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;
    }
}

Subscriber import এবং media upload হলো file post। তাই client_max_body_size মান বাড়াতে হবে। nginx ডিফল্টভাবে 1 MB-এর বেশি আকারের অনুরোধ 413 Request Entity Too Large দিয়ে প্রত্যাখ্যান করে। certbot দিয়ে certificate ইস্যু করুন। এটি আপনার জন্য listen 443 ssl লাইন এবং port 80 থেকে redirect-ও লিখে দেয়। ধাপগুলো nginx-এর জন্য Let's Encrypt certificate guide-এ রয়েছে। port 80 এবং 443 খুলুন। port 9000 বন্ধ রাখুন, কারণ proxy এটি loopback-এর মাধ্যমে ব্যবহার করে। Firewall এখনও কনফিগার না করা থাকলে ufw firewall-এর প্রাথমিক নির্দেশনা দিয়ে শুরু করুন।

এরপর admin panel খুলে Settings-এর অধীনে root URL হিসেবে https://lists.example.com সেট করুন। নতুন install-এ http://localhost:9000 থাকে। Listmonk email-এ থাকা প্রতিটি unsubscribe link এবং media URL-এ এই মান লিখে দেয়। এটি পরিবর্তন করার আগে campaign পাঠালে প্রতিটি recipient নিজের machine-এ নির্দেশ করা link পাবে। পাঠকের ক্ষেত্রে linkগুলো কাজ করবে না। Spam filter-এর কাছে এগুলো এমন sender-এর লক্ষণ মনে হবে, যে নিজের domain কনফিগার করতে পারে না।

config.toml-এ না থাকা SMTP সংযোগ করুন

config.toml-এ SMTP বিভাগ খুঁজলে তা পাবেন না। মেইল সেটিংস ডেটাবেসের settings টেবিলে থাকে এবং আপনি সেগুলো admin panel-এর Settings এবং SMTP বিভাগে সম্পাদনা করেন। তাই তৈরি হওয়া ফাইলটি এত সংক্ষিপ্ত থাকে। এ কারণেই SMTP পরিবর্তনের জন্য restart প্রয়োজন হয় না।

SMTP server-এর ক্ষেত্রে দুটি বাস্তবসম্মত বিকল্প আছে। নিজের server চালান। এতে reputation সম্পূর্ণ আপনার নিয়ন্ত্রণে থাকে এবং এটি নিজেই একটি পূর্ণাঙ্গ প্রকল্প: Mailcow দিয়ে নিজের mail server চালানো-এ প্রয়োজনীয় বিষয়গুলো ব্যাখ্যা করা হয়েছে। অথবা Listmonk-কে একটি transactional relay-এর দিকে নির্দেশ করুন এবং IP reputation-এর দায়িত্ব অন্য প্রতিষ্ঠানের ওপর ছেড়ে দিন।

যেকোনো ক্ষেত্রে STARTTLS সহ port 587 অথবা implicit TLS সহ port 465 ব্যবহার করুন। outbound port 25-এর ওপর নির্ভর করার পরিকল্পনা করবেন না। নতুন account-এ অধিকাংশ VPS provider এটি ডিফল্টভাবে block করে রাখে। Block করা port 25 দেখতে ঠিক ঝুলে থাকা connection-এর মতো মনে হয়, কারণ packet প্রত্যাখ্যান না করে বাদ দেওয়া হয়। ফলে client দ্রুত ব্যর্থ না হয়ে timeout-এর জন্য অপেক্ষা করে।

বিশ্বাস করার আগে এটি পরীক্ষা করুন। একটি list তৈরি করুন, subscriber হিসেবে নিজের address যোগ করুন এবং একজন recipient-কে নিয়ে একটি campaign পাঠান। প্রাপ্ত message খুলে সম্পূর্ণ header পড়ুন। receiving side যোগ করা Authentication-Results header থেকে SPF এবং DKIM পাস করেছে কি না জানতে পারবেন।

Deliverability-ই পুরো কাজ

Listmonk বার্তা তৈরি করে, তালিকা পরিচালনা করে এবং মেইল হস্তান্তর করে। সেই মেইল ইনবক্সে পৌঁছাবে কি না, সে বিষয়ে প্রতিটি সিদ্ধান্ত গ্রহণকারী provider পাঠানোর IP address এবং পাঠানোর domain ব্যবহার করে। একটি নতুন VPS IP-এর কোনো ইতিহাস থাকে না। সব বড় mailbox provider এই ইতিহাসের অনুপস্থিতিকে কিছুটা সন্দেহজনক হিসেবে বিবেচনা করে।

চারটি বিষয় ঐচ্ছিক নয়:

  • একটি SPF (sender policy framework) TXT record, যাতে আপনার domain-এর হয়ে পাঠানোর অনুমতিপ্রাপ্ত host-এর নাম উল্লেখ থাকে।
  • একটি DKIM (domainkeys identified mail) key, যা TXT record হিসেবে প্রকাশিত থাকে এবং যার signing Listmonk নয়, mail server করে।
  • একটি DMARC (domain based message authentication, reporting and conformance) record, যা প্রথম দুটি ব্যর্থ হলে receiver-কে কী করতে হবে তা জানায়।
  • একটি bounce mailbox, যা Listmonk পড়ে। এর ফলে মেইল প্রত্যাখ্যানকারী address-গুলো তালিকা থেকে বাদ পড়ে এবং অনন্তকাল পুনরায় পাঠানোর চেষ্টা হয় না।

শুরুতে ধীরে ধীরে মেইল পাঠান। কোনো domain আগে কখনও মেইল না পাঠিয়ে হঠাৎ এক ঘণ্টায় দশ হাজার বার্তা পাঠালে, সেটির ধরন ঠিক একটি compromised account-এর মতো দেখায়। তাই সেটিকে compromised account-এর মতো filter করা হয়। আপনার সবচেয়ে সক্রিয় subscriber-দের দিয়ে শুরু করুন এবং কয়েক দিন ধরে volume বাড়ান।

প্রতিটি template-এ একটি কার্যকর unsubscribe link-ও প্রয়োজন। Listmonk template-এ সেটি হলো {{ UnsubscribeURL }}, এবং campaign body {{ template "content" . }} যেখানে আছে সেখানে বসে। প্রতিটি template-এ {{ template "content" . }} ঠিক একবার থাকতে হবে। unsubscribe link ছাড়া campaign unsubscribe-এর পরিবর্তে spam complaint তৈরি করে। আপনি কয়েক সপ্তাহ ধরে যে sending reputation তৈরি করেছেন, complaint সেটি নষ্ট করার দ্রুততম উপায়।

ব্যাকআপ এবং পুনরুদ্ধারের জন্য যা সত্যিই প্রয়োজন

দুটি জিনিস এই সার্ভারের বাইরে রাখতে হবে: ডেটাবেস ডাম্প এবং config.toml। আপনি যদি ক্যাম্পেইনে ছবি আপলোড করেন, তাহলে মিডিয়া ডিরেক্টরিটিও যোগ করুন।

sudo -u postgres pg_dump -Fc listmonk > listmonk-$(date +%F).dump

এই ডাম্পে subscriber, campaign, template এবং SMTP credential-সহ প্রতিটি সেটিং থাকে। তাই এটি encrypt করে এই সার্ভারের বাইরে রাখুন। এর scheduling সমাধান করা আছে: দূরবর্তী স্টোরেজে encrypted restic backup দেখুন। config.toml কয়েকটি লাইন হলেও এতে ডেটাবেসের password থাকে। তাই এটিকেও একইভাবে সুরক্ষিত রাখুন।

Upgrade একটি নির্দিষ্ট ক্রমে করতে হবে। Service বন্ধ করুন, একটি dump নিন, /usr/bin-এর binary প্রতিস্থাপন করুন, listmonk --config /etc/listmonk/config.toml --upgrade চালান, তারপর service চালু করুন। Schema migration শুধু সামনের দিকে চলে। তাই আগের অবস্থায় ফেরার একমাত্র উপায় হলো ওই dump।

Listmonk চালু হতে ব্যর্থ হয় কেন?

প্রথমে journalctl -u listmonk -n 50 --no-pager দিয়ে journal পড়ুন। প্রায় প্রতিটি startup ব্যর্থতার কারণ [db] ব্লকে একটি লাইনে থাকে।

pq: password authentication failed for user "listmonk"-এর অর্থ হলো [db]-এ থাকা password Postgres role-এর সঙ্গে মেলে না। pq prefix-টি Postgres driver-এর মাধ্যমে server-এর প্রত্যাখ্যান জানানো হচ্ছে। তাই config সঠিকভাবে পড়া হয়েছে, কিন্তু credentials ভুল ছিল। sudo -u postgres psql -c "ALTER USER listmonk WITH PASSWORD 'new-password';" দিয়ে role reset করুন এবং file-এ একই string লিখুন।

pq: database "listmonk" does not exist-এর অর্থ হলো [db]-এ থাকা database value কোনো বাস্তব database-এর নাম নয়। sudo -u postgres psql -l server-এ বর্তমানে থাকা database-গুলোর তালিকা দেখায়। ভুলভাবে ব্যবহার করা বানানটিও সেখানে দেখা যাবে।

--install চলার সময় permission denied দেখা গেলে role connect করতে পারছে, কিন্তু database-এর মালিক নয়। তাই role সেখানে table তৈরি করতে পারে না। sudo -u postgres psql -c "ALTER DATABASE listmonk OWNER TO listmonk;" দিয়ে এটি ঠিক করুন এবং আবার install চালান।

service কখনও চালু হয় না এবং journal config file-এর নাম দেখায়। listmonk হিসেবে চলা process এমন একটি config.toml খুলতে পারে না, যার owner root:root এবং mode 600। stat -c '%U:%G %a' /etc/listmonk/config.toml-এর আউটপুট root:listmonk 640 হওয়া উচিত। এর উপরের directory-টির permission হওয়া উচিত root:listmonk 750

panel কাজ করে, কিন্তু কোনো mail আসে না। এটি startup সমস্যা নয়। প্রথমে Settings এবং SMTP পরীক্ষা করুন। এরপর admin panel-এ campaign-এর নিজস্ব log দেখুন। প্রতিটি প্রচেষ্টার ক্ষেত্রে mail server যে error ফেরত দিয়েছে, সেই log-এ তা থাকে।

FAQ

Listmonk ব্যবহার করতে কি আমার নিজস্ব mail server দরকার?

না। Listmonk কোনো mail server নয়। এটি এমন একটি server-এর SMTP credentials চায়, যা আপনার mail গ্রহণ করে এবং তা প্রেরণ করে। এটি transactional relay অথবা আপনার পরিচালিত mail server হতে পারে। Admin panel-এর Settings এবং SMTP অংশে এই credentials সেট করুন, config.toml-এ নয়, কারণ mail settings database-এ সংরক্ষিত থাকে। STARTTLS সহ port 587 অথবা implicit TLS সহ port 465 ব্যবহার করুন, কারণ অধিকাংশ VPS provider নতুন account-এ outbound port 25 ব্লক করে।

Root URL setting এখনও এর install default http://localhost:9000-এ আছে। Campaign পাঠানোর সময় Listmonk সেই মানটি unsubscribe link এবং media URL-এ লিখে দেয়। Admin panel-এ Settings খুলে root URL আপনার প্রকৃত HTTPS address-এ সেট করুন এবং save করুন। ইতিমধ্যে পাঠানো message সংশোধন করা যায় না। তাই প্রকৃত list-এ mail পাঠানোর আগে নিজেকে একটি test campaign পাঠান এবং তাতে unsubscribe link-এ click করুন।

--install আবার চালালে কি আমার subscriber-গুলো মুছে যাবে?

হ্যাঁ। --install প্রথমবারের installer এবং এটি বিদ্যমান Listmonk schema মুছে দেয়। --yes সেই prompt সরিয়ে দেয়, যা আপনাকে সতর্ক করত। দুইবার চলতে পারে এমন কোনো script-এ --install --idempotent --yes ব্যবহার করুন। Table আগে থেকেই থাকলে এটি কিছুই করে না। নতুন release-এ schema পরিবর্তন প্রয়োগ করতে service বন্ধ করুন, একটি pg_dump নিন, তারপর --upgrade চালান।

Listmonk বলছে user listmonk-এর জন্য password authentication failed কেন?

/etc/listmonk/config.toml-এর [db] block-এ থাকা password একই নামের Postgres role-এর password-এর সঙ্গে মেলে না। Journal line হলো pq: password authentication failed for user "listmonk"pq হলো Postgres driver, যা server-এর প্রত্যাখ্যানের বার্তা দেখায়। এর অর্থ config file খুঁজে পাওয়া এবং পড়া হয়েছে। sudo -u postgres psql -c "ALTER USER listmonk WITH PASSWORD 'new-password';" দিয়ে role-এর password reset করুন, config file-এ একই string লিখুন, তারপর sudo systemctl restart listmonk চালান।