2019 年一整年都在履行着一件事情,那就是把以前所有用过的云服务替换成自己部署的私有云服务。
我是很多年 的 Dropbox 用户,至今为止所有的设备上也都安装着 Dropbox, 很多经常性使用的文件,配置也都在同步着,除了有些时候的网络问题,绝大部分使用完全没有问题。但之后陆续接触了一些其他文件同步工具,比如 pCloud,知道了原来可以端到端同步让文件同步更加安全;知道了 NextCloud,原来可以把数据交付给自己,让自己的数据更加安全;之后又知道了 Syncthing,原来可以让数据交换不像 NextCloud 那样走中心节点,可以自己实现一套分布式的文件同步系统,甚至这套系统部署节点越多,同步速度越快,并且不用互联网也能用。
所以最后的结果就是我彻底放弃了中心化的同步工具 (Dropbox, Google Drive),转而使用分布式的 Syncthing,并且让 Syncthing 同步原来的 Dropbox 文件夹,无痛迁移。
代码托管倒是没太多可谈的,毫无疑问 GitHub,最多在配置一下 mirror, 定期从 GitHub repository 中备份到 GitLab 或者自建的 Gogs 中。
另外 Gogs 的社区 fork 版本 Gitea 也不错。
笔记是另一个重头,之前从 Evernote 叛逃 到 WizNote,陆陆续续也续了三年会员,但一直也非常担心 WizNote 做不下去,所以一直留着一手,方便快速导出走人。
不过前不久再次发现 Joplin,作为一款本地笔记应用非常完美,唯独缺少同步功能,不过 Joplin 依赖本地文件,那么用上面提到的文件同步工具就完美地解决了同步问题。
另外 leanote 似乎也是一个自建不错的选择,不过目前我没尝试。
最近 QNAP 后台换了内存后起了很多应用,已经到了完全记不住端口的地步,为了不用每次都登录后台查看,只能用记事本记着,略感不方便,所以想起了能不能搞一个导航页给我自己用。所以就找到了 webstack,webstack 看到有好几个实现,不过其他的都需要数据库,不如纯文本来的方便,所以直接搞 Jekyll 的。
让其初始化就是缩小状态。
之前有文章写过如何在 Qnap 上使用 Container Station 来安装 NextCloud,之前重度使用 NextCloud,里面已经存了近 70G 的文件内容,这次系统重建后,下载新的镜像,然后重新恢复,费了一番时间,主要是恢复数据库,然后还有本地挂载的文件,以及升级版本。
从备份的角度来看,也正是这三个部分比较重要:
以上三个内容,前两个需要完全备份,否则会造成数据丢失。第三个则可以从 Docker Hub 上拉下来。
docker pull nextcloud:latest
我是从 13.0.4 版本的镜像升级到 14.0.9 版本,升级后重启容器,出现了如下的错误:
AH00169: caught SIGTERM, shutting down
调查发现,NextCloud 在升级过程中将自己变成了维护状态,这个配置在数据目录下的 config/config.php
文件中,打开该文件,搜索 maintenance
:
'maintenance' => true
将 true 改成 false, 然后重启容器,即可进入 NextCloud 应用。
使用同样的方式,将 NextCloud 从 17 版本升级到 18 版本。
访问 ip/status.php 会看到:
{"installed":true,"maintenance":true,"needsDbUpgrade":true,"version":"18.0.11.2","versionstring":"18.0.11","edition":"","productname":"Nextcloud","extendedSupport":false}
报错内容:
InvalidArgumentException: Column name “oc_flow_operations”.”entity” is NotNull, but has empty string or null as default.
解决方法,见 issue,因为我使用的是 MariaDB 所以:
alter table oc_flow_operations add column entity character varying(256) not null;
如果是其他数据库可能需要对应的 SQL 语句。
从 NextCloud 18 升级到 NextCloud 19 没有遇到什么坑。
将 Nextcloud docker 镜像升级到 20.0 没有遇到问题。
同样也没有遇到问题。
都知道其实 QNAP 的 Container Station 就是 Docker,所以桌面版可以修改的国内镜像地址,QNAP 系统上也能够修改,可以快速提高镜像的下载速度。
其实在网页管理段也能够手动添加,在 Container Station 属性中,Registry 服务器可以手动添加。
或者我们可以 SSH 登录到后台,然后手动编辑配置文件,docker 的路径是 /share/CACHEDEV1_DATA/.qpkg/container-station/
然后在该目录下有 etc/docker.json
文件,手动修改该文件:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
然后重启 Container Station 服务:
/etc/init.d/container-station.sh restart
可用的镜像地址,可以参考我另外一篇文章。
version: "2"
services:
bookstack:
image: linuxserver/bookstack
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- DB_HOST=10.0.3.1:3306
- DB_USER=bookstack
- DB_PASS=password
- DB_DATABASE=bookstack
volumes:
- /share/Container/bookstack_config:/config
ports:
- 6875:80
restart: unless-stopped
version: '2'
services:
filerun:
image: afian/filerun
container_name: filerun
environment:
FR_DB_HOST: 10.0.3.1
FR_DB_PORT: 3306
FR_DB_NAME: filerun
FR_DB_USER: filerun
FR_DB_PASS: password
APACHE_RUN_USER: www-data
APACHE_RUN_USER_ID: 1000
APACHE_RUN_GROUP: www-data
APACHE_RUN_GROUP_ID: 100
ports:
- "30080:80"
volumes:
- /share/filerun/html:/var/www/html
- /share/filerun/user-files:/user-files
restart: unless-stopped
docker run --name=calibre-web --restart=always \
-v /share/vol4Book/CalibreBooks:/books \
-v /share/Container/calibre-web/app:/calibre-web/app \
-v /share/Container/calibre-web/kindlegen:/calibre-web/kindlegen \
-v /share/Container/calibre-web/config:/calibre-web/config \
-e USE_CONFIG_DIR=true \
-e APP_REPO=https://github.com/janeczku/calibre-web.git \
-e APP_BRANCH=master \
-e SET_CONTAINER_TIMEZONE=true \
-e CONTAINER_TIMEZONE=Asia/Shanghai \
[-e PGID=100 -e PUID=1000 \]
-p 8083:8083 \
technosoft2000/calibre-web
docker run -d \
-v /share/NextCloud:/var/www/html \
-p 20080:80 \
nextcloud
docker run --name=gogs \
-p 10022:22 \
-p 10080:3000 \
-v /share/gogs:/data \
gogs/gogs
Tiny Tiny RSS
docker run -d --name ttrss --restart=unless-stopped \
-e SELF_URL_PATH=http://192.168.2.200:181 \
-e DB_HOST=10.0.3.1 \
-e DB_PORT=5432 \
-e DB_NAME=ttrss \
-p 181:80 \
wangqiru/ttrss
全文插件:
docker run -d \
--name=mercury-parser-api \
-p 3080:3000 \
wangqiru/mercury-parser-api
version: '3'
services:
weblate:
image: weblate/weblate
volumes:
- /share/Container/weblate/weblate-data:/app/data
env_file:
- ./environment
restart: always
ports:
- 5080: 8080
depends_on:
- database
- cache
database:
image: postgres:11-alpine
env_file:
- ./environment
volumes:
- /share/Container/weblate/postgres-data:/var/lib/postgresql/data
restart: always
cache:
image: redis:4-alpine
restart: always
command: ["redis-server", "--appendonly", "yes"]
volumes:
- /share/Container/weblate/redis-data:/data
还需要把这个项目 中的 environment 文件拷贝过来,然后再:
docker-compose build
docker-compose up
docker run -d \
--name rrshare \
-p 3001:3001 \
-v /share/rrshare:/opt/work/store \
oldiy/rrshare64:latest
docker run -d \
--name=lychee-laravel \
--restart always \
-v /share/Container/lychee/conf:/conf \
-v /share/Picture/Lychee:/uploads \
-e PHP_TZ=Asia/Shanghai \
-e PHP_MAX_EXECUTION_TIME=600 \
-e DB_CONNECTION=sqlite \
-e DB_DATABASE=/conf/lychee.db \
-p 90:80 \
80x86/lychee:latest
docker run -d \
--name=flexget \
-p 3539:3539 \
-v /share/Container/flexget/data:/data \
-v /share/Container/flexget/config:/config \
-e FG_WEBUI_PASSWD=password \
-e FG_LOG_LEVEL=info \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
wiserain/flexget
上周五 NAS 系统盘挂掉后一个周末都没有过好,一边忙着备份数据,一边要忙着整理系统应用和配置。早以前除了云端同步数据曾经出现过一两次数据丢失的情况,本地保存的数据还没有出现过管理的问题,系统会用 Clonezilla 全量备份,笔电日常数据则辅以同步工具 Dropbox(后替换成 Syncthing) 和自建的 NextCloud,平时丢数据的可能倒是比较小,但唯一疏漏的 NAS,因为硬盘不是一次性买全而是分了几次购买,所以从一开始就没有规划好如何存储与备份,而系统的酷狼 4T 盘可能经过几次家里停电,SMART INFO 出现警告的时候也没有想到备份,所以造成了从周五开始突然系统盘变成只读状态,无奈只能立即开启 rsync 手动先将系统盘中的数据备份到其他盘。等到周日把损坏的系统盘送修之后,是时候来思考一下如何管理及备份本地数据了。
经过这一次的“事故”,倒是没有丢数据,但是却是一件非常闹心的事情,去年花了一年的时间渐渐的逃离了云端服务,将照片从 Google Photos 离线到本地,将音乐从网易云音乐离线备份了一份到本地,想想这一切非常美好,没想到发生这么一件事情,所以也渐渐感受到本地 RAID 的重要性,对于重要的数据在本地一定要有一份备份。
原来我对数据的划分非常模糊,一股脑的备份笔电磁盘中所有数据,当然这种不会出现漏备份某些文件的情况,但这也是成本比较高的一种做法,不仅备份数据量大,并且备份的过程也比较长。而经过这次的事故,渐渐的对需要备份的数据有了一定区分度,由我产生的文件一定是最重要的,备份等级最高,包括我自己写下的文本(笔记,博客,TODO),拍摄的照片视频,代码文件,配置以及数据库文件(当然绝大部分代码都是 git 在另外有备份),不过还有一种非常容易忽略的就是,创建的比如音乐歌单,读书列表,在 Trello 中的 Task 等等,当然大部分情况下都是对应的服务中,网易云音乐就曾经莫名其妙地弄丢我一个歌单,这些”文件”都需要提高备份级别。
所以简单的来说数据需要分类处理,依据重要程度不同需要备份的方法也可以有对应不同,就目前我个人遇到的情况而言。
几大类由我产生的重要数据:
几类由我整理收集的数据:
针对上面这些数据,分别有不同的备份方法:
对于纯文本的内容,适合 git 来备份,commit && push 就能够至少在两地有备份了。Git 的分布式特性天然的适合文本的存档和备份管理。
适合 git 来备份的有:
对于云同步工具,适合同步二进制文件,比如文档或者图片。
从 2020 年中开始,就陆陆续续将 Dropbox,NextCloud 替换成了 Syncthing,几乎是无缝的迁移,将同步的文件夹添加到 Syncthing 中,我的所有设备都加上 Syncthing 的客户端进行同步。
对于需要备份,但是查看次数非频繁的文档,适合单独使用硬盘来备份,比如:
对于媒体文件,尤其是较大的电影,电视剧,图片,等等适合使用单独的备份盘来备份。
使用 OpenMediaVault 的系统使用 SnapRAID 来对磁盘做冗余备份,以防止一块硬盘挂掉。
macOS 下有 Time Machine 备份,Linux Mint 下可以使用 rsync 来备份,如果是 Windows 或 [[Proxmox VE]] 我就是用 Clonezilla 来备份一个分区。
对磁盘的管理,对数据的种类进行划分,对不同的数据进行不同的备份处理。
如果磁盘存放的是个人数据,则要尽量减少磁盘的写入,尽量在备份的时候对磁盘写入,从而延长磁盘的寿命,如果可能这部分个人数据尽量使用 RAID1 或者 RAID5,做到即使有一块磁盘故障时数据不会丢失。
而另外一类场景则是下载电影,当使用 BT 或者 PT 时,磁盘会有大量的读写会大大减少磁盘的寿命,所以我的建议是单独使用一块磁盘作为下载盘,有对磁盘的大量不间断读写时都存放到该磁盘,并周期性对磁盘进行维护,比如使用同步工具定时将数据移动或者拷贝到另外的磁盘中进行保存。
网上有一种说法,说家用 RAID 实际用途并不大,这句话并不完全正确,如果家用 24h 挂机 PT 的话,如果数据是写到 RAID5 中,那么实际上三块磁盘都在工作,无形中就同时降低了三块磁盘的寿命。如果是常年 PT 的话,还是根据个人情况来选择最合适的方案。
平时没有注意备份 QNAP 上系统盘的数据,从昨天开始系统盘突然只读,而无法写入,发现磁盘有问题了,无奈只能边申请售后,边想着怎么备份数据,还要恢复这么多的配置。
平常的哪些文件备份倒是还好说,但是一直有用 QNAP 提供的 SQL server 服务,这部分数据平时也没有 mysqldump 下来,所以这就变得比较尴尬,但是 sql server 还有一种方法可以从物理文件中恢复。
用 ps 工具查看可以看到 1:
/bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/var/lock/qmysql.pid --user=admin
datadir
就是 marialdb 真正存放数据的地方,ssh 进后台,备份该部分数据。
在该目录中能看到不同的文件
通常情况下 linux 是在 /var/lib/mysql/
文件夹下,QNAP 的地址是 /usr/local/mysql/var
目录下。
使用 rsync
将该目录下的数据全部备份到另外的磁盘上
rsync -azvhP --progress /usr/local/mysql/var/ /share/Backup/mysql_var/
等 QTS 系统安装完成后,再使用 rsync 来将数据恢复回来。
750 小时的运行时间,Amazon Elastic Compute Cloud (Amazon EC2) 是一种 Web 服务,可以在云中提供安全并且可调整大小的计算容量。
对象存储服务
MySQL、PostgreSQL、MariaDB、Oracle BYOL 或 SQL Server 的托管关系数据库服务。
快速灵活的 NoSQL 数据库,具有无缝可扩展性。
计算服务
快速、灵活、完全托管的推送消息收发服务。
1000 封电子邮件
虽然网易云音乐发布了 Linux 版本的客户端,但网易隐藏的云音乐的上传入口只有 Windows 版本的也有,所以这里记录一下如何在 Linux Mint 下使用 PlayOnLinux 来安装网易云音乐 Windows 客户端。
安装过程比较简单,我个人使用 Wine 3.20 版本,然后按照 PlayOnLinux 提示的步骤一步步执行即可。
2019 年没有系统性阅读,只是把早先想看的书,看到什么感兴趣就直接看了,也没有目的性,有政治的,有历史的,也有专业书,还有小说。
原来是想在 2019 年 12 月底来整理这篇文章的,大纲已经列好,但是一直躺在了草稿里面,现在是 2020 年年底的时候突然想起来,就着大纲,以及今年在重新整理自己的笔记之后,重新回顾一下自己的 2019 。
之间几年的读书笔记:
五星推荐,这本书是我关于[[言论自由]]进行认知的第一本启蒙书,之后陆陆续续看过的书,《言论的边界》,《九人》,《牛津通识读本:托克维尔》,《大法官说了算 - 美国司法观察笔记》,《牛津通识读本 - 法哲学》,《美国宪政历程 影响美国的 25 个司法大案》,《美国国会》,《联邦党人文集》,《美国政党与选举》大多也能够进行关联。
关于言论自由的边界,从美国建国之初到今天,虽然都一个基本的共识,但细节部分仍然在不断地被完善。
说自由会带来混乱的人,必定是没有了解过美国的宪政历程,关于言论自由的方方面面,不对言论进行事先的限制是多少人花了多少代时间争取到的权利。纽约时报诉沙利文案中的法院意见,「在自由辩论中,错误意见不可避免,如果自由表达要找到赖以生存的呼吸空间,就必须保护错误意见。」
而对言论的事后审查则多多少少走过一些弯路,其中霍姆斯大法官在其中扮演着重要的角色,他首先使用了,对于事后的言论审查中,只有「明显而即刻的危险」才能进行惩罚。而另一位影响深远的勒尼德汉德法官认为,只有直接煽动暴力的言论才应当受到惩罚,仅只是批评政府政策的言论,无论是委婉的还是露骨的,都不能惩罚。意见的自由表达是权力的最终来源。
而对于媒体,法院的判决更加强了媒体的重要性。人民有权获得政府作为或者不作为的全部信息,公共意见的交流和传播是遏制腐败最有效的方法。而媒体正是在这样的过程中扮演着至关重要的角色。布伦南大法官这样写到,「对公共事务的讨论不应当受到阻碍,即使那些对政府和公职人员的言论包含激烈、苛刻、有时甚至令人不悦的言论,这些言论也不应该被阻止」。
关于言论自由和隐私权上,虽然最高法院已经将媒体的言论自由对象扩展到了公众人物,包括社会名流,影视明星等等,但对于普通人,是否可以声称自己的隐私权而状告媒体,最高法院虽然至今依然偏向媒体,但无疑隐私权已经作为一个实际上的权利被不断的提起。言论和出版的自由对于保障人类的自由来说,无疑是重要的;但对于构建一个健康的社会,这不是唯一需要考量的。
虽然宪法给予了媒体,以及从事媒体行业的记者以巨大的权利,但遇到记者需要保守信息来源,以及法庭命令其公布信息来源的时候,也会遇到冲突。记者拥有的只是「有限特权」,在遇到具体的案例时,依然有可能失败。
书中的最后几章在讲述思想的自由。思想自由和言论自由同样重要,政府不得仅仅以为社会中认为某种思想令人厌恶就禁止人们对这种思想的表达。霍姆斯大法官有一句话流传甚广,那些为我们所痛恨的思想,同样自由。
托克维尔在非常年轻的时候根据自己的游历就写出了如此观察细致的巨作。这可能是我系统的观察美国而看的第一本书,但也正是这本书为我在 2020 年看其他相关著作的时候打下了基础,托克维尔以非常平和的心态写下了对美国的观察,既没有过分的赞美,也没有恶意的贬损。更甚至比谁都看出美国制度中可能存在的问题。
《论美国的民主》分成了上下两部,托克维尔在上部中描绘了他看到的美国现状,包括风土人情,制度设计,司法权利,出版自由,公民自治等等,下部中将自己的观察和思考进一步的凝练,描述了美国的思想潮流,以及宗教信仰,科学艺术,文学戏剧等等方面可能的影响。也进一步的预言了在这样的社会环境中对生活在其中的人可能带来的改表。
汉娜阿伦特在这本书中提出了著名的「平庸之恶」,一个人不是想要做极恶的事情才会实施暴行,恶行的发生可能仅仅是一个人不思考,这个人不是道德败坏或者心理变态,而只是屈服了自己的惰性,放弃了思考,选择了无条件的顺从,这样的人同样会做出极恶的事情。
在一个高度技术化和官僚化的世界里,无声无息地铲除「多余」的民众同时又不引起公众的道德愤怒,可能会变得司空见惯。
阅读这本书,最大的收获便是获知了汉娜阿伦特这位作者,在编辑完其中文的维基百科后,又陆陆续续的看了她的其他作品,《极权主义的起源》,《过去与未来之间》。
美国制度中的三权分立,行政,立法和司法,最早看得是司法分支的《牛津通识读本 最高法院》,觉得牛津通识读本这一系列的书,短小精炼,不失为入门首选。所以就在 Kindle 上看完了这一部。这一本书也相对完整的介绍了国内的诞生,竞选方式,参众两院的运行方式,以及国会在整个美国的位置,以及和其他两个分支的相互制约,最后一章讲述了国会大厦。相较于白宫,国会大厦和最高院出现在影视剧作中的画面没有那么多,但围绕在议会大厦周围的建筑群还是别具特色的。
孟德斯鸠花了 20 年时间撰写的著作,在这部书中提出了著名的三权分立,但孟德斯鸠所说远不止于此,在政治理论方面提出了:
在法律理论上,反对酷刑、主张量刑适度,刑罚应该富有教化意义,舆论威慑可以作为阻止犯罪的工具,只惩罚行为,不惩罚思想、语言。在经济理论上,认为私有财产是人类的自然权利,主张工业和贸易。这是一本让我看完之后第一次感受到我们确确实实活在了过去思想家的思考中。孟德斯鸠通过对历史和当时社会的观察便能思考出如此超前的观点,着实令人钦佩。
汉娜阿伦特的另外一部作品,对我来说有些艰深,如果不了解那个时代,或者不了解阿伦特本人,第一遍读的时候对我来说很难提炼出阿伦特的观点,虽然这几个名词已经被无数的作品反复的解释过了,但要真正的去定义什么是「极权主义」,还略微有些难度,而阿伦特说,极权主义就是将世界上的所有界限抹平,不考虑人的多元性,将人认为是集体中的一员来对待。极权主义不同于以往的专制,在 20 世纪对人类历史造成的巨大的伤害,但对其的研究,这是我看的第一本。
一般也不会特意去找摄影相关的书籍,只是看到有对应的题材,在看其他类别的书的中间带着看了一下。
谋划着想要去日本走一走,所以大量的阅读了相关的书籍,只不过到现在也依然只能说对日本的了解九牛一毛,对日本近现代史的了解稍微多一些。
很多年前写过一篇 Rime 配置,这几年陆陆续续,用过搜狗,也用回过 Rime,还试过 Linux 上其他的输入法,但是最后终于在 2019 年完全的切换到 Rime 下,并且经过一系列的折腾发现 Rime 的能力远远超过我的想象。其实输入法是一个及其有依赖性的工具,输入习惯,输入的常用词等等,都累积在了输入法中。这些年输入法引入了云同步功能,但我倒是觉得带来的便利性甚至不如其带来的缺点,唯一的好处是记录输入习惯,和常用词库,但是实际上可能带来的问题更多,比如
就像 Rime 自己说的那样,Rime 是一个输入方案的合集。所以只要有合适的输入方案,就可以输入对应的语言,从方言,到世界其他各国的语言,Rime 都可以轻松的实现,甚至可以借助 Rime 来实现一套自己的输入编码方案,比如官网教学中的一套输入中文大写数字的输入方案,定义 schema, 字典,然后就实现了一套中文大写数字的输入法。
Rime 输入法不会联网,所有的配置都以文本的方式保存在本地,虽然一定成都上削弱了 Rime 的便捷性,但实际上就加强了 Rime 的安全性。只要保证自己的电脑安全,所有的数据都是安全的。
Rime 输入法从外观到词库,到甚至到输入方案都可以自己定制。熟悉 Rime 的机制后,完全可以使用 Git 将一整套配置管理起来。你可以使用一个输入法输入多国语言,Ctrl + ` 切换 Schema,非常轻松可以实现。
输入的候选词也能够配置,
可以在 custom_phrase.txt
中配置:
地平线:黎明时分 hzd 2
这样在输入法中输入 hzd
就可以直接出现前面的短语,只要在配置方案中配置了 custom_phrase,就可以使用。
custom_phrase:
db_class: stabledb
dictionary: ""
enable_completion: false
enable_sentence: false
initial_quality: 1
user_dict: custom_phrase
然后在 translators 中加入该词典:
translators:
- xxxxx
- "table_translator@custom_phrase"
如果在 macOS 上还可以添加 lua 扩展,在输入的过程中通过定制关键字,触发 lua 函数的调用,生成输入法结果返回,比如经常在输入法中输入日期,那么可以定义输入 rq
的时候,自动返回当前的日期。