[Deploy to Render] 什麽是 Render

什麽是 Render?

身为一个网路软件开发者,程序写完测完本机跑完後,下一个问题就是要部署在哪里了。除了自建机房、租机柜以外,我想大部分的人在第一时间都会考虑那几家云端服务提供者,像是 AWS、GCP、Azure,毕竟牌子老信用好,教学资源多 被老板问起来也不用多做解释

不过,有时候会觉得 AWS/GCP/Azure 虽然强大但好复杂啊!包山包海到底我的需求该用他们的哪一项产品呢?我只是想要把我本机跑得起来的东西部署出去,让用户存取得到啊!当然,我可以花时间研读他们的文件,Google 和 stackoverflow 也是我的好朋友,但有没有更简单方便的方式?至少在一开始让我的程序轻松上线?

假如你也有过相似的感受,你可以试试看 Render。Render 是一个新的 PaaS( Platform as a service)云端服务,也就是说你的程序码部署到 Render 之後,你不用(也不能)去管 Linux/firewall/nginx 的设定。把你的 Github 网址给 Render,设定一下用滑鼠点点点,等个几分钟,你的程序就上线了,全世界都能看到你的网站或是存取你提供的 API。

利益揭露:虽然到职才几个月不过我现在是 Render 的正职员工。内举不避亲,老王卖瓜自卖自夸,觉得自家产品好用也希望更多人用,因此开始写这系列文章。请大家不吝惜指教吐槽。

有名的 PaaS 提供者包含 Heroku、Google App Engine、AWS Elastic Beanstalk。PaaS 方便的代价就是只能在上面跑他们支援的程序语言或是框架。Render 除了支援主流的语言和框架外,也支援 Dockerfile,所以理论上可以跑任何的 Docker container。

谁适合用 Render?

我想要部署静态网站(static website)

Render 很适合用来部署静态网站。首先,免费!前 100 GB 流量都免费!再来,Render 会用 CDN 降低使用者读取你的网站的延迟。Render 也会自动帮你的网站加上 SSL 凭证,假如你有自己的网域名称,你也可以把这个网域名称指向你在 Render 的网站,Render 会帮你管理这个网域名称的 SSL 凭证。另外,你也可以对每个网页路径设定 HTTP 回应的标头(header),也可以对网页路径加上 redirect/rewrite 规则。

Render 支援一些静态网站产生器,像是 HugoJekyll,当然也支援 ReactVue,以及衍生的框架像是 GatsbyNext.jsNuxt.js。部署之前,Render 会帮你编译和打包,你也可以部署多个版本到不同网站来做测试(反正是免费的)。

流量超过 100GB 之後,每 GB 收 0.1 美元

Render 的 CDN 是由 Fastly 提供。

能免费放静态网站的地方,最有名的应该是 Github Pages 了,Netlify 和 Vercel 也提供和 Render 类似的功能。

我想要部署 Node/Rails/Django/Flask/Phoenix/Laravel 等网路服务,但我没时间去研究 AWS/GCP/Azure,公司里面也没有 IT/SRE/DevOps

不可否认,现在 Render 的功能的数量远远不及 AWS/GCP/Azure,而且不像静态网站是免费的,在 Render 部署网路服务(Web Service)要收钱,也没有免费的额度可以用(只有前七天免费)。那为什麽要用 Render?

简单好用,理由大概就这样吧!

Render 支援「刚好够用」的功能。你只要给 Render 存放程序码的 GitHub/GitLab 网址和分支(branch),以及组建(build)和执行的指令,Render 就会完成剩下的工作:把程序码抓下来编译打包好放到服务器上设定系统资源网址路径安全规则,然後 Render 就会给你一个网址,你的网站或网路服务就上线啦!不需要太多繁杂的设定,顶多再加上一些环境变数(通常用来分别不同环境的设定),或是将你自己买的网域名称指向 Render 提供给你的网址。

你可以从 Render 的网站对你的网路服务做一些基本管理,像是看 log,看 CPU 和记忆体用量,甚至直接用 web terminal 登入到你的网路服务。当你写好新的程序码时,你可以设定成只要有新的 commit 进入指定的分支(通常是 master 或 release),Render 就自动帮你部署。假如网路服务死了, Render 会自动重启,并起寄信或用 Slack 通知你。假如新部署的版本有问题,你也可以在 Render 的网站轻松点一下就回复到之前部署过的任何版本。

Render 当然不是万能,假如你需要 Hadoop 或 Spark 处理大数据,或是需要 GPU 去算人工智慧,现阶段 Render 没有提供足够的功能支援这些需求。但对於大部分人需要的一般功能,Render 让部署和管理变得简单。

我需要部署 Docker Container,但我没时间去学 Kubernetes

你可能因为各种理由将你的网路服务或应用程序「容器化」。但要在哪里部署这个容器化的程序?Kubernetes 渐渐成为业界标准,云端大厂也推出了 GKE/EKS/AKS,而 Render 提供更简单的部署方法。你可以直接部署 Dockerfile 到 Render,Render 会从 Dockerfile 建立映像档,再从映像档部署网路服务。你可以设定这个网路服务需要的 CPU 和记忆体(根据不同的方案),需要几个实体(instances)或是根据 CPU 和记忆体的负载自动增加或减少实体(autoscaling),需不需要外挂磁碟。在服务上线後,这些设定全部都可以根据需求随时变更。

使用 Render 帮你部署容器的好处就是不用去搞懂 pod/replicaset/deployment/service/node/pv/pvc 等 Kubernetes 的概念就可以享受相对应的功能,也不用去烦恼如何去维护 Kubernetes 丛集。不过跟 GKE/EKS/AKS 相比,花费可能会高一点,随着部署的规模增加这可能会是一个考量点。

我需要 PostgreSQL 资料库

大部分的网路服务都需要把状态或是资料存在某个地方。Render 除了可以帮你部署网路服务之外,也提供代管的 PostgreSQL 资料库。部署在 Render 的网路服务可以直接存取资料库的资料,你也可以用 PSQL 指令连进去管理。资料库的资料每天会自动备份,确保意外发生时资料不会掉太多(不过目前还不支援从备份的资料自动回复,需要手动做)。安全方面,除了帐号密码外,你可以设定这个资料库只有某些 IP 可以存取,或是任何地方都可以连得到。

啊,不过资料库也是要收钱的,最便宜的一个月 7 美金。我是没有认真比较过其他线上资料库的价格,不确定是划算还是贵森森。对於网路服务也部署在 Render 的人来说,资料库放在同一个资料中心延迟小存取快,而且管理方便,算是一个好处吧。

我需要架论坛/部落格/其他网站

有时候你想部署的不是你自己写的程序,你想要部署开源的软件,比如说 WordPressMetabase 甚至 Discourse。Render 有收集一些知名的开源软件,并且把大部分的设定做好,你只要简单按下去,输入一些关键资料(API key 之类的)到环境变数,你需要的软件就架好了。

这种部署方式甚至不需要自己有 GitHub 帐号,直接使用 Render 提供的版本就好。假如需要更多的客制化,可以 fork Render 的版本到自己的 GitHub repo 再进行修改,部署上依旧可以享受 Render 简单设定的好处。

使用 Render 的考量

看到这边,虽然这是一篇看起来像是业配的 Render 介绍文,不过要不要用 Render 的考量还蛮简单的:

你愿不愿意为了简单好用的部署而花钱使用一个非大厂的产品?

每个人认为的「简单好用」不一样。简单好用的背後就是 Render 帮你做了很多决定,让你不用管太多部署细节。这些决定可能适合 99% 的用户,但却不适合你,甚至尽管适合你,但你需要更有弹性的修改。这种情况下,Render 对你来说就不是「简单好用」,也就根本不用考虑了(当然我们希望你提供意见让我们改进啦)。

就算你认同 Render 的简单好用,「简单好用」这件事在每个人心中的「价值」可能也不一样。假如 Render 比 AWS 贵,但因为简单好用可以让你的服务提早上线,你可能会因此愿意多花一点钱,也可能你的时程根本不赶。Render,或是更广泛地说,要不要用 PaaS 就是考虑带来的好处对你的专案重不重要。

「非大厂」也是要不要用 Render 的一个考量。 大厂比较不会倒 但 Google 擅长收掉服务,大厂提供的产品线比较完整,大厂的产品比较容易找到教学资源和讨论。这方面 Render 虽然渐渐获得许多网路大咖的关注,但依旧差得远。Render 目前依赖很努力的客服,无论是论坛或是客服信箱,大概都会在一个工作日回覆 想到下周要 oncall 客服就眼神死,小公司比较会在意用户的意见与回馈。

Render 想必在短时间内不会有台湾代理商,所以关於境外税的问题应该无解。

Render 目前的资料中心在美国西岸和欧洲法兰克福。对於静态网站没什麽影响,不过对於网路服务来说假如客户端在亚洲,延迟会比较高。

所以?

假如你要部署的是静态网站,用用看 Render 吧!理论上不会花你太多时间而且不用花钱,你可以感受一下跟你现在使用的部署方式有什麽不一样。

假如你要部署的是网路服务,而且是一个全新的专案,可能是个人的 side project,或是工作室的新案子,或是实验性质的 POC (proof of concept),在预算允许下可以试试看 Render。7 美金相当於两杯星巴克或四杯50岚就可以用一个月(再加上前七天免费试用)最小的方案,因为是以秒计费所以发现苗头不对也可以随时关掉,只会收当月有使用的量。

假如你的公司已经在用 AWS/GCP/Azure,但没有专人在管,或是你就是那个负责人但是你觉得分身乏术,Render 可能适合也可能不适合,可以评估看看,或是等 Render 再长大一点提供更完整的功能。

喔,假如你在用 Heroku,这边有和 Render 的优劣比较


接下来这个系列会针对部署静态网站、网路服务和 Dockerfile 到 Render 写一些更详细的范例,并多介绍一些 Render 的其他功能(虽然很大一部分应该就是从官方文件抄抄改改中文化)。请期待,也欢迎到 Render 注册试用!


<<:  Now available the of Spotify Premium APK for all Android

>>:  伸缩自如的Flask [day 19] Nginx

Day-05 Ruby 的世界里,万物都是物件?

什麽是物件? 物件(object) = 状态(state) + 行为(behavior) Ruby ...

Day20 - RB tree

大家好,我是长风青云。今天是铁人赛的20天,但我影片说错了QQ ...

[Day-12] R语言 - K - prototype 实作 ( K - prototype in R.Studio)

您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 ## k prototype #### lib...

Day 11 - 基本语法6(回圈2)

昨天我们讲到的是for回圈,今天我们要讲到的也是回圈:while 正文 while 是什麽? whi...

图的连通 (4)

9 三连通图 如果一图 G 有至少 k 个点、并且拿掉任何 k-1 个点以後都还是保持连通的,那麽我...