在 2019 年的最后一天折腾 VPS

昨天终于下定决心,掏钱买了一台 VPS ,经历了几乎是算是我近年来最为惊心动魄的一次折腾。皮亚杰说学习发生在个体从认知紧张迈向均势的过程中,折腾就是这一痛苦过程的真实写照,但即便如此,我大概永远都会孜孜不倦地捣鼓那些我陌生而热爱的事物。

背景说明

很早以前就有买一台主机来把玩的想法了,之所以一直没有付诸行动一方面是出于经济上的考量,另一方面,也确实对相关方面的知识一无所知。我虽然是一个喜欢“折腾”的人,不过同时也是一个厌恶麻烦,不喜欢浪费时间的人。折腾和寻求方便,两者在我看来并不矛盾,所以我一直倾向于在保持自身需要能够被满足的前提下,寻找尽可能快的折腾方法。 VPS 这类事物,在我看来就像“折腾”方面里“皇冠上的明珠”,我对于自己驾驭它的能力有着深刻的怀疑。

让我产生去触碰这颗“明珠”的勇气的,是好友 JY 始终不打算使用 telegram ,虽然我充分理解他的原因,但是还是希望可以把 telegram 安利给他,因此我就只剩下自建 MTProto 这条路来减少他使用 telegram 的阻力了。

一台VPS的功用

当然,除了代理之外,我之所以会想买一台VPS也是因为看中了诸多的自托管 (Self-hosted)服务,毕竟我很喜欢自定义化程度高的东西,这也是我折腾的源动力之一。我很希望可以用 VPS 搭建一些自用的服务来替代之前只能花价钱购买的服务。 RSS 服务就是其中之一。此前我一直使用 Inoreader 来作为自己的 RSS 订阅服务,但自从它修改了价格方案后对于我这种轻度用户就不太友好了,从那以后,我就一直考虑使用自建的 tiny tiny RSS (以下简称 TTRSS )来替代 Inoreader 。关于 TTRSS 的介绍可见于泛滥在网上的诸多安利文,此处不赘述。

几乎可以把任何内容转化为 RSS 的 RSSHub 也是我一直希望可以自己部署的,虽然 RSSHub 自己提供的链接有着不错的使用体验,但是还是希望可以挂载在自己的域名下。除了 RSS 相关的服务,我还希望可以用 Calibre 搭建私人的图书和漫画库,用 Kodi 或者 Plex 来搭建媒体库。一台服务器的功用实在太过吸引人了,那个男孩不想要一台自己的服务器呢?

所以,最终我终于咬了牙打开了 Vultr 的官网,下了一台日本 ip 的 VPS ,实话说价格并不便宜,但是我并没有打算一定会持续购买,也算是买来丰富一下自己的折腾经历吧。

ssh root@…

上面这个标题是我在整个折腾的过程反复输入的命令,借助这条命令 ssh root@<your ip> ,你就远程进入了自己购买的服务器。折腾的历程就要展开了,我最终只考虑搭建一个代理服务和 TTRSS ,考虑到流量的问题,那些涉及大文件传输的服务我决定暂时搁置(考虑以后使用 NAS )

搭建 v2ray & MTProto

搭建代理的过程还算顺利,我使用的是 Github 上 @233boy 的一键搭建脚本(参考的教程附带在参考链接里了)。这个脚本自带了 MTProto 的开启方法,我只需要在命令行窗口里简单敲几下键盘即可。不过搭建起来的代理却一直无法运行,经排查之后发现是 Vultr 的主机默认开启了防火墙,只开放了一些常用的端口,而自己设置的代理端口都没有开启,在另一篇教程的指导下修改了 VPS 的端口设置后,服务就正常跑起来了。

之后, JY 同学总算是看在代理的份上愉快地进入了 telegram 和我互发起了表情包。

搭建TTRSS

搭建 TTRSS 的过程其实存在着诸多坑,网上虽然流传着不少教程,但是其中部分缺乏时效性和准确性,这里主要讲一讲初次搭建需要避免的坑。

Docker构建

使用 Docker 构建可以避免配置上的麻烦,使用 Docker 来搭建 TTRSS 也是较多人的选择。我使用的是 Awesome TTRSS 这个整合好的容器,但是在此之前我发现在CentOS 8 上安装 Docker 就要多加注意,网上的教程大多数是基于 CentOS 7 的,而 7 的安装方法并不兼容 CentOS 8 。直接使用会因为缺少依赖而持续报错(即便在我已经手动安装缺失的依赖后),CentOS 8 安装 Docker 的方法如下

下载 docker-ce 的 repo

1
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

⚠️ 安装依赖

1
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm

安装 docker-ce

1
yum install docker-ce

启动 docker

1
systemctl start docker

docker-compose 安装 TTRSS

推荐使用 docker-compose 的方式来安装 TTRSS , Awesome-TTRSS 网站的教程是最可靠的,但是对于新手或初学者来说并不够详细,我比较推荐少数派的这篇文章《找不到满意的 RSS 服务?你可以自己搭建一个》作为参考,内容的准确性较高。搭建过程中需要注意的是

  • 初次搭建完成后建议重启 docker 一次
  • 每次修改完 docker-compose.yml 建议进行比较彻底的删除重新部署
  • 如果你不需要绑定域名并开启 https , docker-compose.yml 中的 SELF_URL_PATH 属性保持 http://<your ip>:<port>/ ,否则此处需要改为带 https 的域名(如果你希望在绑定域名前查看部署效果也暂时保留 ip 写法)

绑定域名 & 开启 HTTPS

首先,如果你有一个域名,不妨设置为自己的 TTRSS 页面设置一个二级域名,到自己的域名解析商处添加一个二级域名的 A 记录,指向服务器的 ip。

第二步是在服务器上配置 Nginx 反向代理,并使用 Let's Encrypt 提供的 certbot 配置 SSL 证书,此处建议根据 certbot 官方的指导操作。需要注意的是 Nginx 配置文件的修改,小心笔误

如果上述步骤完成后,你打开自己配置好的域名地址却无法显示 TTRSS 的前端页面,或许和我一样遇到了网上所有教程都没有涉及的问题,在确保自己的配置没有出错的情况下,你可以查看 Nginx 的错误日志

1
vi /var/log/nginx/error.log

在我的排查中出现了 failed (13: Permission denied) while connecting to upstream 的错误信息,后发现这个问题是由于 SeLinux 的限制导致的(我也不知道这是啥),根据网上的修改方法关闭 Selinux 即可,方法如下

1
2
3
getenforce
setenforce 0
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config

重启 nginx 后再次访问你的 TTRSS 地址应该就可以正常显示了(至少我可以)

你还可以在 TTRSS 的设置中开启第三方 API ,使用 Fever API 在 Reeder 等 RSS 阅读器中阅读 TTRSS 。

写在最后

我折腾上述事物花了将近整整一天的时间,虽然其中浪费了很多时间在细节的纰漏上,但是我经过这次经历也再一次认识到自己在折腾方面并不算不上一个高手。明明是 2019 年的最后一天,我却待在房间里对着黑黢黢的命令行窗口敲代码,客厅电视里传来的晚会节目声,以及窗外的烟火声,我都是在结束了折腾之后才意识到的。这就是所谓的心流吧,专注于一件事而无感于时间的流逝。好在最终我能成功看见自己折腾这一天的结果。

以前我可能会问这样大费周章的意义何在,但是这一年来这种想法逐渐变得模糊了,我对意义这个词的看法发生了不少变化,我认为这是一种成长。 2019 年我折腾了很多东西,这个 blog 是其中之一。这台 VPS 大概率会让我在 2020 年继续自己的折腾之旅吧。

以下是我在撰写这篇文章时参考的文档和资料,来源于网络,希望可以帮助到你
作者

haikuzu

发布于

2020-01-01

更新于

2021-07-25

许可协议

评论