为什么选择自我托管
如果你正在运行一个应用程序或网站,你可能对VPS(虚拟私人服务器)和托管服务提供商很熟悉。Linode、AWS Lightsail或DigitalOcean的中层服务器的费用在40至80美元/月之间。
如果你是一个人,可能喜欢听音乐,看一些电视节目,并将你的个人和重要文件保存在云服务中。这意味着要支付Spotify、Netflix的订阅费,如果你对存储很认真的话,还要支付Dropbox或类似的服务。
把所有这些费用加起来,你每个月都要支付,比方说,大约100美元。然而,你可能有一些旧的笔记本电脑,甚至在家里有一个像样的工作站,但大部分时间都被浪费了。在这篇文章中,我将向你展示如何为你的个人项目实施一个自我托管的家庭基础设施,甚至如何用自我托管的替代品取代一些流行的服务,如Spotify、Netflix或Dropbox。
不是所有的东西都是好的,自我托管。在我看来,这里有它的主要优点和缺点。
优点。
-
省钱
-
重复使用旧的东西,让它获得第二次生命
-
你会学到很多东西(相信我
-
你将拥有你的数据
劣势。
-
你没有公司的支持(一些保证正常运行时间的SLA等)。
-
你的失败风险更高:很多东西都可能失败。可能会遇到停电,你的互联网可能会因为你的ISP公司或建筑而失败,你的家庭路由器可能会失败,以及添加。
-
你需要有自己管理所有这些事情的知识,或者至少有实力在路上学习。
自我托管等同于流行的服务
-
VPS(AWSLightsail,DigitalOcean,Linode):你的一台旧台式电脑或笔记本电脑。
-
Spotify。Plex。有像Kodi这样的开源替代品,但我没有时间深入测试,而Plex非常简单明了。
-
Netflix。Plex(我和一些朋友共享一个账户,所以我不得不承认我也在使用它)。
-
Dropbox。Nextcloud。
-
GitHub(被微软收购)。Gitlab.
误解
-
“如果我在家里托管应用程序,就不能用SSL证书来保护它”:错误,SSL证书与一个域相关,而不是一个特定的IP,所以你可以通过一个动态的IP来服务你的应用程序,并保护它,例如用Let’s Encrypt证书。
-
“我只能从家里提供一个应用程序,使用80或443端口”:错误,你可以从家里提供你的基础设施所能支持的尽可能多的应用程序。使用Nginx,我们提供各种应用程序,以及静态网站,如这个博客或IndieHackers马德里聚会页面。
我的堆栈
当我搬到马德里时(10/17),在最开始的时候,是和我的室友分享一个公寓。由于我们的网络连接是共享的,我没有选择自我托管我的服务。有些人在玩在线游戏,有些人在看电视。我不想干扰或影响他们的体验,中断互联网连接,进行复杂的配置和端口重定向。
一旦我和我的女朋友搬家(6/18),我慢慢地开发了一个相当复杂的基础设施,有几台电脑。这并不意味着你必须 “按原样 “复制它。也许,你最需要的只是一台旧的笔记本电脑,为一些网络应用提供服务,或者是一台你偶尔用作媒体中心的工作站。 这是我的基础设施的完整清单。
-
华硕RT-AC1200G+路由器:到目前为止,我最好的采购之一。在这篇文章的后面,我将解释为什么一个好的路由器是如此重要。我花了大约30欧元买的二手货。
-
应用程序服务器:佩德罗的一台旧宏基笔记本电脑。它有8GB内存,4核i7处理器和大约1Tb硬盘内存。我们用它来做我们在The Gurus品牌下共同开发的项目。这个博客就托管在那里,还有《主持人大师》和我们的高速火车票定价项目的报废流程。一个具有这些功能的VPS,每月的费用高达60美元。这台笔记本电脑是24小时不间断工作的,所以我还在亚马逊买了一个测量能源消耗(KWh)的插件式能源监测器,价格为10欧元。
-
Raspberry Pi 3 Model B:我女朋友送的礼物(到目前为止她最好的礼物)。我用它作为我的家庭基础设施的ssh入口。它的消耗量很低(坚韧度不是很高),而且可以全天候运行。这里有一台Nextcloud服务器在运行,里面有一些_严肃的_东西,如代码库、文档等。我使用一个外部USB东芝硬盘的1Tb存储来运行Nextcloud。一个有趣的用法是,它通过以太网与我的工作站进行物理连接,并可以作为一个Wake-On-Lan设备使用(远程开启我的WS)。
-
分析工作站:这是我的多用途的WS。有32GB内存,4核i5处理器,双启动Linux/W10(只是为了游戏),一些HDD和SSD,和一个强大的Nvidia GPU。它的作用是成为一台强大的机器,执行数据科学家所做的分析任务(如训练模型和探索数据,运行Jupyter服务器)。它还运行一个Plex服务器,里面有我所有的媒体库,还有一个Nextcloud服务器,用于媒体共享和方便访问。
如何…
这不是一个详细的指南,其中有大量关于如何设置所有这些的bash命令,而是一个关于做什么、最佳做法等的一般指南。如果我觉得从技术角度来看,我将从其他博客上链接一些有趣的内容。
1.获得一个良好的网络连接
如果你要在家里托管你自己的服务,确保你的连接能够支持它。请记住,当从家里传输音乐或视频,或快速提供一个应用程序时,其限制是你的上传速度。大多数人专注于拥有较高的下载速度,但很少有人关注上传速度(除非你是一个游戏玩家,并制作游戏视频和直播流)。我的建议是使用至少50MB的光纤对称连接。如果低于这个标准,或者使用不稳定的老式DSL,你和你的用户的体验就会受到损害。
要测试来自你的服务器的连接速度,speedtest命令行界面是一个非常有用的工具,用以下命令安装它:sudo apt install speedtest-cli
,然后测试你的下载/上传速度。speedtest
我的选择。
我使用一个低成本的ISP的300Mb对称连接(为了透明起见,我为23Gb的移动连接和无限通话+300Mb的家庭互联网支付43欧元)。
2.摆脱双NAT(运营商级NAT)。
你需要一个公共IP。如果是静态的(最好的选择,但价格昂贵)或动态的(最常见的选择,不是问题),这并不重要。有一种选择是你的ISP给你分配一个与其他很多客户共享的公共IP(这被称为双NAT或CGNAT)。你需要配置你的互联网服务,让你摆脱双NAT或运营商级NAT,这样你就有自己的公共IP。这个IP可能是动态的,它是随着时间的推移而变化的(当你的路由器重新启动时,它将被分配一个新的公共IP)。
在我的情况下(Pepephone),脱离CGNAT包括打电话给ISP的技术服务,大约需要一个星期才能完成。
3.获得一个域名
如果你想从家里以外的地方方便地访问你的服务,你将需要一个域名。如果你想托管很多人使用的网络应用程序,你会对这个问题很熟悉。在您的笔记本电脑或移动电话中设置Nextcloud客户端也是非常重要的。
这些域名可以通过动态DNS或DDNS服务配置为动态地指向您的公共IP。现在有一些流行的DDNS,如No-IP、dyndns(现在是Oracle的一部分)。这些服务大多可以与你的路由器集成,因此,当它的公共IP(动态)发生变化时,它会自动通知它们,所以这些域名总是指向你的路由器。
我的选择。
就我个人而言,我使用集成在路由器中的动态DNS服务,由华硕为其路由器买家免费提供,所以我的域名看起来像<chosen_name>.asuscomm.com
。我们所有的域名(TheGurus、TheModerator Guru等)都使用CNAME记录指向这个域名。
4.买一个像样的路由器
如果你是认真的自我托管并希望有一定的可靠性,你的ISP公司在你签合同时提供给你的默认路由器可能不是最好的选择。有一些流行的品牌,如TP-Link、D-Link等……请记住:路由器很贵。你需要对你的路由器有一些要求。
-
端口转发。它必须能够将流量重定向到某些IP和端口(大多数路由器可以做到这一点)。
-
良好的无线连接。它必须有一个可靠的无线。特别是如果你不能把你所有的基础设施都插入路由器的以太网端口,而必须依靠无线网络。这就是大多数由ISP提供的现代路由器惨遭失败的地方。不要错过双2G/5G频段和大量大天线。
-
千兆位以太网连接。如果你要从家里向世界其他地方提供有一定流量的网络应用,这一点非常重要。你希望你的应用程序服务器和路由器之间的连接尽可能快。
-
NAT发夹:允许你连接,例如从家里的域名连接到你的Nextcloud服务器。如果没有这个功能(不是所有的路由器都有这个功能!),你将能够从工作或大学图书馆访问你的服务,但不能从你自己的网络访问(是的,这是不符合直觉的)。
-
远程管理。不是必须的,但也是一个优点。一些路由器具有远程管理功能,所以你可以检查你的网络状态,从网络浏览器或移动应用程序连接到管理应用程序,以打开端口,重定向流量等。
我的选择。
我可以完全推荐的是华硕,型号为华硕RT-AC1200G+路由器,如上所述。这个型号得到了我需要的所有高级功能。由于我的光纤调制解调器集成在我的ISP路由器中(一个不坏的萨基姆公司),我不得不将其配置为桥接模式,所以它只充当光纤调制解调器,让我的华硕路由器完成所有路由工作。
5.获得一台电脑/服务器
无论你是想托管你自己的Netflix和Spotify,还是想托管一个博客或一个有活跃用户的网络应用,你都需要一台电脑。除非你有一个巨大的用户群,有很多并发的活跃用户,否则它有多强大并不是非常重要。大多数4-5年的笔记本电脑都很适合托管网络应用、Nextcloud或Plex。
考虑到功耗是很重要的,所以如果你用一台旧的强大的工作站,下次你的电费就会很可观。为了控制它,可以使用一个插入式能源监测器。
我的选择。
我们使用的是一台来自Pedro的旧笔记本电脑,其功能如上所述。足够移动我们的应用程序,为我们的博客提供服务并进行网络刮削。它通过以太网连接到路由器上。
6.安装Ubuntu服务器和设置ssh
这是一个非常个人化的选择,但我多年来发现,你花在管理小事情和技术问题上的时间越少,你就可以有更多的时间去做一些有意义的事情,或者只是花时间与家人和朋友相处。
说到服务器操作系统,国王是Ubuntu服务器。有很多Linux发行版,我是其中许多发行版的忠实粉丝,但请相信我说的,在这种情况下,使用标准版是一种优势。无论你需要对你的服务器做什么,你都能在互联网上找到大量的软件包、大量的指南、教程和支持。还有一个内置的snap集成,这是一种依靠虚拟容器安装应用程序的新系统。
许多人讨厌snap,也有同样多的人喜欢它。如果你需要设置数据库和安装许多东西,并在此基础上配置所有东西以使其良好地协同工作(例如Nextcloud),那么有时安装一个应用程序是很有用的,因为它能自动为你制作,并将所有东西限制在一个独立的容器中。
如果你不需要图形界面,可以使用Ubuntu服务器,从这里下载。在其他情况下,根据你对图形化Linux桌面的喜好,选择最适合你的风味。
一旦你安装了Ubuntu,安装ssh服务器来进行远程连接。sudo apt install openssh-server
如果你在家里有不同的服务器,就必须为每个人配置不同的ssh端口。默认的ssh端口是22,所以你可以使用不同的端口(常用的是2222以后的端口)并指定编辑配置文件。/etc/ssh/ sshd_config
一旦你设置了你想要的端口,就重新启动ssh服务运行。sudo service ssh restart
最后一步。
- 记得在你的路由器配置中为该电脑设置一个静态IP,并将22号端口(或你设置为ssh端口的任何一个)重定向到该IP:路由器端口转发配置中的端口。
我的选择。
我们的服务器上运行着Ubuntu Server 18.04。此外,除了Raspberry Pi(运行Raspbian)外,我们所有的电脑都运行最新的LTS Ubuntu。例如,对于需要图形界面的笔记本电脑和工作站,我更喜欢Kubuntu,而Pedro更喜欢基于Gnome的vanilla Ubuntu。
7.设置Nextcloud
Nextcloud是一个相当于Dropbox的应用程序,用于在你自己的云上存储你的文件。它有大量的功能和插件、用于自动同步的桌面应用程序、用于在旅途中访问数据的移动应用程序、pdf和图片预览。你不会错过第三方闭源应用程序的许多功能。
你可以像这样轻而易举地安装在Ubuntu中。sudo snap install nextcloud
-
最困难的事情是让它与外部存储设备一起工作,例如USB硬盘,这一点非常重要,如果你在Raspberry Pi上安装了一个16Gb的SD(像我一样),或者想使用你在黑色星期五买的3TB大容量硬盘,而不是你安装操作系统的SSD。到目前为止,我发现的关于使用外部存储执行Nextcloud安装的最佳教程是这个,来自Ashley Goodman。
-
您还必须设置http和https(非常重要,如果您不希望您的数据在从服务器传输到服务器时被第三方访问)。这里有一个关于如何使用snap安装的详细解释。
-
如果您需要执行进一步的配置,如允许来自您的域名的连接等,请记住 Nextcloud snap 配置文件在路径
/var/snap/nextcloud/current/nextcloud/config/config.php
中,并且在更改配置后您需要重新启动该 snap。sudo snap restart nextcloud
8.设置Plex媒体服务器
Plex是一个媒体服务器应用程序,无论你在哪里都可以轻松访问你的媒体库。它有以下平台的应用程序。
-
手机:虽然需要支付大约5美元来解锁它(否则流媒体将被限制在1分钟内)。可用于安卓和iOS。
-
网络:免费。
-
电视:免费。
要在Ubuntu上安装Plex,请运行:sudo snap install plexmediaserver
。
设置Plex是相当容易的,因为它是为非技术人员设计的。只要打开你的网络浏览器,进入你的服务器IP和32400端口。在那里你可以根据你的需要配置Plex,包括改变端口,添加文件夹到你的资料库。
Plex最有趣的地方是自动管理与服务器的远程连接(甚至创建某种桥接或间接连接,以防你的路由器没有正确配置为允许外部连接)。你所需要的只是一个Plex账户。
考虑到Plex通过32400端口运行,所以你需要在路由器中配置端口转发,以允许直接连接到Plex服务器(你想要好的流媒体速度!)。
9.设置Gitlab
现在,大多数人都使用GitHub。使用GitHub并没有错,我们在The Gurus也使用它(这是我们的)。如果你想引起注意,想让你的公共仓库被很多人发现,GH无疑是最好的解决方案。
不过,GitHub 也有一些问题。第一个问题是,GitHub是微软的一部分,这一点是非常有意见的。这对你来说可能是问题,也可能不是问题,但让你的代码和私人仓库被一个赚钱的软件公司访问的想法对我来说没有吸引力。
GitLab是一个你可以在家里自行托管的替代方案。好在它提供的功能远不止是一个git服务器(持续集成功能等)。你可以按照这些说明在Ubuntu中安装。
10.设置Nginx
Nginx将自己定义为一个高性能的网络服务器。你可以用它来为家庭基础设施中的网络应用提供服务。这些网络可以是全功能的网络应用(例如,使用PHP、Python或JavaScript与数据库通信,并在后台执行复杂的操作),或者只是文件夹中的一堆静态文件(例如,这个博客)。在Ubuntu中安装它,键入:sudo apt install nginx
。
使用Nginx,你可以有不同的域名,同时从家里为不同的网站提供服务**。**Nginx的全部配置非常庞大,不在本篇文章的讨论范围之内,但我们将提供我们用来为这个博客提供服务的配置,因此你可以重复使用它,例如用来托管一个像这样的简单博客。如果你有兴趣,thegurus.tech 博客,我最初发表这篇文章的地方是开源的,你可以在这里找到repo,但我们会在将来发一篇关于它的文章。
server {
if ($host = www.thegurus.tech) {
return 301 https://thegurus.tech$request_uri;
} # seo and security
root /home/ubuntu/projects/thegurus/blog/output;
index index.html;
error_page 404 /404.html;
server_name thegurus.tech www.thegurus.tech;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/thegurus.tech/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/thegurus.tech/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.thegurus.tech) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = thegurus.tech) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name thegurus.tech www.thegurus.tech;
return 404; # managed by Certbot
}
复制代码
如果你想托管另一个网站,只要改变你的静态文件路径,设置你自己的域名就可以了。
如果你想托管一个更复杂的应用程序,例如基于Python的后台(Django或Flask),如TheModerator Guru,你必须指向一个套接字,在Python的情况下,将Nginx与Gunicorn这样的WSGI HTTP服务器相结合。
11.奖励:设置网络唤醒
作为奖励,我将教你如何远程打开你的电脑。如果你使用的是低能耗的笔记本电脑或树莓派板作为服务器,你将不必担心能源消耗,但如果你使用的是一台旧的台式电脑或笔记本电脑,或一台功能强大的工作站,那么在你不积极使用它的时候关闭它是一个好的做法。
作为一个WoL设备,我使用一个通过以太网连接到我的工作站的Raspberry Pi和优秀的应用程序etherwake
。你可以在Ubuntu(或基于Debian的发行版,如Raspbian)中安装它:sudo apt install etherwake
,然后用:sudo etherwake XX:XX:XX:XX:XX:XX
打开你的电脑,其中X占位符代表特定的电脑MAC地址。
原文发表于 https://davidadrian.cc