冬季自建图书馆指南 | 如何构筑一个预防华氏451的内容服务器

阅读本文大约需要: <1 分钟

圣经·旧约·以赛亚书29:11 所有的默示,你们看如封住的书卷,人将这书卷交给识字的,说:请念吧!他说:我不能念,因为是封住了。 12 又将这书卷交给不识字的人,说:请念吧!他说:我不识字。


冬天里的一把火,将一个叫做镇远的小地方烧得火热。

看看我那徒有四壁的书房,不知道怎么就走神了,从翻译切换到电子书模式。大概是有位朋友今天在微信公号上班了我的门,弄了他的斧,说我的ssd盘是不安全的,容易永久性丢失数据。我回应说,其实我不仅有ssd,还有硬盘,还有自己运行的nextcloud云服务器,还有其他几种备份,大概一时半会儿还不会丢失数据。

但转念一想,最近10年来几乎已经不再买纸质图书,几乎全部的书籍都是电子书,早有必要建一个内容服务器。自从国庆节期间calibre 4.0出来之后,据说内容服务器全部重新写了代码,大概是尝试一下的好时机了。有了内容服务器之后,所有的书籍不仅有了一个相对安全的存储(物理介质和域名都上不在.cn上),而且更加方便日益增加的用手机查询的需求。


折腾的过程就不说了。我的服务器是2T硬盘,8G内存,i3-4核3.4G,再加一两个服务进程,大概无关紧要。不要用calibre自己的说明文档,直接简单粗暴地:

sudo apt install calibre

可以将所有依赖包全部安装齐备。

然后根据plembo在github上说明文档设定用户,目录结构+权限,初始化了配置文件,创建了系统服务进程,配置了Nginx反向代理。

随后在域名管理服务上增加了一个Library的二级域名,用certbot申请了ssl证书,这样才能在我强制性的"HTTPS Everywhere"浏览器上安全地访问内容。

随后,用calibre-server –manage-users 结合 –userdb配置一个用户账号数据库,就可以启动服务器了:

/usr/bin/calibre-server \ 
--enable-local-write \ 
--userdb /.../userdb \
 --enable-auth \
/...calibre-library/  \
--port=xxxxx

但是calibre自己带的web服务器并不太好,界面难看,阅读器难看,用户鉴权也很初级。

所以,我又回头安装一个更友好的界面:calibre-web。安装方式也很简单,一个Python写的web服务器。照样用nginx设置反向代理,做一个系统服务进程,启动服务就可以了。

这是我的calire-web界面:

看起来还行,可以增加用户,分配访问和浏览权限,分享图书等等,甚至可以支持外部用户的公开注册(虽然对我没什么用处,但这就差不多是一个完整的电子图书馆的功能了,那些希望存储100万册电子书的教会可以考虑了)。


余下的问题是将本地的图书馆上传到服务器。数据量比较大,所以我安装了一个resilio sync.

操作也比较简单,根据系统自带说明书安装即可。

同样去域名管理上设定一个二级域名,申请一个ssl证书,将同步的端口隐藏在nginx的反向代理背后。

愉快地打开同步界面,开始同步我的图书馆。


唯一的问题是,calibre和resilio都是极为敏感的服务,所以干脆用ufw将所有端口全部封闭了,指留下了几个必要的服务器端口。

测试结果一切正常,邮件服务、nextcloud云服务、calibre内容服务都能正常访问。只是resilio同步服务被阻断。

不过,利用rslsync-ufw.sh将系统所需的各种中继服务器、配置服务器和直连服务器打开之后,一切暂时恢复到正常状态。按照目前的进展,大概明天能够上传所有的图书,做完我的个人电子图书馆。


技术让人头痛,说点别的吧。

重复一遍,网络访问的问题是两个问题:

  1. 如何访问更多的网站和信息

  2. 如何安全地使用网络和手机通讯

因为网络管制的原因,许多人错误地认为网络安全就是如何使用vpn访问外部的网站。实际上这是一个很严重的误解。

网络安全主要是一个人的安全意识和使用习惯问题,而习惯的改变比掌握技术要难上许多。我在不同的场合说过输入法的问题,使用国内厂商开发的云同步输入法或者语音输入法或者手写识别输入法,就不要再谈任何其他安全问题了,signal或者protonmail已经没有意义,因为你输入的每一个词(包括你输入之后删除的每一个字),都已经在云服务器上备案了。而且你已经建立了一个直接从键盘到服务器的信道(而且很多输入法还是明文传输,也就是说一位黑客靠着你的wifi就可以获取你输入的全部内容)。剩下的问题只是有关方面想不想看你的屏幕而已,你已经放弃了一切安全原则,开门裸奔了。

使用部分的安全措施,只是为我们提供了虚假的安全而已。但是改变习惯仍然很难,改变初期提升学习曲线的阵痛,很容易让人放弃抵抗,心想,我们要防备的大公司和黑客技术上比我们强大得太多,我做什么都没有用处,不如自己用微信算了。

这样的想法并不对。因为防御总是比进攻容易,构筑一座固若金汤的坚城,比如网上屹立十多年不倒的“编程随想”先生那样,无数背景深厚的黑客威胁要揭露他的身份却无一成功,事实上是可以做到的。


我有些文章似乎偏向技术。这是我自己的技术日志,因为过一段时间总会重装这些系统,记录一下过程能节约不少时间。(我的书已经上传到C.S.Lewis了,还有23个字母就完工了)。

但许多人需要鼓励和信心,知道有些问题在技术上是可以解决的,或者知道哪些问题,是有解决方案的,如何需要解决,找一个技术专家就能处理。

安全技术就像疫苗,使用的人越多,所有的人都会越加安全;用户群体越大,也越发容易说服更多的人迁移工具。经过好几年的时间,现在我们基本上已经将signal推动到大家接受的程度,总体上看,所有人的安全性都提高了。如今还不用signal的人,已经被我排除在“释经讲道工作坊”的听众之外了。这是一种迫不得已的措施,希望借着每一次的工作坊,多推动几个人安装signal。其实我并不太使用signal,因为signal服务器和公司注册在美国;我情愿使用更安全、开源,注册在欧洲的wire,只是wire被封锁得厉害,不经过vpn就出不去,所以暂且还无法推动而已。

我有一些朋友从前对signal珍而重之,从来不给别人分享,提到的时候也不说名字,只用“S”代替。因为他们认为,使用的人多了,就会引起关注,于是就会被封,于是就再也没有安全的通讯手段了。这种态度下,他们自己的安全实际上更加没有保障。大隐隐于市,大鱼隐于海,用户越多,使用的人才会越安全,这才是正理。


对于我来说,写作是一种服事。有的时候,朋友们看着这些文章,告诉我他们心里捏着一把汗。他们说Eddy同学太美国化,似乎完全心无城府,什么事情都在公开谈论,能活到现在,似乎有点不应该。

但至少可以说,技术是中性的。介绍技术,让更多的人知道计算机和网络安全的常识,是我多年教书的本分。一切优秀的工业级的加密算法都应当是开源的,可以公开验证的。这样才可以让人审查算法的可靠性和安全性。秘密的部分只有密钥,这才是加密领域的常识。

同样,我介绍的技术都是简单可以执行的,唯一的问题在于一个人愿意付出多大的代价来实施,——比如购买和部署一台独立的数据服务器,将邮件系统和数据(包括图书馆)部署在自己的服务器上,以高强度的加密算法来保护。

而在线图书馆的技术,无论是个人使用,还是将来教会内部要部署,最终大概我们都得走到那一步上面去。最近我们使用zoom等录制的视频课程也很难下载,所以各种p2p同步工具,比如resilio之类,渐渐也开始需要起来。

或许,这就是华氏451之后的常识和常态。

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.