title: listmonk-优秀的Newsletter自托管工具
tags: [newsletter]
date: 2024-01-22 14:26:10
date modified: 2024-01-27 21:37:11listmonk-优秀的Newsletter自托管工具
更新时间:2023年8月16日06点59分
Ghost大概是最佳的Newsletter[1]自托管方案,但一来它的学习与搭建成本比较高(参考我的#Ghost 系列博文),二来在Newsletter方面也有诸多限制:不支持SMTP,只支持Mailgun的API。
假设你拥有可用于批量投递的企业邮箱(从知名品牌服务商那儿获取的个人邮箱和非独立公网环境下自建的邮箱并不适合用来发送批量邮件——这应该成为常识),希望进行Newsletter形式的内容创作,Listmonk可以用作Ghost的补充工具。或者你并不需要一个博客,而是将listmonk单独使用——提供给访客一个简单的订阅表单,文章不发布于网站,只从邮件推送,此外也支持短信、手机通知,这个demo可以体验完整的功能,这里主要介绍如何安装。
官方文档介绍的是用docker-compose安装,默认配置也将安装Postgres DB,Postgres是必须的,许多Docker项目都依赖Postgres数据库,我建议独立安装,让许多服务连接同一个容器,安装教程参考postgres - Official Image | Docker Hub就可以了,已经安装了的前提下再来看Listmonk安装教程.
与官方文档不同的是,需要先将数据库初始化——导入表结构和一些demo数据。
config.toml,而后上传到listmonk文件夹中:[app]
# 默认localhost,Docker网桥方式部署则侦听'0.0.0.0'地址
address = "0.0.0.0:9000"
# 管理仪表板的BasicAuth认证。留空的话将禁用管理员的认证。
admin_username = ""
admin_password = ""
# Database.
[db]
host = "172.17.0.1"
port = 5432
user = "user"
password = "password"
# 确保该数据库已在 Postgres 中创建。
database = "listmonk"
ssl_mode = "disable"
max_open = 10
max_idle = 10
max_lifetime = "300s"
docker run -it -v /volume1/docker/listmonk/config.toml:/listmonk/config.toml:ro --rm listmonk/listmonk:latest ./listmonk --install

# --link postgres:postgres 链接postgres容器对应的名称
docker run -d --restart always --name listmonk --link postgres:postgres \
-v /volume1/docker/listmonk/config.toml:/listmonk/config.toml:ro \
-v /volume1/docker/listmonk/uploads:/listmonk/uploads \
-p 9000:9000 \
listmonk/listmonk:latest
现在,尝试将Ghost会员导出到listmonk并推送新文章,listmonk中支持粘贴Markdown(将根据模板自动解析成html,模板可自定义)和原始html等格式,这篇文章正是用Listmonk推送的。
如果不想每次发文后都手动推送,可以借助n8n之类的自动化工具每次发文都触发Ghost与listmonk的订阅同步并推送邮件,关于自动化,也许之后会出一篇教程。
后续容器更新后,可能需要升级数据库,类似日志:
upgrade.go:106: there are 3 pending database upgrade(s): [v2.3.0 v2.4.0 v2.5.0]. The last upgrade was v2.2.0. Backup the database and run listmonk --upgrade
先停止容器,备份数据库,然后执行一遍升级命令:
docker run -it -v /volume1/docker/listmonk/config.toml:/listmonk/config.toml:ro --rm listmonk/listmonk:latest ./listmonk --upgrade