# 互不联网时代的自给自足

## 前言

本文主要讨论如何自行假设各种网络服务，涉及笔记，音乐，文件共享，源代码管理等等。旨在尽可能自行架设所需的网络服务，不被第三方所绑架，不被一些产品经理喂💩吃。 本文大多使用开源软件，并尽可能挑选可以使用Docker的软件，来简化部署的难度。

首先说明我们为什么要自给自足？很简单，因为在线的资源不足以让我们舒服的使用。其次，一些小型的公司和组织有私密性或者性能的要求，不可以使用在线服务。

我姑且先说一下我之前也是热衷于使用各种线上服务的，我并不是完全反对线上服务，我比较多用过的包括且不限于：

* 有道云笔记
* 为知笔记
* 百度音乐盒
* 网易云音乐
* 百度网盘
* 115网盘
* Github
* Gitlab
* Circle CI
* 知乎
* cnblogs
* Slack
* QQ/Wechat...

其中有些我现在还在用，但是大多数都不用了。还在用的，有些是因为做的良心（点名：为知笔记（但是我现在不用了），Github，Gitlab，Circle CI），有些是因为没有替代品（点名：QQ，微信）。

### 线上服务的罪状

我给大家细说一下为什么现在不用某些线上服务/网站：

1. 资源限制：比如网盘，给上传不给下载，管杀不管埋，把狗用户骗进来杀，或者诸如早期的Github没有私有库（以及为了一两个私有库开pro有点。。。浪费）之类。
2. 人为制造数据孤岛：比如有道云笔记，并不能导出为诸如Word哪怕是pdf之类的格式，只进不出。各大互不联网公司互相屏蔽对手的链接，分享极为困难，出现了火星文口令这种反人类的东西。
3. 无孔不入的广告：商业公司要挣钱我可以理解，VIP还有广告就很过分，不点名了。
4. 服务降级：比如网易云音乐，开了VIP总该让我下载吧，我想用我索尼的HiFi MP3听可不可以？不可以，下载下来的格式是专有格式，需要联网才能播放。（以前没有这个问题）
5. 主动给用户添堵：最著名的就是各大厂商的网页版了，相信大家都看过“在App内打开”，“App浏览体验更佳”之类的鬼东西。其实大多数时候只是为了骗用户下载App，好监控你的隐私，以及给你推送。一不小心就跳转到App下载页面，心烦意乱，“使用桌面版”渲染的话，字体简直是视力杀手。
6. 不可抗力：我自己写的文章，有时候因为一些不可抗力会消失（肯定是知乎的存储没做好，嗯，肯定是），我并不希望它们消失。以及网易云音乐的歌曲有的时候也会因为版权的原因消失。

尽管说了这么多缺点，我仍然感谢他们提供的服务（但是还是要挥手说再见）。

同时也要说清楚的是，自给自足的线上服务大多不能完成人与人交流的功能，就算你自己建了一个类似Slack的站点，有好用的App，你不可能让你的父母亲戚都用这个Slack，还是得用微信，它们给你发“刚刚！突然宣布……”你还是得收着。

## 自给自足的方案

以下方案，随着我的使用不定期更新，也欢迎大家推荐自己喜欢的自给自足的服务。

### 网络环境

以下列举的服务，拿一台旧电脑（当然太旧的也不行）装个Linux就可以都搞定了。 但是如果这样做的话，只能在内网（家里）使用，最近疫情期间，很多人在家办公了，那么内网能用就好。

如果你有公网IP，你当然可以嚣张（我家里直接有公网IP，所以就直接建站了，我就很嚣张）。 但是国内大多数运营商给你层层NAT，到你手里都不知道自己是怎么连上的网。所以如果我们希望在办公室或者学校之类的场所使用，需要首先需要一个网络方案。

#### 购买VPS

VPS是最稳定的方案，但是因为国内几大云服务厂商的垄断，带宽卖的比金子还贵。 以阿里云为例，8M的带宽一年可以卖到4000元左右。哪怕按量付费的话，8M带宽至少是8毛钱1GB，说难听些，手机移动流量都比这个便宜了。

而诸如Vultr的国外云主机，哪怕30块钱一个月的小主机，每个月就有1TB流量，我亲测带宽可以达到100M。 但是由于用Vultr搭梯子的人太多，导致IP容易被Ban，造成误伤。 在国庆，大会以及众所周知但是不能提提了会喝茶的某月某日，IP段会被整体屏蔽。

虽然国内外云主机各有各的坑，但是VPS仍然是最稳定的建站方式，专业的IDC机房会比家里的破网络和电力情况要稳定的多，而且便宜的VPS大多数虚拟机，在硬件故障的时候，部分优秀厂商可以做到虚拟机漂移，让你对故障无感。

建议多找几个志同道合信得过的小伙伴大家合资购买一个VPS，下面推荐的服务大多是支持多账号的，一起用无论是价格还是运维（可以一人运维一个服务啊）压力都会小很多。

#### SSL

没有SSL，通讯就是在裸奔，容易被运营商灌入广告，缓存攻击，也容易被窃听。 免费的SSL证书教程参见[Let's encrypt -- 让我们一起愉快的使用HTTPS](https://github.com/TsingJyujing/blogs/tree/7faf08d843a36914a418bb44b8d6e4d214b1090a/other-tech/https/README.md)。

#### 内网穿透

VPS虽好，在家建站也有在家建站的好处，第一个好处就是数据是在家的，你可以物理的摸到的数据，虽然手上捧着硬盘并不比在IDC靠谱，但是硬件在家的安心感是无法替代的。

第一推荐的是 [ZeroTier](https://my.zerotier.com/)

这个系统不能让你有公网IP，但是却能让你跨区域组网，如果你只是在固定的几台设备上使用下列服务，那么完全可以试试异地组网。缺点也是有的，这个软件生生的造了很多概念，比如leaf，moon之类的术语，导致文档比较难懂，需要慢慢看，其次是我并不清楚国内速度和稳定性怎么样，但是我知道国内是可以用的。

其次推荐花生壳，花生壳的免费版（其实需要付6元）就已经很好用了，如果追求稳定可以买个300多一年的服务，这个钱相比VPS已经是便宜了，相比金贵的带宽性价比居然还可以。

如果你有VPS，但是VPS主机内存太小，你可以在VPS上部署内网穿透软件：[snail007/goproxy](https://github.com/snail007/goproxy/)，如果嫌管理麻烦的，可以用我写的[开源软件](https://github.com/TsingJyujing/goproxy-tunnel-server)。

### 笔记/博客系统

我目前用过最好的开源的笔记本应该是[蚂蚁笔记](https://leanote.com/)。

唯一的问题是，好久没更新了，项目可能凉了，但是App齐全，大Bug很少，平素使用绝对足够了。 还有一个缺点，用的是MongoDB，不擅长运维MongoDB的同学可能比较容易崩。

Leanote自带博客系统，但是我更喜欢用Gitbook，这篇博客就是用 Gitbook 做的。 缺点是Gitbook新版似乎国内被墙了，老版本还可以用。

如果可以花钱可以购买为知笔记，个人觉得做的是不错的了。

### Git

我目前用的是[Gogs](https://gogs.io/)，异常轻量化，只需要几十兆内存，但是功能齐全。 如果你是一个人使用或者轻度合作的话，Gogs就足够了，如果你有小团队要合作项目的话，Gitlab可能更佳。（但是Gitlab更吃资源，我印象里内存4G起步。）

目前我最推荐的还是Github，因为个人也可以无限创建私有项目了，开个Pro也不贵。不过这个不符合我们今天的主题。

### 持续集成

我前前后后用过TeamCity，Circle CI，Drone和Jenkins。

目前我用的是Drone，但是我并不推荐Drone。 主要原因是文档太少，坑太多，全靠自己看源代码折腾，我之所用Drone是因为公司在用，折腾中积累了一些经验。

如果不考虑收费，我推荐TeamCity。免费的中间比较推荐的是Jenkins，大家踩坑比较多。会好一些。

### 音乐

我目前用的是[Airsonic](https://github.com/airsonic/airsonic) 界面有点古老，App也有点过于简单，但是这已经是我能找到的最好的开源音乐软件了。

如果考虑收费的话，Subsonic还算不错，airsonic其实就是兼容Subsonic的API，所以可以直接应用Subsonic的App。

### 照片，文件和视频

照片，文件和视频，我都是靠[Nextcloud](https://nextcloud.com/)完成的：

文件的备份就不用说了。Nextcloud 的手机App可以直接帮你备份所有照片到你自己的服务器上。 更好的是，可以用WebDAV挂载，可以内部挂载别的盘（比如Samba或者SFTP协议之类的）。

网页内也可以直接播放视频，体验非常不错，不能播放的可以用ffmpeg转码成H264编码就行。

缺点是慢，而且有点臃肿，PHP写的，不好改动。

我还考察过[Seafile](https://www.seafile.com/en/home/)

三个用户以内专业版免费，支持全文搜索（ES实现的），可以说是很良心了，相比Nextcloud功能虽然不多，但是速度很快，也基本能满足使用。 可是我最后没有选它，因为照片备份不方便，这还在其次，它的文件系统格式是自定义的二进制分块存储，不方便我直接在服务器磁盘上操作使用网盘内的文件。

### TODO

其实还有很多东西我没有做到自给自足，比如Calendar，Task，我用的都是Google的产品。 也并不是所有的东西都需要自给自足，往往是在线服务的使用给了我痛苦的感觉的时候，我才会转向使用自建的服务。
