利用 Docker 搭建 Trilium Notes 服务器

由于平时需要处理大量结构复杂的内容,并且各内容板块间还存在相互交叉的引用关系,因此长久以来我一直在寻找一款既能满足需求,又简洁易用的内容管理工具。印象笔记或 OneNote 等笔记类服务似乎最为常见,但一来,将所有的私人内容存储在商业公司的服务器上总会让我缺乏安全感;二来这些软件要么不够轻便,要么对重要功能额外收费,因此一直都无法让我十分满意。 两年前,我接触到一款叫做 Notion 的跨平台软件,无论是功能还是界面都令我十分满意,但它的价格并不便宜,我毕竟不是靠内容吃饭的职业创作者,无论如何也不愿为一款笔记软件搞月付。另外,Notion 仍然无法实现在牢牢掌控内容数据的同时实现便捷的多端同步,这也是一个不大不小的遗憾。 直到今天,偶然在少数派这篇文章的介绍下了解到一个叫 Trilium 的 Github 开源项目,几乎完美地满足我的所有需求。首先,它是一个开源项目,支持自建笔记服务器,可以让我在牢牢掌控笔记控制权的同时实现多端同步;其次,它界面简洁,非常轻量,甚至可以丢掉客户端,完全实现网页端访问;最后,它完全免费,这点非常重要。 自从买了威联通 NAS 后,我越来越倾向于将自己的各种数据保存在 NAS 上,再通过各类开源软件实现多端同步。这样既能保证数据安全和个人隐私,又能方便地管理自己的文件和数据。用几千元的成本和少许的电费换得对个人数据的完全掌控,我认为是值得的。因此,在意识到 Trilium 提供开源的服务端软件后,我立刻开始本地服务器的搭建工作。 Trilium 的官方文档中提供了通过 Docker 安装 Trilium Server 的具体方式。但由于文档为全英文,且只提供了 SSH 命令安装的方式,一些新手阅读起来可能有些困难,因此本文将以图形化的方式简单陈述 Trilium Server 的安装方式。 首先,在你的 NAS 上安装 Docker 套件(在威联通的 QTS 中叫做 Container Station)并打开它。 进入“创建”,并在搜索框中搜索 Trilium,找到 zadam/trilium,点击右侧的“安装”。 在弹出的创建窗口中,点选“高级设置”,首先在“网络”选项卡中设置 Trilium 的端口转发,trilium 的默认 web 界面默认端口是 8080,因此 Container 的端口必须写 8080,而映射出的主机端口则可以根据自身需求填写。为了记忆方便,我倾向于内外端口一致的设置,即主机端口同样设置成 8080,但如果你的 NAS 的 8080 端口已被其他程序占用,请填写其他端口。 接着,在“共享文件夹”选项卡中,将一个共享文件夹挂在到 Trilium 的容器中。容器中的挂载路径必须写 /trilium-data,而本机共享文件夹则可根据自身需求进行选择,注意挂载共享文件夹的权限必须为读取和写入均有。 上述设置完成后,点击“创建”按钮,系统会自动下载镜像文件并根据你的配置安装容器。容器安装完成后,便可通过在浏览器中输入 NAS IP/端口的方式访问 Trilium 的 web 界面。初次使用 Trilium 时要进行一些简单的初始化设置,例如创建用户名和密码等。虽然界面只有英文,但非常简单,这里不做赘述。 ...

2021-03-20 · Mason

通过群晖与 Openwrt 软路由实现自动端口映射

要在家庭或公司的局域网以外(俗称外网)访问家中或公司内网的设备(例如 NAS),通常有两种方式。第一种方式是在局域网的路由器上架设一个 VPN 服务器,再将外网的终端设备作为 VPN 客户端接入内网。在这种情况下,VPN(虚拟专有网络)充当了网线的角色,即接入 VPN 的外网设备,就相当于拉了一根通往内网的网线。因此在 VPN 网络中,即使这根网线是虚拟的,也能实现如同身处局域网内一般的访问体验。 第二种方法则更为简单直接,即通过动态 DNS 服务将一个域名绑定到局域网服务器的外网 ip,再议端口映射的方式将内网设备暴露在公网中,以供外网设备连接。由于众所周知的原因,我国境内的 VPN 连接并不稳定,因此大多数人都会选择第二种方式进行内网穿透。 在路由器上进行端口映射的操作非常简单。这里以 Openwrt 系统为例,仅需在网络 - 防火墙 - 端口转发中新建转发规则,将相应内网设备的端口映射为外网端口即可。 然而,由于内网设备的内部 ip 地址会随着 DHCP 租约的更新而不断变化,尽管我们可以通过 IP/MAC 绑定的方式人为地固定内网设备的 ip 地址,但实践证明这种方式并不稳定。因此,我们经常需要手动修改端口映射规则,这就使得相关的维护工作变得非常繁琐。如果我们长期在外,无法接入内网环境,上述规则修改的工作就很难进行。这时,我们就需要用到 UPnP(通用即插即用)服务。顾名思义,它是一种自动配置端口映射的工具。只要服务器和内网其他设备同时开启 UPnP 服务并稍加简单的配置,即可一劳永逸地解决端口映射的问题。 以群晖和 Openwrt 系统为例,我们首先需要在 Openwrt 路由器上安装并开启 UPnP 服务。 然后,登陆群晖的管理后台,在控制面板 - 外部访问 - 路由器配置选项卡中,选择“设置路由器”。此时系统会自动检测网络环境以及路由器型号与配置,不出意外的话,整个过程能够由系统自动完成,无须人工配置。之后,点击“新增”按钮,并根据自己的需求选择要转发的应用和端口,再点击“保存”即可。 最后,我们可以回到路由器后台的 UPnP 页面,查看已经被系统自动添加好的端口映射规则。值得注意的是,国内的网络运营商一般会禁用个人和家庭宽带的 443 和 445 端口(前者是 https 的默认端口,后者是 smb 服务的默认端口),因此,即使我们在 UPnP 服务中添加了上述两个端口的自动映射,也无法实现 443 和 445 端口的外网访问。此时,就需要我们在防火墙的端口映射中手动进行端口映射,即将 443 和 445 两个内网端口映射到外网的非 443 或 445 端口(如 444 和 446,全凭个人喜好)。这样,我们才能绕过运营商的封锁,成功进行上述两个端口的外部访问。 ...

2020-09-14 · Mason

利用 NAS、Docker 和 Calibre Web 搭建个人线上书库

经常阅读电子书并且用过 Kindle 的人应该都体会过整理电子书时的痛苦。尤其是像我这种经常下载电子书文件再导入到 Kindle 上进行阅读的人(或是为了省钱、或是因为 Kindle 商城中没有我们想要阅读的书),对于那些有着各自不同的标题、作者、封面,以及文件格式的纷繁复杂的电子书,缺乏一套行之有效的管理方案,进而充分管理自己的阅读进度与时间。 长期以来,PC 和 Mac 端的 Calibre 都是一个差强人意的电子书管理解决方案。它不仅支持多平台、功能强大(支持电子书整理、编辑、格式转换、一键推送到 Kindle 等),而且完全免费。那我为什么要将这么厉害的软件说成是“差强人意”呢?因为 Calibre 已经多年没有较大的功能更新,作为一款电子书管理软件,它已经无法适应当下人们已经习以为常的需求。具体而言,Calibre 具有以下缺点: 界面老旧(或曰古朴?),看起来像是十年前的软件; 启动和运行速度较慢,操作繁琐; 不支持多设备同步,不提供云存储服务(这是最重要的一点)。 对于像我这样学习或工作繁忙,几乎没有固定的整段时间使用同一台终端设备的人来说,多端同步和云存储几乎是不可或缺的功能。而且在网页程序和微信小程序等日益普及的今天,有时连下载一个专门的应用程序都显得繁琐(可能是被这几年的技术进步惯坏了把)。因此,最好有一款类似于 Plex 影视库的电子书管理服务器应用,能够让我随时随地打开一个网页就能管理和阅读自己的电子书。幸运的是,这样的软件确实存在,它便是 Calibre 的继任者—— Calibre Web。 下图就是我用 Calibre Web 在自己的 NAS 上搭建的个人电子书管理网站(或曰个人电子图书馆?)。通过这个网站,我可以轻松地在各种终端设备上上传、修改、整理、推送各种格式的电子书。由于是网页端,因此我不用担心海量电子书会占用手机或电脑的硬盘容量,也不用担心多端同步的问题。更加难能可贵的是,由于 Calibre Web 开发得比较晚近,因此它的界面也很符合当下的主流审美标准。 关于 Calibre Web 的搭建方法,网络上有很多前辈们撰写的教程,他们已经说得非常详细了。首先,你必须拥有一台能够稳定运行的服务器或 NAS(其实任意一台普通电脑都是可以的,只要你舍得让它 7*24 小时运行)。然后,你需要在你的设备上搭建一个 docker 环境,因为 Calibre Web 需要 docker 作为运行的载体。最后,经过简单的安装和配置,你就可以拥有一个属于自己的电子书管理网站了。 这里以群辉为例。首先在“控制面板”中创建一个新的共享文件夹,用于存放 Calibre Web 的数据库和电子书资源。我这里将它命名为"Books"。创建完成后切记要开放该文件夹对所有用户的读写权限,否则 Calibre Web 将无法正常运行。 共享文件夹配置完成后,在群辉的套件中心中选择安装 docker 并打开它。再在“注册表”页面中搜索“Calibre-web”,此处途中框选的三个镜像都可以下载,它们的区别并不大,这里主要推荐 linuxserver/Clibre-web,在双击后弹出的对话框中选择“latest”并点“确定”开始下载。 镜像下载成功后(系统右上角会弹出提示),进入 docker 的“镜像”页面选择刚刚下载好的 linuxserver/Clibre-web 镜像,点击启动。在弹出的对话框中,点击“高级设置”,再按下图所示进行设置即可。 ...

2020-05-12 · Mason

可能是最好用的记忆辅助工具 Anki

对包括我在内的相当一部分人来说,记单词几乎已经成为一种刚需。无论是为了应付考试、取得各类等级证书还是单纯提高语言能力,词汇都是我们不得不正面应对的挑战。而在如今这个互联网时代,捧着厚重的词汇书或者词典进行背诵的方式已经被大多数人所抛弃,因为它既枯燥又低效,不仅会消磨我们学习一门语言的热情,还不利于培养语感、付诸实用。 在这样的背景下,一众“背单词”软件应运而生。这其中就包括开心词场、扇贝英语和百词斩等较为优秀的产品。但是,这些软件或多或少都存在着以下几点无法弥补的缺陷: 词库多为厂商事先制作而成,缺乏根据个人情况进行定制的空间,灵活性不强。 支持的语种多为英、日、韩等热门语种,无法满足小语种(如希伯来语)学习者的需求。 出于营利目的,集成了许多不常用的花哨功能,洁面不够简洁。 同样出于营利目的,部分功能仅对付费用户开放,免费用户的使用体验受限。 凡此种种,都构成了我长期无法找到适合自己的背单词软件的原因。然而,就在将近两年前,也就是我正在准备研究生考试的时候,我遇到了 Anki 这个神一样的记忆软件。之所以称它为“记忆软件”而非“背单词软件”,是因为它几乎支持所有需要记忆的内容格式,而不像上文提到的众多“专业软件”那样只能用来背特定语种的单词。实际上,只要你愿意,Anki 可以被用来记忆唐诗、成语,甚至纳瓦霍语。 简单来说,Anki 是一种利用类似于 Flash Cards 的卡片机制来辅助记忆的,支持高度定制化的工具。到目前为止,我发现它具有以下几个传统背单词软件所不具备的优点: 支持几乎所有内容形式,只有你想不到,没有 Anki 不支持的内容。 不仅支持传统的翻面单词卡,还支持诸如填空题、选择题等多种答题形式,满足各类需求。 根据艾宾浩斯遗忘曲线科学定制学习和温习计划,保证高效利用精力和时间。 云端实时备份词库和学习进度,并支持包括 PC、Mac、iOS、Android 等类操作系统,让用户可以轻松跨平台同步学习进度,随时随地进行学习。 支持牌组导出导入,结合活跃的社区和各类资源分享渠道,使那些不愿意自己制作牌组的用户也能通过下载并导入前人制作好的卡组来高效进入学习状态。 Anki 的桌面端(包括 Windows 和 Mac)和手机端(包括 iOS 和 Android)的功能几乎完全相同,但前者完全免费而后者必须付费。如果你既不愿意付费也不想使用盗版,那么只使用桌面版即可。这样除了无法获得多平台同步学习的体验外,不会受到任何具体功能上的限制。 Anki 的桌面端界非常简洁,你可以通过点击“新建记忆库”来自定义录入自己的牌组,也可以点击“获取牌组”以进入 Anki 官网浏览和下载其他用户上传的现成牌组。另外,在诸如淘宝或闲鱼等交易网站上也会有卖家有偿销售自己制作的 Anki 牌组,如果你购买了那些牌组,那么只要点击“导入文件”按钮即可将买来的牌组轻松导入。 以手机端为例,在学习牌组的过程中,我们可以根据自己的答题状况点选下方不同颜色的按钮。这样,Anki 就会将相应卡片加入对应的温习序列中,并根据艾宾浩斯遗忘曲线,结合我们后续的回忆状况,动态地安排学习计划。可以说,Anki 的这种根据个人记忆状况动态定制学习计划的特点,是使它从众多“背单词软件”中脱颖而出的最根本原因。 去年的这个时候,我正在准备所报考学校的研究生复试。如果说我的研究生外语考试能够取得理想成绩“多半”是我自己努力的结果的话,那么 Anki 便是那“少半”的原因。

2020-03-26 · Mason

MacOS 10.15.4 更新 iCloud 文件分享功能

相比于国外而言,中国国内的公共网盘生态好似一潭死水。这其中固然也有厂商不思进取的缘故,但更主要的还是政府对网络信息的严密审查,使得公共网盘服务提供商很难在维持自身生存和提升用户体验之间取得平衡。 经过几年前的一阵腥风血雨之后,目前国内叫得上号的公共网盘只剩下百度网盘、域通网盘和坚果云等。其中最臭名昭著的非百度莫属,其不仅对非会员用户有着苛刻的功能限制(地容量+下载限速),并且身型极其臃肿、拥有很多大多数用户完全用不到的冗余功能。相比之下,坚果云就要好不少,它对免费用户只做月流量方面的限制,除此之外既不限制速度也无冗余内容,可以说非常良心了。 然而与百度网盘生成链接直接分享的便捷性相比,坚果云在文件分享方面又稍显不足。因此在目前国内的公共网盘生态中,想要免费使用一个功能简洁、分享方便又不限速的网盘产品,几乎是不可能的。在这种情况下,很多用户开始转向私有云(NAS)方案,即建立私人的网络存储服务器,如购买群晖或 QNAP 的 NAS 主机或自行组装一台 DIY 主机。但无论是前者还是后者,都具有一定的技术门槛,并不适合所有用户。 作为苹果产品生态的基础性服务,iCloud 几乎为所有苹果设备用户所使用。无论你是否意识到,只要你用 iPhone 拍过照,你的照片就会自动被存储到你的 iCloud 中。无论你是否付费,只要你注册一个 Apple ID,你就会得到 5GB 的 iCloud 存储空间。虽然这个容量并不算大,但仅用于存储日常拍摄的照片和办公文档,是完全足够的。多年来,icloud 的封闭性一致为人们诟病。可能是出于数据安全的考虑,苹果并不允许用户将自己 iCloud 网盘中的文件分享给其他人。但好消息是,这一状况在最新一次的 MacOS 系统更新中被彻底改变。 今天上午,当我打开电脑准备开始今天的工作时,发现苹果推送了最新版本的 MacOS 10.15.4 系统更新,更新说明里面赫然写着羡慕一段话: 也就是说,iCloud 终于支持对外分享文件了!于是我立刻更新了系统,想尽快体验一下用 icloud 分享文件的感觉。在新版本的系统中,只要在 icloud 文件上右击鼠标,选择“共享”,再点“添加用户”,即可生成该文件的分享链接。 打开“添加用户”对话框后,我们可以对共享链接进行相应的设置。如果我们只想对受邀请的用户共享文件,那么不仅要在下方将“有权访问的用户”设置为“仅限于受邀用户”,还要在上方填写我们所邀请用户的邮箱。注意,目前“受邀用户”功能只对其他 Apple ID 开放,填写的邮箱也必须是 Apple ID 的登陆邮箱。 如果我们想要创建公开共享链接,而不是只针对特定用户开放浏览,那么我们可以选择“任何拥有链接的用户”。这样,只要将我们创建的共享链接发送给其他人,拥有链接的用户就可以随时打开相应链接浏览文件。 另外,我们可以在下方的选项中设置共享文件的访问权限。其中“仅查看”是只读权限;“可更改”是读写权限。 设置完成后,通过点击下方的“共享”按钮,我们就为指定文件创建了一个共享链接。共享链接创建完成后,它会自动地被复制到我们的剪贴板中,并且相应 iCloud 文件的名称后面会出现“由我共享”字样,便于我们事后查找。 现在,我们就可以将复制好的共享链接发给其他用户,让他们通过浏览器打开该共享链接来读取或更改相应文件了。值得一提的是,如果共享文件是 PDF 等格式的文件,打开共享链接即可直接预览其内容,而无需先下载再查看,非常方便。

2020-03-25 · Mason