关于部署网站的那些事儿
我还依稀记得,我第一次捣腾网站大致是在我小学五年级的时候。那时我小叔喜欢用自己家里的电脑开网站,搭建一些私服让别人玩,卖点游戏里的装备,以此赚点小钱。当时我对这个一窍不通,我只喜欢玩游戏,每次去小叔家里的第一件事情就是以最快的速度抢过电脑的控制权,打开游戏,然后沉浸在游戏的虚拟世界里,无法自拔。所以经常会出现的一个问题就是我和小叔抢电脑,他要维护他的网站,我要打我的游戏。我想你们应该也猜到了,小叔自然会让着我,一脸拿我没办法的样子,把所有他要用的那些窗口最小化,然后千叮咛万嘱咐叫我千万别手滑关了其中任何一个。现在想起这段经历,我觉得那就是我理想中梦幻般的童年,可是你们别忘了,当时还有一个 BOSS 级别的角色,哦不,应该是两个,那就是爸妈。
按照我爸妈的话来说,因为他们的存在,让我戒了网瘾,摆脱了“网瘾少年”的称号。可当时的我并不这么认为,包括现在的我也不这么认为,可能我是对的,也有可能这只是我的倔强罢了。Anyway, 一段 BB 之后让我们进入正题。
关键词解释(老鸟可以忽略)
首先我们要定义什么是部署
网站,它跟开发/搭建网站不同,部署
是将只有本地能够访问的网站传到服务器供其他在互联网上的人访问,所以部署
网站的前提是你必须得已经有一个写好的网站。如果这边我没有解释清楚的话,欢迎在文末评论区提问。
一些部署网站的方式
这边以我的过往个人经验结合公司网站使用的架构,我总结了一些部署网站的方式,后面我会讨论他们适合的用途和利弊。
- 家庭
DSL
/光纤路由端口转发(Port forwarding)或开启DMZ主机
:- 部署在家里PC/台式机上
- 部署在软路由或其他低功耗设备上,如树莓派
- 部署在家庭中的独立企业级服务器/虚拟机内(如 VMware ESXi, Proxmox 等)
- 虚拟主机
- 静态网站托管(如 GitHub Page 等)
- 对象储存作为静态网站服务器(如 AWS S3, Azure Storage 等)
- VPS(如搬瓦工,还有别的叫不上名字的小🐥等)
- 云服务器(如 AWS EC2, Azure Virtual Machines 等)
难易度排序(越小越容易)
- 如果你对计算机一窍不通(只会开机,点鼠标):
2 < 4 < 3 < 5 < 6 < 1
- 如果你有一定的编程基础(会使用版本控制工具):
3 < 4 < 2 < 5 < 6 < 1
不同部署方式的优劣分析
- 此法只适合用来测试,Proof of concept,或做一些简单的 Home automation,不适合在生产环境(Production environment)使用。它们共同的一个很大的弊端就是网络,一般家庭网络供应商(以下简称 ISP)不会提供固定的外网 IPv4 地址,具体原因请参考维基百科,一般情况下都是动态 IP 地址,所谓动态 IP 就是每次 Modem 重启都有可能导致公网 IP 地址改变。当然,你不希望让用户通过 IP 地址来访问你的网站,那么你就需要 DDNS 服务来动态解析域名。说到这里,你应该发现了这个方法开始变得复杂起来,可是弊端还远不止这个。一般家庭小水管只有
10-20 Mbps
的上传(outgoing)速度,如果你的网站里包含很多图片或视频,那这也将是一个瓶颈。说完了网络,我们再来分别说说以下每一类各自的劣势。- 7x24 小时一直将电脑开着做 Web server 非常耗电,电费有可能都超过了租用某些小主机的钱,而且家庭电脑中的硬件并不是为 7x24 小时连续工作而设计,最容易损坏的部件就是硬盘,还有散热和灰尘也是电脑的两大杀手。
- Single board computer(比如树莓派,香橙派)确实很容易上手,而且用途很广,但是他们计算性能低,这导致了它们无法同时处理很多 concurrent network requests,导致多用户访问时的卡顿。
- 企业级服务器价格昂贵,洋垃圾则需要投入很长时间折腾硬件,稳定性也值得商榷。现在很多弹性服务器的存在正是为解决这个问题而生的,所以如果你不想在前期投入如此大的成本,那么可以移步其他部署方式。If you know what you are doing, 那么我觉得你也很有必要去申请一个静态 IP。你可以在服务器宿主机内安装 ESXi 或者 Proxmox,然后开很多虚拟机,可玩性很高。对了,服务器散热和噪音是不容忽视的,各项冗余也很有必要,这里就不再赘述了。
-
购买虚拟主机就相当于租用了一台 VPS 内的部分资源,它一般可以通过 Web UI 控制所有网站修改操作,这降低了部署网站的门槛。其实虚拟主机已经早已过气,因为 VPS 的价格甚至比它还要低,也就是说现在租一套房的价格比租一间房低,那么你还会选择租一间房吗?虚拟主机一般都是限制带宽和磁盘空间的,如果想要升级,那么它没有云服务器那样的弹性和灵活度。
-
如果你会使用 Git 那么静态网站托管就再简单不过了,拿 GitHub Pages 举例,只要你把写好的/生成的静态网站源码添加并上传到 GitHub 上,新建一个
gh-pages
分支,push 上去即可,参考这里。这个方式的好处就是完全免费,Git 可以帮助你控制版本,如果你想要回到之前的任何一个版本,都是可以实现的。这个方法的弊端则是,只支持静态网站,大厂对国内用户并不友好,因为大多数服务器都在海外,用户浏览体验较差。 -
在我看来,在对象储存中部署静态网站是现在最“完美”的静态网站部署方式,这个博客就是部署在 AWS S3 中的,结合其他 AWS 的服务使得这个博客有比较好的浏览体验。我之后会出一篇文章,教大家如何用 S3 结合 CDN 优化用户浏览博客的体验。
-
VPS 是弹性为0️⃣的云服务器,除了这点,VPS 和云服务器的主要区别在于云服务器可以和别的 VPC 内的资源“互动”,比如和数据库,redis 缓存服务器等等,而 VPS 就是单独孤零零的一个 remote 虚拟机,就相当于在远程 24 小时运行的 Linux 电脑。部署网站的话则需要对 Linux DevOps 较为熟悉,如果从零开始学起,learning curve 会比较陡峭。哦对了,VPS 的优势一般在于带宽比较便宜,有些自带每月 1TB 流量。
- 云服务器顾名思义,在“云”里。“云”以第一层含义是云端或者远程,第二层则是“云”和“云”之间很近,也就是说,打个比方虚拟机和数据库之间都在同一个数据中心里,这样虚拟机访问数据库的延迟就会降低。第三层含义则是 VPC,虚拟私人网络,它是基于 SDN 技术之上的,以后有时间也会和大家分享一些 SDN 相关内容,它非常强大,在我看来当下 AWS 如此成功的一个重要原因就在于它的 VPC。部署网站方面和 VPS 一样,需要 Ops 技术,可能比 VPS 更多。还有一个弊端就是流量费较高。
总结
综上,部署网站的方式多种多样,具体选择哪个 depends on 你的需求,具体问题具体分析。好吧,这个总结就跟废话一样,下期出干货😁如果你喜欢我的文章,请在评论区留言让我知道,谢谢你啦!
留下评论