ติดตั้ง Listmonk บน VPS ด้วย Ubuntu 24.04
คู่มือติดตั้ง Listmonk v6.2.0 บน Ubuntu 24.04 พร้อม PostgreSQL, config.toml, systemd, TLS และ SMTP รวมถึงต้นทุนจริงของการสร้างชื่อเสียงเพื่อส่งอีเมล
สิ่งที่จดหมายข่าวแบบโฮสต์เองบน Listmonk ต้องมี
Listmonk เป็นซอฟต์แวร์จัดการจดหมายข่าวและรายชื่อผู้รับแบบโฮสต์เอง ประกอบด้วยไบนารี Go 1 ไฟล์ ฐานข้อมูล PostgreSQL 1 ฐาน ไฟล์กำหนดค่า 1 ไฟล์ และยูนิต systemd 1 ยูนิต VPS ขนาดเล็กสามารถใช้งานได้โดยไม่ยุ่งยาก เนื่องจาก Listmonk จัดเก็บข้อมูลสมาชิกและจัดคิวแคมเปญ แต่ไม่ส่งอีเมลด้วยตัวเอง ระบบจะส่งต่อข้อความแต่ละฉบับให้เซิร์ฟเวอร์ SMTP (simple mail transfer protocol) ดังนั้นอัตราการส่งถึงจึงขึ้นอยู่กับชื่อเสียงของเซิร์ฟเวอร์ดังกล่าว ไม่ใช่ซอฟต์แวร์นี้
คู่มือนี้ติดตั้ง Listmonk v6.2.0 ซึ่งเป็นรุ่นล่าสุด ณ เดือน July 2026 บน Ubuntu 24.04 คุณต้องมี VPS ที่มี public IP address ชื่อโดเมนที่คุณควบคุมได้ และ PostgreSQL 12 หรือใหม่กว่า การติดตั้งใช้เวลาประมาณ 1 ชั่วโมง ส่วนการสร้างชื่อเสียงในการส่งอีเมลใช้เวลาหลายสัปดาห์ และมีคำอธิบายหัวข้อนี้ในช่วงท้ายของคู่มือ
ติดตั้ง PostgreSQL และสร้างฐานข้อมูล
Ubuntu 24.04 มี PostgreSQL 16 ใน repository ของตนเอง ซึ่งใหม่กว่าข้อกำหนดของ Listmonk มาก
sudo apt update
sudo apt install -y postgresql curl
sudo systemctl enable --now postgresqlสร้าง role และฐานข้อมูลภายในเซสชัน psql เดียว -v ON_ERROR_STOP=1 ทำให้ psql ออกจากการทำงานทันทีเมื่อ statement แรกล้มเหลว เพื่อไม่ให้การพิมพ์ผิดทำให้การตั้งค่าบางส่วนเสร็จสิ้นจนดูเหมือนใช้งานได้
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 ไม่ใช่สิ่งที่ใส่ไว้เพื่อความสวยงาม การติดตั้ง schema จะสร้างตาราง ชนิดข้อมูล ดัชนี และฟังก์ชัน ดังนั้น role ต้องเป็นเจ้าของฐานข้อมูล หากกำหนดให้ Listmonk ใช้ฐานข้อมูลที่ role อื่นเป็นเจ้าของ การติดตั้งจะหยุดด้วย permission denied แม้ว่าคุณจะเรียกใช้ GRANT CONNECT แล้วก็ตาม
ยืนยันว่าฐานข้อมูลมีอยู่ก่อนดำเนินการต่อ
sudo -u postgres psql -tAc "SELECT datname FROM pg_database WHERE datname='listmonk';"คำสั่งนี้จะแสดง listmonk หากแสดงบรรทัดว่าง แสดงว่า statement CREATE ไม่เคยทำงาน ให้ตรวจสอบผลลัพธ์จาก psql อีกครั้ง
ติดตั้งไบนารี Listmonk
Listmonk ออกไบนารีแบบสแตติกแยกตามสถาปัตยกรรม ตรวจสอบสถาปัตยกรรมของเครื่องก่อน เนื่องจากไบนารี amd64 บน VPS ที่ใช้ ARM จะไม่สามารถทำงานได้ เพราะเคอร์เนลปฏิเสธการเรียกใช้ไฟล์ดังกล่าว
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บน VPS ที่ใช้ ARM ให้เปลี่ยน 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" จะผูก HTTP server ไว้กับ loopback เท่านั้น ดังนั้นจึงยังไม่สามารถเข้าถึงแผงผู้ดูแลระบบจากอินเทอร์เน็ตได้ จนกว่าคุณจะวาง reverse proxy ไว้ด้านหน้า ให้คงบรรทัดนี้ไว้ตามเดิม ภายใต้ [db] คุณจะพบ host = "localhost", port = 5432, user = "listmonk", database = "listmonk" และ ssl_mode = "disable" ค่าเริ่มต้นเหล่านี้ตรงกับฐานข้อมูลที่คุณสร้างไว้แล้ว ดังนั้นบรรทัดเดียวที่ต้องแก้ไขคือรหัสผ่าน
ssl_mode = "disable" ถูกต้องเมื่อ Postgres รับการเชื่อมต่อบน loopback ของเครื่องเดียวกัน เนื่องจาก traffic ดังกล่าวไม่ออกจากเครื่อง ย้ายฐานข้อมูลไปยังโฮสต์อื่นเมื่อใด ให้ตั้งค่าเป็น require มิฉะนั้นรหัสผ่านจะถูกส่งผ่านเครือข่ายแบบ cleartext
แก้ไขบรรทัดรหัสผ่านภายใต้ [db] ให้ตรงกับ role จากนั้นสร้าง 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 สามารถอ่านไฟล์ได้ และไม่มี login อื่นสามารถอ่านได้
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 unprivileged account อื่นที่พยายามใช้ cat เดียวกันจะได้รับ Permission denied ซึ่งเป็นจุดประสงค์ของการกำหนดสิทธิ์: ไฟล์นี้เก็บรหัสผ่านฐานข้อมูลในรูปแบบ cleartext และโดยทั่วไป server หนึ่งเครื่องมี login มากกว่าหนึ่งรายการ หลักการเดียวกันนี้ใช้กับทุก service ที่คุณเรียกใช้ ดังนั้นโปรดอ่าน ผู้ใช้ service ที่มีสิทธิ์เท่าที่จำเป็น แล้วนำไปใช้กับทุก service
สร้างสคีมาด้วย --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 ตอบรับข้อความยืนยัน อ่านข้อความดังกล่าว 1 ครั้งก่อนทำให้กระบวนการเป็นอัตโนมัติ เนื่องจาก --install เป็นการติดตั้งครั้งแรก และจะลบสคีมา Listmonk ที่มีอยู่ การเรียกใช้เป็นครั้งที่ 2 กับฐานข้อมูลที่ใช้งานอยู่จะทำลายข้อมูลผู้สมัครรับข่าวสาร ในสคริปต์ใดก็ตามที่อาจทำงานซ้ำ ให้ใช้ --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 อยู่ด้วย คำสั่งที่ 2 แสดงค่า admin หากคำสั่งที่ 2 แสดงผลลัพธ์ว่าง แสดงว่าตัวแปรสภาพแวดล้อมไม่ได้ถูกส่งไปยังโพรเซส ดังนั้นแผงควบคุมจะขอให้คุณสร้างผู้ใช้คนแรกในเบราว์เซอร์แทน
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.targetWorkingDirectory สำคัญ เนื่องจาก Listmonk จะอ้างอิงพาธแบบสัมพัทธ์ รวมถึงพาธสำหรับอัปโหลดสื่อในระบบไฟล์ โดยเทียบกับค่านี้ 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 แสดงว่ากระบวนการหยุดทำงานระหว่างการเริ่มต้น และ journalctl -u listmonk -n 50 --no-pager จะระบุสาเหตุ โปรดทราบว่า enable --now คือส่วนที่ยังคงทำงานหลังการรีบูต กระบวนการที่เริ่มด้วยตนเองจะหายไปหลังจากการอัปเกรด kernel ครั้งถัดไป
วาง nginx และ TLS ไว้ด้านหน้า
Listmonk ให้บริการ HTTP แบบไม่มีการเข้ารหัสบน loopback ดังนั้น 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;
}
}ต้องเพิ่มค่า client_max_body_size เนื่องจากการนำเข้ารายชื่อผู้สมัครรับข้อมูลและการอัปโหลดสื่อเป็นการส่งไฟล์ และ nginx จะปฏิเสธไฟล์ที่มีขนาดเกิน 1 MB ตามค่าเริ่มต้น โดยแสดงข้อผิดพลาด 413 Request Entity Too Large ออกใบรับรองด้วย certbot ซึ่งจะเขียนบรรทัด listen 443 ssl และตั้งค่าการเปลี่ยนเส้นทางจากพอร์ต 80 ให้ด้วย ขั้นตอนอยู่ใน คู่มือใบรับรอง Let's Encrypt สำหรับ nginx เปิดพอร์ต 80 และ 443 และปิดพอร์ต 9000 ไว้ เนื่องจากพร็อกซีเชื่อมต่อไปยังพอร์ตดังกล่าวผ่าน loopback หากยังไม่ได้ตั้งค่าไฟร์วอลล์ ให้เริ่มจาก พื้นฐานไฟร์วอลล์ ufw
จากนั้นเปิดแผงผู้ดูแลระบบและตั้งค่า URL หลักใน Settings เป็น https://lists.example.com การติดตั้งใหม่จะมีค่า http://localhost:9000 และ Listmonk จะเขียนค่านี้ลงในลิงก์ยกเลิกการสมัครรับข้อมูลและ URL สื่อทุกรายการที่ใส่ไว้ในอีเมล หากส่งแคมเปญก่อนเปลี่ยนค่า ผู้รับแต่ละรายจะได้รับลิงก์ที่ชี้ไปยังเครื่องของตนเอง ลิงก์เหล่านั้นจะใช้ไม่ได้สำหรับผู้อ่าน และตัวกรองสแปมจะมองว่าเป็นผู้ส่งที่ไม่สามารถกำหนดค่าโดเมนของตนเองได้
เชื่อมต่อ SMTP ซึ่งไม่ได้อยู่ใน config.toml
ค้นหา config.toml ในส่วน SMTP แล้วจะไม่พบส่วนดังกล่าว การตั้งค่าอีเมลอยู่ในฐานข้อมูลในตาราง settings และคุณสามารถแก้ไขได้ในแผงผู้ดูแลระบบที่ Settings และ SMTP นี่คือสาเหตุที่ไฟล์ที่สร้างขึ้นมีขนาดสั้น และเป็นสาเหตุที่การเปลี่ยนแปลง SMTP ไม่จำเป็นต้อง restart
สำหรับเซิร์ฟเวอร์ SMTP มี 2 ทางเลือกที่เหมาะสม คุณสามารถใช้งานเซิร์ฟเวอร์ของตนเองได้ ซึ่งทำให้ชื่อเสียงของ IP อยู่ภายใต้การควบคุมของคุณทั้งหมด และเป็นโครงการที่ต้องดำเนินการแยกต่างหาก: การใช้งานเซิร์ฟเวอร์อีเมลของตนเองด้วย Mailcow อธิบายสิ่งที่เกี่ยวข้องไว้ หรือกำหนดให้ Listmonk ใช้ transactional relay และให้ผู้ให้บริการรายอื่นดูแลชื่อเสียงของ IP
ไม่ว่าจะเลือกวิธีใด ให้ใช้ port 587 กับ STARTTLS หรือ port 465 กับ implicit TLS อย่าวางแผนใช้ outbound port 25 ผู้ให้บริการ VPS ส่วนใหญ่จะบล็อก port นี้เป็นค่าเริ่มต้นสำหรับบัญชีใหม่ และ port 25 ที่ถูกบล็อกจะมีลักษณะเหมือนการเชื่อมต่อค้าง เนื่องจากแพ็กเก็ตถูกทิ้งแทนที่จะถูกปฏิเสธ ดังนั้น client จึงรอจนหมดเวลาแทนที่จะล้มเหลวทันที
ทดสอบก่อนใช้งานจริง สร้าง list เพิ่ม address ของคุณเองเป็น subscriber แล้วส่ง campaign ถึงผู้รับ 1 ราย เปิดข้อความที่ได้รับและอ่าน header ทั้งหมด header Authentication-Results ที่ฝั่งผู้รับเพิ่มเข้ามาจะบอกว่า SPF และ DKIM ผ่านการตรวจสอบหรือไม่
ความสามารถในการส่งถึงกล่องจดหมายคือภารกิจทั้งหมด
Listmonk สร้างข้อความ ติดตามรายชื่อ และส่งต่ออีเมล การตัดสินใจทั้งหมดว่าอีเมลจะไปถึงกล่องจดหมายหรือไม่ดำเนินการโดยผู้ให้บริการปลายทาง โดยใช้ IP address สำหรับส่งและโดเมนสำหรับส่ง VPS IP ใหม่ไม่มีประวัติใดเลย และผู้ให้บริการกล่องจดหมายรายใหญ่ทุกรายมองว่าการไม่มีประวัติเป็นสัญญาณน่าสงสัยในระดับหนึ่ง
สิ่งที่จำเป็นมี 4 รายการ:
- ระเบียน TXT ของ SPF (sender policy framework) ที่ระบุ host ซึ่งได้รับอนุญาตให้ส่งอีเมลในนามโดเมนของคุณ
- คีย์ DKIM (domainkeys identified mail) ที่เผยแพร่เป็นระเบียน TXT โดยให้ mail server เป็นผู้ลงลายเซ็น ไม่ใช่ Listmonk
- ระเบียน DMARC (domain based message authentication, reporting and conformance) ซึ่งแจ้งผู้รับว่าต้องดำเนินการอย่างไรเมื่อ 2 รายการแรกไม่ผ่าน
- mailbox สำหรับรับ bounce ที่ Listmonk อ่านได้ เพื่อให้ address ที่ปฏิเสธอีเมลถูกนำออกจากรายชื่อ แทนที่จะถูกลองส่งซ้ำตลอดไป
จากนั้นให้เริ่มส่งอย่างช้าๆ โดเมนที่ไม่เคยส่งอีเมลมาก่อนและจู่ๆ ส่งข้อความ 10000 ข้อความภายใน 1 ชั่วโมง จะมีรูปแบบเหมือน account ที่ถูกเจาะโดยตรง จึงถูกกรองเช่นเดียวกับกรณีนั้น เริ่มจาก subscriber ที่มีส่วนร่วมมากที่สุด แล้วเพิ่มปริมาณในช่วงหลายวัน
ทุก template ต้องมีลิงก์ยกเลิกการสมัครที่ใช้งานได้ ใน template ของ Listmonk ลิงก์ดังกล่าวคือ {{ UnsubscribeURL }} และเนื้อหา campaign จะอยู่ตรงตำแหน่ง {{ template "content" . }} ซึ่งต้องปรากฏเพียง 1 ครั้งต่อ template เท่านั้น campaign ที่ไม่มีลิงก์ยกเลิกการสมัครจะทำให้เกิดการร้องเรียนสแปมแทนการยกเลิกการสมัคร และการร้องเรียนเป็นวิธีที่รวดเร็วที่สุดในการสูญเสีย reputation ด้านการส่งที่คุณใช้เวลาหลายสัปดาห์สร้างขึ้นมา
การสำรองข้อมูลและสิ่งที่จำเป็นต่อการกู้คืน
ต้องนำข้อมูล 2 รายการออกจากเครื่อง ได้แก่ database dump และ config.toml เพิ่มไดเรกทอรีสื่อ หากคุณอัปโหลดรูปภาพไปยังแคมเปญ
sudo -u postgres pg_dump -Fc listmonk > listmonk-$(date +%F).dumpไฟล์ dump นี้มีข้อมูล subscribers, campaigns, templates และการตั้งค่าทั้งหมด รวมถึงข้อมูลรับรอง SMTP ดังนั้นให้เข้ารหัสและเก็บไว้นอกเซิร์ฟเวอร์นี้ การตั้งเวลาให้ทำงานเป็นปัญหาที่มีวิธีแก้แล้ว ดูที่ การสำรองข้อมูลด้วย restic แบบเข้ารหัสไปยังพื้นที่จัดเก็บระยะไกล config.toml มีเพียงไม่กี่บรรทัด แต่มีรหัสผ่านฐานข้อมูล จึงต้องจัดการในลักษณะเดียวกัน
การอัปเกรดต้องทำตามลำดับเดียว ให้หยุด service, สร้าง dump, แทนที่ binary ใน /usr/bin, เรียกใช้ listmonk --config /etc/listmonk/config.toml --upgrade แล้วเริ่ม service การย้าย schema ทำได้เฉพาะไปข้างหน้า ดังนั้น dump นี้จึงเป็นวิธีเดียวในการย้อนกลับ
เหตุใด Listmonk จึงเริ่มทำงานไม่สำเร็จ
อ่าน journal ก่อนด้วย journalctl -u listmonk -n 50 --no-pager ความล้มเหลวเกือบทุกกรณีขณะเริ่มทำงานจะอยู่ในบรรทัดเดียวของบล็อก [db]
pq: password authentication failed for user "listmonk" หมายความว่ารหัสผ่านใน [db] ไม่ตรงกับ Postgres role คำนำหน้า pq คือรายงานจาก Postgres driver ว่าเซิร์ฟเวอร์ปฏิเสธคำขอ ดังนั้นจึงอ่าน config ได้ถูกต้อง แต่ข้อมูลรับรองไม่ถูกต้อง รีเซ็ต role ด้วย sudo -u postgres psql -c "ALTER USER listmonk WITH PASSWORD 'new-password';" แล้วใส่สตริงเดียวกันทุกประการลงในไฟล์
pq: database "listmonk" does not exist หมายความว่าค่า database ใน [db] ไม่ได้ระบุชื่อ database ที่มีอยู่จริง sudo -u postgres psql -l จะแสดงรายการที่มีอยู่จริงบนเซิร์ฟเวอร์ รวมถึงการสะกดที่คุณใช้ผิด
permission denied ระหว่าง --install หมายความว่า role สามารถเชื่อมต่อได้ แต่ไม่ได้เป็นเจ้าของ database จึงไม่สามารถสร้างตารางใน database นั้นได้ แก้ไขด้วย sudo -u postgres psql -c "ALTER DATABASE listmonk OWNER TO listmonk;" แล้วเรียกใช้การติดตั้งอีกครั้ง
บริการไม่เคยเริ่มทำงาน และ journal ระบุชื่อไฟล์ config กระบวนการที่ทำงานในฐานะ listmonk ไม่สามารถเปิด config.toml ซึ่งตั้งค่าเป็น root:root ด้วย mode 600 ได้ stat -c '%U:%G %a' /etc/listmonk/config.toml ควรแสดงผลเป็น root:listmonk 640 และ directory ที่อยู่เหนือขึ้นไปควรเป็น root:listmonk 750
แผงควบคุมใช้งานได้ แต่ไม่มีอีเมลมาถึง กรณีนี้ไม่ใช่ปัญหาขณะเริ่มทำงาน ให้ตรวจสอบ Settings และ SMTP ก่อน จากนั้นตรวจสอบ log ของ campaign นั้นในแผงผู้ดูแลระบบ ซึ่งจะบันทึกข้อผิดพลาดที่ mail server ส่งกลับมาสำหรับแต่ละความพยายามส่ง
FAQ
ฉันจำเป็นต้องมีเซิร์ฟเวอร์อีเมลของตนเองเพื่อใช้ Listmonk หรือไม่
ไม่จำเป็น Listmonk ไม่ใช่เซิร์ฟเวอร์อีเมล ระบบต้องใช้ข้อมูลรับรอง SMTP สำหรับเซิร์ฟเวอร์ที่รับอีเมลของคุณและจัดส่งอีเมล ซึ่งอาจเป็นรีเลย์สำหรับอีเมลธุรกรรมหรือเซิร์ฟเวอร์อีเมลที่คุณดูแลเอง ให้ตั้งค่าข้อมูลรับรองดังกล่าวในเมนู Settings และ SMTP ในแผงผู้ดูแลระบบ ไม่ใช่ใน config.toml เนื่องจากการตั้งค่าอีเมลจัดเก็บอยู่ในฐานข้อมูล ให้ใช้ port 587 กับ STARTTLS หรือ port 465 กับ implicit TLS เนื่องจากผู้ให้บริการ VPS ส่วนใหญ่จะบล็อกการเชื่อมต่อขาออกผ่าน port 25 สำหรับบัญชีใหม่
เหตุใดลิงก์ในแคมเปญของฉันจึงชี้ไปที่ localhost:9000
การตั้งค่า root URL ยังคงเป็นค่าเริ่มต้นหลังการติดตั้ง คือ http://localhost:9000 Listmonk จะเขียนค่านี้ลงในลิงก์ยกเลิกการสมัครและ URL ของสื่อในขณะที่ส่งแคมเปญ ให้เปิด Settings ในแผงผู้ดูแลระบบ ตั้งค่า root URL เป็นที่อยู่ HTTPS จริงของคุณ แล้วบันทึก ข้อความที่จัดส่งไปแล้วไม่สามารถแก้ไขได้ ดังนั้นให้ส่งแคมเปญทดสอบถึงตนเอง และคลิกลิงก์ยกเลิกการสมัครในข้อความนั้นก่อนส่งอีเมลไปยังรายชื่อจริง
การเรียกใช้ --install อีกครั้งจะลบผู้สมัครรับข้อมูลของฉันหรือไม่
ใช่ --install เป็นตัวติดตั้งที่ทำงานครั้งแรก และจะลบ schema เดิมของ Listmonk ส่วน --yes จะลบข้อความแจ้งเตือนที่ควรเตือนคุณ การใช้ --install --idempotent --yes ในสคริปต์ใดก็ตามที่อาจทำงานซ้ำจะปลอดภัยกว่า เนื่องจากคำสั่งนี้จะไม่ทำอะไรเมื่อมีตารางอยู่แล้ว หากต้องการใช้การเปลี่ยนแปลง schema ใน release ใหม่ ให้หยุด service สร้าง pg_dump แล้วเรียกใช้ --upgrade
เหตุใด Listmonk จึงแจ้งว่า password authentication failed for user listmonk
รหัสผ่านในบล็อก [db] ของ /etc/listmonk/config.toml ไม่ตรงกับรหัสผ่านของ Postgres role ที่มีชื่อเดียวกัน บรรทัดใน journal คือ pq: password authentication failed for user "listmonk" และ pq คือไดรเวอร์ Postgres ที่ส่งต่อการปฏิเสธจากเซิร์ฟเวอร์ ซึ่งหมายความว่าระบบพบและอ่านไฟล์การตั้งค่าแล้ว ให้รีเซ็ตรหัสผ่านของ role ด้วย sudo -u postgres psql -c "ALTER USER listmonk WITH PASSWORD 'new-password';" เขียนสตริงเดียวกันลงในไฟล์การตั้งค่า แล้วเรียกใช้ sudo systemctl restart listmonk