自托管

A collection of 11 posts
砖工技术

给 Matrix Synapse 添加中文搜索

Matrix很好很强大,一般服务端都用Synapse,支持的协议最完善,然而它的中文搜索很难用,原因在于PostgreSQL未能正确的给中文分词。另一个服务端项目dendrite 支持CJK (中日韩)分词,也只是略好一些,并且那个项目开发也几乎停滞了。 开源IM软件中原生支持中文搜索的有Mattermost,我参考它给Synapse开发了一个方案,具体的做法是 使用 Zhparser 插件版 Postgres,给数据表添加一个字段,改少量Synapse代码。通过文件映射的方式,尽可能减少后期维护成本。
8 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 | Docke
4 min read
砖工技术

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,此种方式不需要中间文件转储,速度较快,但是除了要复制数据文件,还要手动复制容器中
6 min read
Ghost

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可以当作一个简单的图床,但最好不要把它当作个人日记本上传私密照片。 手动压缩图片和删
4 min read
自托管

使用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的方式部署它,部署的教程参考官方文档即可。
5 min read
自托管

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

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

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"
4 min read
自托管

解决群晖 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端口映射到外部环境(
7 min read
Ghost

Ghost进阶:邮箱配置避雷

更新时间:2022年8月28日00点02分 发送邮件类型 Ghost站点产生两种邮件类型,一种是通过SMTP发送的事务性邮件,用于会员注册/登录确认、管理员密码重置等;另一种是通过API发送的批量型邮件,用于Newsletter新闻通讯:文章批量推送到订阅会员的邮箱。目前批量邮箱仅支持Mailgun的API,尽管官方表示后续将提供更多接入,但这是一个长期以来就有的需求,恐怕短时间内不会得到开发。 如果要用Mailgun以外的邮箱发批量邮件,只能结合Zapier或自己开发外件,这里有一个例子,需要许多额外的工作。 为什么不能用SMTP发送批量邮件? 首先一般邮箱服务商有限制,不允许用户同时发送大量邮件;另一方面大多数收件人的邮箱也会过滤从未知域名、未知IP发送的大量邮件,甚至包括合法的电子邮件服务提供商,一经检测大量发送,会被当作垃圾邮件,并将IP拉入黑名单。这是一种保护措施。 Mailgun开通过程中遇到的问题 Mailgun是一家提供发送、接收和跟踪电子邮件的服务商,每个月有发送1000封的免费额度,我在注册过程中碰到一些问题: 1. Mai
5 min read
Ghost

Ghost进阶: Cloudflare相关

更新时间:2022年9月6日23点56分 图片无法跨域 关闭"Scrape Shield-Hotlink"保护(防止站外链接指向您的图像。)否则NewsLetter无法显示文章中的图片。 用Cloudflare Web Analytics Cloudflare 有一个功能全面的网站分析(Web Analytics)面板,如果你的域名托管在Cloudflare,则会自动进行访问统计,不需要在网站中植入脚本;否则,需要一段Cloudflare提供的JavaScript代码,可以在Ghost-Sttings-Code injection中引入,实测会被浏览器AdBlocker广告过滤插件会拦截,因此,如果域名不在Cloudflare解析,推荐用自托管的站点统计工具umami(Demo),好处是可以统计所有时段而不仅限于一个月,其他与Cloudflare相差无几。 用Cloudflare CDN Cloudflare的免费CDN只提供中国大陆以外的,大陆区访问延迟过高(响应200ms)左右,有时候还比较拥堵,当然对于自娱自乐个站来说,这些并不是考虑的重点。
6 min read