rTorrent 和 ruTorrent 使用

就和之前文章写的那样 , rTorrent 是一个 C++ 编写的 BitTorrent 客户端,ruTorrent 是它的其中一个 Web 界面,其他的还有 Flood 等等。

这篇文章就主要总结一下 rTorrent 和 ruTorrent 的使用和一些我使用的主题和插件。

Docker

linuxserver 提供的 ruTorrent 很好用的。

docker pull linuxserver/rutorrent

如果想在该镜像的基础上增加 MaterialDesign 主题可以:

sudo docker exec -it rutorrent /bin/sh
cd /app/rutorrent/plugins/theme/themes/
git clone git://github.com/phlooo/ruTorrent-MaterialDesign.git MaterialDesign
chown -R abc:users MaterialDesign

最近有时间的话给 linuxserver 提一个 PR,先把 issue 提了

ruTorrent themes

MaterialDesign 是当时用 QNAP 上 rtorrent-Pro默认主题,配色非常舒服就一直用着了。

MaterialDesign

ruTorrent Web UI Material Design

ruTorrent Web UI Material Design Settings 如果还选择其他的主题可以看看这个合集

Plugins

File Manager

ruTorrent 还有一些很好用的第三插件,比如 File Manager,可以直接在网页中对文件进行复制,移动,压缩,重命名等。

对 linuxserver rutorrent 的修改

LinuxServer 的 ruTorrent 镜像提供了最基本的 rtorrent 和 ruTorrent 功能,能用,但是不合心意。本来是提了 issue 和 PR 想把 MaterialDesign 主题提交进去的,后来发现 LinuxServer 本来的目的也并不是大二全,而成提供基础,任何人想要个性化或者扩展功能都可以以他们提供的镜像作为基础来扩展。1

所以我想的是在 LinuxServer 提供的 rutorrent 镜像基础上把我常用的功能给集成进去。

MaterialDesign 主题

autodl-irssi

filemanager

fileshare

rutorrentMobile

适配移动界面:


2020-03-16 bittorrent , tmux , rtorrent , rutorrent , linux , command-line , command

Trello 中使用 butler 进行自动化

Move to Done

Trigger

  • Move to Done

Do


2020-03-12 trello , automation , gtd

番茄工作法

前两天看《软技能》一书作者提到了番茄工作法,回想起上一次接触这个词已经好几年前,虽然日常中也曾经尝试过几次,但都没有坚持下来。看书的过程中我就一直在想没有坚持下来的原因,整理思绪的过程中渐渐的有了一些概念,再结合番茄工作法的基本步骤,我发现遇到了这么几个问题:

  • 目标不够明确,虽然现在我也在用 Trello 做时间管理,但往往发现有些目标无法执行,虽然卡片在那里,但却无法再进一步,又或者是一个非常庞大的目标,比如学习一门语言,行难在可计划的番茄时钟内做到
  • 具体任务不够细分,这一次再读番茄工作法让我印象最深刻的就是番茄工作制定的时间是 25 分钟工作,而这个 25 分钟内只能有一个目标,再接着短暂的休息。我之前一直不太明白为什么是 25 分钟,为什么不是 40 分钟,或者更短,现在我才知道,这个 25 分钟需要和目标结合起来,制定目标的时候就需要知道一个大目标可以细分成多少个小目标,每个小目标能不能在 25 分钟的时间内完成,比如说要写一篇文章,看似可能是一个目标,但实际上应该划分成几个小目标,比如一个 25 分钟时间内收集相关的材料,以及列大纲,再一个 25 分钟的时间内通读相关内容, 最后集中时间来进行书写。而我常常犯下的致命问题就是开头就写,中间穿插着搜索,整理,可能再被其他事情分散注意力,再后就会一直把这个 Task 停留着
  • 而上面这些问题最终导致了我的任务无法被追踪,番茄工作法其中非常重要的一环便是记录你的时间,只有把时间记录下来才能统计,分析,学习,分析其中可能的问题,比如在哪一块耗费了大量的时间,作者举了一个非常简单的例子,他在工作过程中多次发现在遇到 Lambda 表达式时需要现查,在系统性分析后,他集中的花费了几个番茄时钟来学习 Lambda 表达式,之后再遇到的时候便将之前的问题化解了

什么是番茄工作法

番茄工作法是弗朗西斯科·西里洛在 1992 年创立的一个工作方式。Pomodoro 来自于意大利语。

为什么要用番茄工作法

  • 制定时间规划,让时间有迹可循
  • 将复杂问题具体化,细节化
  • 以 25 分钟为短期迭代,建立可持续的计划,休息时安心休息,工作时一心一意

美国一份研究显示,员工在公司,大约 3 分钟被打断一次。研究还表明,在电脑屏幕同时开启的窗口数平均是 8 个,精神病学家爱德华·哈洛威尔创造了名词“注意缺乏特征”(ADT) 来描述这个恶劣的现代生活方式。

并行处理和应对干扰的能力都面临同样的瓶颈:工作记忆的容量有限。每一次干扰都会使我们的大脑工作台上的原始信息丢失。当注意力丢失时,找回它需要付出昂贵的代价。1

番茄计时器的精髓

  • 在一天结束时或者一天早晨,记录,处理和可视化,前一天的时间,以及安排今日。
  • 为每项事情制定时间段,番茄工作法这个时间片段通常是 25 分钟
  • 通过简单易用的工具,专注于真正需要做的事情,番茄工作法只需要一支笔,一个计时器,三张纸(今日待办,活动清单,过程记录)

番茄工作法的几个阶段

  • 计划,从积压的工作中提取最最要的活动,填写到“今日待办”
  • 跟踪,确定今日待办后,执行,每 25 分钟
  • 记录,记录执行过程中,中断的次数
  • 处理,从记录的数据中,提取有效内容,比如处理过程中产生的新想法,或者改善一下减少中断次数
  • 可视化,将记录的信息可视化

减少中断的次数

内部

自己造成的“内部中断”,比如在执行一个番茄时钟时,想要回复邮件,想要上厕所,或者诞生了其他想法。这个时候,不能直接中断,而是应该将新想法或者其他不紧急的事情放到“计划外紧急”中。然后在今日待办当前活动中记录一个撇号,表示一次中断。

如果是因为上厕所而中断的番茄时钟,则需要开启一个新的番茄时钟,来继续。保证番茄时钟的完整性。

外部

别人造成的“外部中断”,应当尽可能的礼貌拒绝。而如果同时面临很多的事情需要立即处理,那么需要立即停止当前的番茄时钟,然后解决当前的事情,之后再开启新的时钟。

  • 告知,“当前正在忙,稍后”
  • 协商,“周五再帮忙处理,可以吗?”
  • 计划,“写下活动,然后为他计划未来的番茄时钟”
  • 答复,按照承诺答复,或者回电

应用的选择

我之前就总结过我选择应用的准则:

  • 跨平台
  • 工具类应用的打开速度
  • 内容类应用的数据可导出,如果不支持导出的话我宁可使用本地代替品

显而易见,选择 Pomodoro 应用的时候必然要考虑到数据的问题。

Pomotodo

KanbanFlow

KanbanFlow = Trello + Pomodoro

将看板和番茄工作法结合。

Pomelloapp

Windows, Mac, Linux

推荐几本书

  • 《软技能》 这是一个程序员写的提升自己的书,和番茄工作法并没有直接相关,但其中表达的思考方式和自我管理的内容值得学习
  • 《番茄工作法图解》书名显而易见

reference

  1. 《泛滥的大脑:信息过载与工作记忆的限度》 


2020-03-09 pomodoro , time-management , todo

常见主板命名规则

最近因为想要组装 NAS,所以简单的了解了一下主板的命名规则。这里将总结一下。

多数厂家遵循一般的规律:

  • 处理器类型
  • 芯片组
  • 芯片类型
  • 基本后缀

芯片组名字由芯片厂商决定,AMD 在发布锐龙后抢了英特尔的命名方式,从低到高端 A320, B350,X370。后来 Intel 推出八代 CPU,只能使用 H310, B360, Z370 方式命名。

芯片的命名也有一定的规律,H 主打低价,B 中档,Z 和 X 系列是高端芯片。Intel 的芯片中如果带 K 的表示能超频,比如 i5-8600K. Z 系列一般可以超频。

芯片组数字 2XX 的支持 7 代 CPU,数字 3XX 支持 8 代 CPU,比如 B360 支持 i3-8100, i5-8500 等等。

华擎

常见的型号比如:

  • A320M-HDV
  • H310M-HDV
  • H310CM
  • B365M-HDV
  • B365M-ITX
  • B365M Phantom Gaming
  • B365M Pro
  • B450

其中 H310M, B356, B450 这些都是芯片组规格,这个名字是由 Intel 来约定的。所以能看到不同厂家会对 H310,或者 B450 都有类似的板子。

比如英特尔八代处理器对应的 B 系列主板是 B360,

后缀规则:

后缀 说明
HDV HDMI+DIV+VGA
ITX 小规格主板 17*17cm
ITX/ac 附带 ac 规格无线网卡 ITX 主板

产品系列

华擎 PRO 系列主打性价比,主流型号。

Steel Legend 系列,独立产品线,主打外观及个性化。比如 B450 Steel Legend.

Extreme 中高端电竞,一般后加数字,数字越大越强。

Taichi 定位高端的产品线。

Phantom Gaming 主打家用和电竞。

华硕

列举一下京东上华硕主板的例子:

  • H310M-A
  • B365M-PLUS
  • B360-PLUS
  • B450M-PLUS

说明:

  • A、P、PLUS、AR、K、PRIME 系列是华硕的低端入门型号
  • TUF 特种部队 STRIX 猛禽 中端型号
  • ROG EXTREME WS 工作站 高端型号

2020-03-08 主板 , computer , asrock , 华擎

命令行的艺术

这些年陆陆续续学习,整理了一些命令,其中也学到了不少,渐渐的才体会到用一行命令带来的效率。于是乎我几乎所有的设备都可以用 SSH 访问,少则有 BusyBox 这些精简的 Unix 工具集,多则就是完整的 Unix 工具集。不说桌面版的 Linux 系统,Android 上可以用 Termux, 路由器上 OpenWrt 自身就带了一些基本的命令,而 NAS 上也可以选择 OpenMediaVault 或者在威联通 上开启 SSH 登录,进入命令行的世界。

以前需要借助 GUI 才能实现的功能后来发现原来命令行是如此简单,比如设备间互联一个 SSH 就能搞定,要传输文件再多一个 scp,或者需要增量备份可以用 rsync,或者如果要找重复的文件,jdupes, rdfind 一系列的命令可以选择,更不用说测网速,测磁盘读写等等了。

The Art lf Command Line

整体性对常见的命令做一些了解,可以参考这个项目:

我之前的文章都是临时想要用到某个功能现查的,浪费了我很多时间,如果早一点看到这一份文档的话就可以省去好多检索的时间。

规划

以后命令总结应该不会再更新了,简单的命令我会提交给 tldr,除非是特别复杂的,有特别多选项的命令,否则就不展开了。

如果以后还会有命令行相关的内容,可能会有这样几类:

  • 像 tmux, sed, awk 这些命令几乎可以用一本书来学习,可能会有一些常用的笔记
  • 命令行合集,比如要实现某个功能有哪些实现方式,比如查找重复的文件,比如查看网速等等

tldr

就像上文所说,简单命令的文章就不再写了,下面就记录下提交到 tldr 的 Pull Request:

更多可以在这里 看到。


2020-03-04 command , command-line , linux , ssh , 命令行

Zeal 离线文档阅读

之前也总结过一篇文章,对比了 Zeal 和 Mac 下的 Dash,不过这么长时间过来,已经熟悉了 Zeal,所以再总结一下 Zeal 的使用技巧。

指定文档搜索

Zeal 最常用的方式就是直接搜索方法名或者类名,但是有的时候本地的文档太多,就会出现很多结果,不同语言,不同内容混在一起。所以在 Zeal 搜索框中可以使用前缀来缩小搜索范围。比如想要搜索 java8 中的 ConcurrentMap 那么就可以输入:

java8: ConcurrentMap

自定义 Docset 路径

默认情况下 Zeal 会使用 ~/.local/share/Zeal/Zeal/docsets 作为 Docset 默认路径,这个路径在 ~/.config/Zeal/Zeal.conf 配置文件中。

  • 可以手动修改上述配置文件
  • 或者在界面中 General 中配置

User generate

用户贡献的 documents.

reference


2020-03-03 zeal , linux , document , offline

typescript 初识

最近浏览 GitHub 发现一个有趣的项目 PT Plugin Plus 代码拉下来发现是 ts 语言写的,就顺便了解一下。1 目标很简单,不是为了写 ts 项目,只是为了能看懂项目。

ts in 5 minutes

强类型

Js 中原来变量是没有类型的,只有运行时赋值了才决定变量的类型,但是 ts 在方法定义的时候可以给参数加上类型校验

function greeter(person: string) {
	return "Hello, " + person;
}

一旦类型不匹配则在编译时就会报错。

Interfaces

可以使用 interface 来定义对象

interface Person {
	firstName: string;
	lastName: string;
}

Classes

ts 支持基于类的面向对象编程,classes 和 interfaces 可以协同工作,

class Student {
    fullName: string;
    constructor(public firstName: string, public middleInitial: string, public lastName: string) {
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
}

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = new Student("Jane", "M.", "User");

document.body.textContent = greeter(user);

handbook

类型

ts 支持 js 的类型,number, string, structure, boolean 等等,不过 ts 增加了枚举类型。

Boolean

let isDone: boolean = false;

Number

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

String

文本是任何一门语言都避免不了的,和 js 一样可以使用双引号和单引号。

let color: string = "blue";
color = 'red';

也可以使用 template strings, 使用反引号 (`) 来框住长文本。

Array

直接声明:

let list: number[] = [1, 2, 3];

或者使用 Array:

let list: Array<number> = [1, 2, 3];

Tuple

元组,用来表达固定长度数组,其他元素不一定类型相同。

定义:

let x: [string, number];

初始化:

x = ["abc", 123];

Enum

枚举类型是 ts 新增加的,用来扩展 number 表达的含义。

enum Color {RED, GREEN, BLUE}
let c: Color = Color.RED;

枚举类型默认从 0 开始,可以手动指定。

enum Color { RED=1, GREEN, BLUE}
enum Color { RED=1, GREEN=2, BLUE=4}

Any

any 类型可以使得开发者可以自行选择使用类型检查,或者不使用。

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

Void

void 像是 any 类型的反面,void 经常被用来作为方法的 void 返回。

Null and Undefined

在 ts 中,undefined 和 null 都有各自的类型,和 void 一样,null 和 undefined 一般都不自己使用。默认 null 和 undefined 是其他类型的子类型,这意味着可以将 null 和 undefined 赋值给 number.

Never

never 类型表示类型的值永远不会发生。

Object

非原始类型,不是 number, string, boolean, bigint, symbol, null 或者 undefined.

Type assertions

尖括号语法:

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

as 语法:

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

reference


2020-03-03 typescript , javascript

NAS 下文件系统比较

记录一下常见的 Linux 的文件系统。

ext4

ext4 是目前 Debian/Ubuntu/Mint 的默认文件系统,比较常见,它其实是第 4 代扩展文件系统 (Fourth extended filesystem), 是 ext3 的延续。

  • ext4 对大文件有着比较好的支持,最大支持 1 EiB 的卷,标准 4Kib 块大小下支持单文件最大 16 TiB
  • Extents
  • ext4 兼容 ext3, ext2
  • ext4 允许对一些文件预留空间 (Persistent pre-allocation)
  • Delayed allocation
  • 无限制的子目录,Linux 4.12 及以后 largedir 功能使用 3 级 HTree,允许在单目录下拥有大约 6 百万条目
  • ext4 使用日志校验和来提高稳定性
  • ext4 使用纳秒来管理 timestamp
  • Linux kernel 4.1 后加入了透明加密
  • ext4 支持默认写屏障,确保了即使写时断电,文件的元信息可以正确写入磁盘

更多的 ext4 的特性,可以参考 wiki

ZFS

ZFS 是由 Sun Microsystems 设计的组合文件系统和逻辑卷管理器。ZFS 具有良好的扩展性,可以有效防止数据损坏,对高容量有着良好支持,可以有效压缩数据,有快照功能,有 copy-on-write 特性,支持完整性检查,支持 RAID-Z。ZFS 最初是 Sun 作为 Solaris 内部开发的闭源软件,2005 年跟随着 Solaris 开源。2010 年,Sun 被 Oracle 收购,ZFS 成为 Oracle 的注册商标,Oracle 停止为新的 OpenSolaris 和 ZFS 开发发布更新的源代码,从而有效地将 Oracle 的 ZFS 恢复为封闭源代码。作为回应开源社区建立了 illumos 项目,维护 Solaris 开发,并在 2013 年成立 OpenZFS 继续开源版本的 ZFS 开发。OpenZFS 被广泛用于类 Unix 系统中。1

  • ZFS 为数据长期存储和扩容而设计
  • ZFS 支持存储池,可以建立跨越磁盘的存储池
  • copy-on-write, ZFS 文件系统中,新信息会被写入到不同的 block 中,写完成后元数据将更新指向为新信息,这个机制可以保证写过程中即使系统崩溃,旧数据也会保留,这意味着系统崩溃后无需执行 fsck.
  • 数据和元数据分开存储,用以校验整个文件系统,在文件发生损坏时及时修复
  • 在某些情况下,如果发生错误或不一致,将自动回滚文件系统和数据的最新更改。
  • ZFS 有自己的 RAID,RAID-Z 实现
  • ZFS 文件系统能够提供最大 16 EiB 文件大小,最大 256 万亿 ZiB 存储

btrfs

btrfs 是 b-tree 文件系统的缩写,最初是 Oracle 为 Linux 而设计,遵循着 copy-on-write 原则。btrfs 旨在解决 Linux 文件系统中缺乏 pooling,快照,校验和和完整的多设备跨接的问题。2

XFS 文件系统

XFS 是一个高性能 64 bit 日志文件系统, 1993 年由 Silicon Graphics, Inc (SGI) 公司创建,原来是作为该公司 IRIX 操作系统 5.3 版本后的默认文件系统,后在 2001 年被移植到 Linux Kernel,XFS 被大多数的 Linux 发行版支持,XFS 适合用来处理大文件。3


2020-02-23 nas , filesystem , file , ext4 , owm , zfs

使用 flexget 实现下载更新自动化

FlexGet 官网是这样描述自己的,媒体文件的多功能自动化工具。可以支持 torrents, nzbs, podcasts, comics, TV, movies, RSS, HTML, CSV, 等等作为输入。FlexGet 是 Python 编写的,所以如果想要实现更加复杂的功能,也可以自己写脚本来处理。

FlexGet 一大被称道的就是可以实现 PT 或者 BT 的自动下载,并且直接传给 Deluge, transmission, uTorrent, rTorrent, SABnzb 等等客户端进行下载。FlexGet 也集成了 trakt, thetvdb.com, imdb.com 等等网站可以用来追踪剧集。

FlexGet 可以自定义任务,自定义运行时间,有一个友好的 Web 界面,然后还有很多很多有待发现的功能。

在没有了解到 FlexGet 之前,我都是手动将 torrent 文件下载到 ~/Downloads 目录中,然后在 crontab 中将下载目录中的所有 torrent 文件 rsync 到 Transmission 或者 ruTorrent 的 watch 文件夹中的。

*/1 * * * * rsync -avz -e "ssh -p xxxx" --remove-source-files /home/einverne/Downloads/*.torrent xxx@ip:/share/Transmission/watch/

但是自从有了 Flexget 我发现借助 Flexget 可以实现很多自动化工作,以前手工执行的工作完全可以解放出来。比如将 PT 中收藏的内容自动下载到硬盘中,比如自动下载 PT 中最近更新的 Free 。

docker install

使用 Docker 进行安装,我这里用的是 wiserain/flexget 镜像:

docker create \
    --name=flexget \
    -e PUID=1000 \
    -e PGID=1000 \
    -e FG_WEBUI_PASSWD=yourhorriblesecret \
    -e FG_LOG_LEVEL=info \
    -e TZ=Asia/Shanghai \
    -p 3539:3539 \
    -v /Documents/flexget/config:/config \
    -v /Documents/flexget/downloads:/downloads \
    wiserain/flexget

说明:

  • config 目录中是 flexget 的配置文件
  • /data 目录可以保存 Flexget 下载的文件

Plugins

flexget 更多的插件可以在这里 查到。

template

templates:
  freespace:
    free_space:
      path: /home/down
      space: 10240
  qb:
    qbittorrent:
      path: /home/down
      host: localhost
      port: 8080
      username: admin
      password: password
  de:
    deluge:
      password: "deluge"
      path: /home/down
  tr:
    transmission:
      host: localhost
      port: 9091
      username: admin
      password: "password"
tasks:
  BTSchool:
    rss: https://pt.btschool.net/torrentrss.php?rows=10&tea1=1&tea2=1&tea3=1&tea4=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    template:
      - de
  HDChina:
    rss: https://hdchina.org/torrentrss.php?rows=10&tea15=1&tea16=1&icat=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    template:
      - qb
    qbittorrent:
      label: HDChina
  CHDBits:
    rss: https://chdbits.co/torrentrss.php?rows=10&icat=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    if:
      - "'CHDPAD' in title": reject
      - "'CHDPad' in title": reject
      - "'CHD' in title": accept
    template:
      - tr
  U2:
    rss: https://u2.dmhy.org/torrentrss.php?rows=10&icat=1&ismalldescr=1&isize=1&iuplder=1&passkey=1111111111111111111111&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    regexp:
      accept_excluding:
        - DVD
        - ADC
        - TTG
        - TSDM
      from: title
    download: /home/torrent/
  Mteam-sweety:
    rss: https://tp.m-team.cc/torrentrss.php?https=1&rows=10&cat410=1&cat429=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    regexp:
      accept:
        - sweety
      from: title
    download: /home/torrent/
  GZtown:
    rss: https://pt.gztown.net/torrentrss.php?rows=10&icat=1&ismalldescr=1&isize=1&iuplder=1&linktype=dl&passkey=1111111111111111111111
    accept_all: no
    if:
      - "'GZtown' in title": accept
    download: /home/torrent/
  HDSky:
    rss: https://hdsky.me/torrentrss.php?rows=10&tea6=1&tea1=1&tea28=1&tea9=1&tea31=1&tea18=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    download: /home/torrent/
  Ourbits:
    rss: https://ourbits.club/torrentrss.php?rows=10&tea1=1&tea2=1&tea3=1&tea12=1&tea42=1&tea31=1&tea46=1&linktype=dl&passkey=1111111111111111111111
    accept_all: yes
    download: /home/torrent/

定义 Schedules

schedules:
  - tasks: '*'
    interval:
      minutes: 1

tasks:
  ezrss:
    rss: http://eztv.ag/ezrss.xml
    accept_all: yes
    content_size:
      min: 200
      max: 4444
      strict: no
    download: /data
  ptschool:
    rss: https://pt.btschool.club/torrentrss.php
    accept_all: yes
    download: /data

2020-02-18 flexget , docker , python , linux

自架的服务整理

这篇文章主要整理比较流行的可以自建的服务,按照功能分类,我并没有每一个服务都尝试,但基本上每个功能下都有一个服务在跑着。

很多搭建教程都已经在之前的文章中有提到,所以这篇文章不会具体展开搭建过程,主要用来记录一下,并在各个服务之间做一个简单的比较,以及我选择的理由。

本文不可能囊括很多内容,GitHub 上有一个 awesome-selfhosted repo, 里面详细记录着开源的许许多多的优秀自建项目,本文为涉及到的内容可以自行参考该项目。另外这个项目也是一个学习的好地方,每一个开源项目都标注着实现语言,如果想要系统的学习某一个实现这里也是不错的选择。

有很多自建成本比较高,比如自建 SMTP 邮件服务,虽然也有比较成熟的方案,MailCow,Mailu 等等,但本文不再展开。

DNS

Pi-hole, A black hole for Internet advertisements

博客类

具体来说,是 CMS,内容管理平台

Lektor

Python 编写的静态网站生成器。

Lektor Atom Plugin

WordPress

WordPress 自然不用多说,PHP 编写。

Jekyll

Jekyll 算是静态页面生成器,不过也能用来当作博客系统。

Typecho

Php 站的又一个选择,比较轻量小巧,但是功能强大。

RSS 阅读器

自从 Google Reader 关闭后,就一直用的 InoReader,完全没有任何问题,不过因为买了 NAS,就索性把 RSS 也自建了一个。数据在自己的数据库里面还是很安心的。我选用的是时间最久,功能比较稳定的 Tiny Tiny RSS. 当然也还有 FreshRSS,miniflux,NewsBlur 等可以选择。

Tiny Tiny RSS 和 FreshRSS 都是 PHP 编写的,miniflux 比较新是 Go 写的,NewsBlur 则是 Python.

代码托管

代码托管除了非常著名的 GitLab,其实还有很多选择,比如 Go 编写的 Gogs,以及它的 fork, Gitea。个人在 NAS 上用的 Gogs,不过要我现在再选,我可能会用 Gitea.

文件管理

文件管理及同步,我使用 NextCloud,没使用 NextCloud 之前,我使用 Dropbox 作为同步工具。

和 NextCloud(ownCloud) 类似的也还有 FileRun, seaFile 等

和 NextCloud 中心化不同的另一个文件同步 SyncThing 也要强烈推荐,自己架设都比较简单。

下载类

下面这些工具都因为可以下载种子而被人所知,不过也可以用来分享文件的。

  • Transmission
  • qTorrent
  • ruTorrent

上面这几个都能找到对应的 Docker image.

ruTorrent

YouTube 视频下载

youtube-dl

稍后阅读

开源版本的稍后阅读,wallabag .

电子书管理

Calibre-web

Calibre-web

LazyLibrarian

图片管理类

主要是对图片的管理,比较著名的是 Chevereto。

其他图床

Lychee

官网地址:

备份

Duplicati

通过 FTP, SSH, WebDAV 协议备份,或者将文件备份到云端 Backblaze B2, Microsoft OneDrive, Amazon S3, Google Drive, box.com, Mega, hubiC 等。

Translate tool

Weblate

Docker composte 安装

搜索导航类

anyi 导航、聚合搜索、webstack

geek-navigation

服务器监控

雅黑探针、云探针、netdata

Other

Instagram scraper

touch ig_args.txt ig_users.txt
docker run -d \
	-v $(pwd)/download:/download \
	-v $(pwd)/ig_args.txt:ig_args.txt \
	-v $(pwd)/ig_users.txt:ig_users.txt \
	shyd/instagram-scraper

2020-02-14 collection , self-hosting , self-hosted , file-manager , rss , rss-reader

电子书

最近文章