4 min read

listmonk:优秀的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数据。

  1. (以在群晖中安装为例)在docker文件夹中创建listmonk文件夹并在其中创建uploads子文件夹。

  2. 创建配置文件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"
  1. SSH方式管理员权限登录群晖DSM系统,根据配置创建一个临时listmonk容器以生成数据库初始数据(这一步是必须的否则报错):
docker run -it  -v /volume1/docker/listmonk/config.toml:/listmonk/config.toml:ro  --rm listmonk/listmonk:latest ./listmonk --install
  1. 控制台将提示是否擦除数据库数据?输入y并回车确认。

  1. 安装正式容器:
# --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
  1. 局域网内访问设备IP:9000即可访问管理面板,外网环境下需要分别启用端口映射和https反向代理。

  2. 进行基础设置,主要设置根网址(主要用于公开订阅页面和媒体链接)、SMTP服务器,可以设置多个smtp服务器,根据邮箱服务商的限制,可能还要设置性能,如每秒最大消息数。

现在,尝试将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

  1. Newsletter:时事通讯,维基为一种企业或组织通过邮箱给其成员,客户,员工或其他订阅者发送活动的新闻及广告营销的方式,但它也逐渐成为个人出版、自媒体的流行订阅形式,相比RSS,它更加自主,有更好的阅读体验,并且可以有更灵活的付费方式。 ↩︎