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 | Docke…

Docker版PostgreSQL升级迁移(慎用Watchtower更新基础服务)

Docker容器更新是个麻烦事,我的话因为大部分服务只有自己在用,也做了数据持久化和备份,就用Watchtower一键更新,这样做很方便但也可能会产生问题,因为有些项目版本迭代会导致配置、数据以及网络环境不兼容,我碰到过的就有:Alist从V2升级到V3导致配置重置;一个更新失败导致后续所有的容器丢失(大坑,建议还是一个一个更新而不是全部一起更新)等等。这次又作死更新了postgres,发现大版本已经从14升级到15了,提示数据库不兼容: PostgreSQL database files are incompatible with server. 迁移方式 官方支持的方式: 1. pg_dump或pg_dumpall,这种方式将数据库转储为一个sql文件,在新旧数据集导出和导入,缺点是速度较慢,迁移多个数据库比较麻烦,似乎也不支持非文本数据,我没有测验过,参考教程1、教程2; 2. pg_upgrade,此种方式不需要中间文件转储,速度较快,但是除了要复制数据文件,还要手动复制容器中…

Ghost进阶:存储库和编辑器

更新时间:2022年10月22日15点37分 存储库的选择 Ghost编辑器默认将图片上传在本地content/images文件夹,支持第三方存储库,已提供的适配器包括Http-Store 、WebDAV、GitHub、Amazon S3、七牛云、又拍云、阿里云 OSS、Azure 云存储等,其中有些可能不兼容Ghost 4.0及以后版本。另外可以自己开发适配器——Docker部署的话,需要重新封装镜像,这为升级带来不便。 默认的本地存储库有许多缺点: * 尽管图片作为静态内容,可以用CDN缓存,但是和文章在同一个源站还是会占用比较大的上行带宽和流量; * Ghost对隐私的保护是不够的,照片通常会带有包含地理位置等隐私信息的元数据,虽然博文默认加载的是压缩和删除过元数据的照片,但是原始照片也保存在本地存储库中,可以以某种方式访问到; * Ghost没有图片管理界面,删除只能在文件夹中进行,不管博客前端是否加密、文章是否发布,上传的图片可通过直链公开访问的,因此,Ghost可以当作一个简单的图床,但最好不要把它当作个人日记本上传私密照片。 手动压缩图片和删…

使用C2 Object Storage作为图床

C2 Object Storage是群晖提供的云存储服务,有15G/月的免费额度(存储空间与流量),付费计划也相当实惠,大陆地区可直接访问北美和欧洲两个数据中心,实测下载速度可达5M/s左右,这两个数据中心的额度是彼此独立的,如果你拥有群晖账号,则可以一键开通C2并在这两个区域任意切换,Synology 知识中心-C2 Object Storage可以找到有关安装与使用的说明。 C2 Object Storage兼容大部分S3 API,在我看来,比较大的缺憾是不支持网站设定(文件直链,即链接域名不可自定义,并且是动态生成的:以Endpoint+有效期签名的形式)和CORS(跨站资源共享),不过,有办法解决这些问题,至少作为图床来说是足够的。 这得益于Alist这款开源文件列表托管程序,它可以将阿里云盘、OneDrive、蓝奏云、FTP、AWS S3、WebDAV、百度网盘、夸克网盘、一刻相册等个人网盘、对象存储服务OSS转为Web目录和WebDAV,并支持将其中的文件跨域直链,前提是你拥有一台24小时运行的服务器,并用Docker的方式部署它,部署的教程参考官方文档即可。…

修复Amazon SES 邮箱无法连接的故障

我邮箱收到一封系统退信,显示无法连接到亚马逊的中继服务器: This is the mail system at host mail.nigzu.com. I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below. For further assistance, please send mail to postmaster. If you do so,…

自建邮局一年后的经验之谈

近日,一则“某国外老哥关闭自我托管了23年的邮箱,转而向大厂投降”的新闻[1]引起热议。 说的是电子邮局大厂(Outlook、Gmail等)会屏蔽家庭宽带的 IP 地址,有些甚至会屏蔽一些独立公网 IP,自托管的邮箱向这些主流邮箱投送邮件,要么被拒收,要么被当作垃圾邮件,由于大部分人使用这些邮件服务商,这让自托管变得困难。 我也使用自托管邮箱,早先检查DNSBL数据库发现,的确我源服务器的IP总是在个别垃圾电邮黑名单里,通常家庭宽带运营商(ISP)默认将分配给家庭用户的公网IP都列入政策封锁列表(PBL)中,实测至少Outlook会屏蔽直接从我源服务器发出的邮件,QQ邮箱倒是来者不拒。 如果你需要使用自己的域名邮箱,一种方式是使用阿里云、Zoho之类的企业邮,有免费的,功能受到限制,需要提交一些个人信息,使用一段时间后容易收到一些广告邮件等等缺点,更重要的是:数据并不掌握在自己手里。因此,如有可能,邮箱当然还是自建的好。 自建邮局并非不可行,有避免被主流邮箱屏蔽的方法:使用中继主机。我开通了Amazon SES(主用)和Mailgun(备用)…

Ghost进阶: 一些依赖项的配置

更新时间:2022年9月15日13点40分 配置方式 如果没有自定义配置Ghost将使用默认配置,自定义配置:config.development.json和 config.production.json,这两个文件分别应用于开发和生产运行环境,默认在环境变量中指定: NODE_ENV=production(or development) Docker部署的容器直接映射配置文件在本地,方便修改,修改后重启才能生效。这两个文件在容器中的路径是: /var/lib/ghost/config.production.json /var/lib/ghost/config.development.json 环境变量也可以替换默认配置中的选项,嵌套配置选项使用两个下划线分隔,例如: admin__url=domain 对应: "admin": { "url": "domain"…

解决群晖 Vaultwarden WebSocket的问题

更新时间:2023年7月29日00点30分 Vaultwarden可以在服务端与客户端实时同步,通过持久的WebSocket连接实现[1],因此仅限于浏览器插件和桌面软件,移动端的同步则需要在APP上手动刷新。 v1.29.0 升级说明 Vaultwarden 升级到 v1.29.0以上版本后 WebSocket 通过 Rocket 连接(默认启用),将不再需要单独的端口。旧的实现在v1.29.0中仍然可用,但这将在未来被删除。 可以在配置文件“.env”中“WEBSOCKET_ENABLED=false”关闭旧的 WebSocket 连接。 Nginx反代仍然需要设置Upgrade、Connection。以下配置方式Vaultwarden不再需要,不过可以作为群晖自定义Nginx配置的示例。 配置步骤 想要启用WebSocket通知,首先在.env或环境变量中设置字段:WEBSOCKET_ENABLED=true,如果通过Dcoker 桥接,将WEBSOCKET_PORT端口映射到外部环境(…