作为一个开发者,应该都能理解一个网站从开发到上线,要经过很多繁琐的步骤。
编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间。
作为一个不精通代码的业务玩家,当你想搞个网站玩玩时,经常会被淘宝贵得离谱的报价吓跑。
这两年Serverless的概念被炒得火热,顾名思义,无服务。今天的这篇文章,我想站在一个开发者的角度,带大家简单的体验下使用腾讯云Serverless来开发网站的整体流程。看看在Serverless的概念下,开发网站是不是变得更加简单了。
本文的主要内容:
- Serverless概念解释
- 3分钟部署一个网站
- 10分钟开发一个在线RSS阅读小站
- 腾讯Serverless Web Function的优缺点分析
我是蛮三刀,关注我的个人原创技术公众号:后端技术漫谈
首先放一个我部署好的RSS在线阅读器页面:
只要在url传入需要解析的RSS订阅地址,比如xxxx/rss?rssurl=https://blog.csdn.net/qqxx6661/rss/list ,就可以解析出该RSS,并渲染成你想要的博客样式。
整个实现代码除了html模板,只需要4行代码。
Serverless概念
Serverless是一个怎样的运行原理呢?简单的解释下:
腾讯云云函数是腾讯云提供的 Serverless 执行环境。您只需编写简单的、目的单一的云函数即可将它与您的腾讯云基础设施及其他云服务产生的事件关联。
当然了,Serverless不是表示没有服务器,而表示当您在使用 Serverless 时,您无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。核心的代码片段完全由事件或者请求触发,平台根据请求自动平行调整服务资源。Serverless 拥有近乎无限的扩容能力,空闲时,不运行任何资源。代码运行无状态,可以轻易实现快速迭代、极速部署。
它的大致执行流程如下图:
所以,Serverless其实本质上是云服务上帮你整合了云资源,你只需要编写最核心的代码,比如一个请求过来如何处理和返回对应的数据。其他的服务器部署相关的事情,都交给云服务商。这样带来的最核心的好处是节省了大量资源,只有你的网站有人访问时,才会计算资源消耗的价格,大幅度降低了成本。
可能你只是想搭建一个博客,以前可能需要买一年的服务器,起码一年开销几百元。在Serverless下,如果你的博客访问量并不是很高,可能一年只要花费十几块钱。
3分钟部署一个网站
我们打开Serverless创建函数服务页面:
https://console.cloud.tencent.com/scf/list-create?rid=16&ns=default&keyword=WebFunc
选择Python3 Web函数模板:
接着可以设置一些基本信息,这里我啥也没修改,直接点击完成。
大概等待30秒,一个Serverless服务就创建完成了。
接下来,我们就被跳转到了代码编辑页面。由于我们在上面的选项里选了Python3 Web开发,所以代码默认有了一个最基本的Flask框架模板。(Flask是什么?是Python的一个Web开发框架,就像Java下面的SpringBoot一样,也能很轻松地开发一个Web服务。官方文档:https://flask.palletsprojects.com/en/2.0.x/)
模板代码已经有了路径(/)最基本的返回值,我们把它改几个字,然后点击左下角部署按钮。花费了十几秒部署完成后,点击测试,我们就能看到返回的Body了,如下图。这时候你访问页面,也返回了同样的结果。
一个最最基础的Web服务器就OK了,不需要买域名和HTTPS证书,不需要SSH登录服务器,不需要手动编译代码,。
10分钟开发一个在线RSS阅读小站
上面是牛刀小试,接下来稍微整一个复杂一点点的例子。
**我一直觉得RSS阅读是一个虽然过时,但是其精神一直在传承的阅读方式。**比如微信的订阅号,可以说其本质也是一种RSS阅读,通过关注订阅,并获得更新文章的推送,来定制化你的阅读内容。
所以我想做一个RSS解析器,通过传入RSS的网址(很多网站还保留有这个网址,比如CSDN,比如阮一峰的博客等),能够渲染出该RSS链接里所有的文章,并展示在网页上。后面,还可以深度地修改页面的展示,做出一个微信订阅号网页版,也不是不可能,哈哈哈。
OK,花里胡哨的就不扯了,先开始实现一个最简单的事情,把RSS链接渲染出来。
我们使用官方的Flask模板,这个模板的Flask环境相对更加完整,方便开发。
我们首先需要一个RSS解析的框架,在Python中,有一个feedparser的框架,能够解析RSS url。
使用pip3 install feedparser安装feedparser:
接着我们在app.py加入代码:
importfeedparser@app.route(/rss)
def rss():
feed = feedparser.parse(request.args.get(rssurl))returnrender_template(rss.html, entries=feed.entries)
在这里,我进行了一波本地调试,看一下feed这个参数,拿到了什么:
可以看到,解析后的rss链接,被feedparser框架解析为了一个数组,每个entry是一个文章的标题,作者,链接等。
根据上面的参数名,我们再加入一个rss/html,放在templates文件夹中,里面写好了我稍微美化过的html页面,并且将每篇文章循环插入html中,这里用到了flask自带的渲染模板jinja2:
<html><head><title>RSS阅读博客title><linkhref="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/css/bootstrap.min.css"rel="stylesheet">head><body><scriptsrc="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/js/bootstrap.min.js">script><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.slim.min.js">script><divclass="container-fluid"><divclass="row-fluid"><divclass="span12"><navclass="navbar navbar-expand-lg navbar-light bg-light"><divclass="container-fluid"><aclass="navbar-brand"href="">RSS解析器a><buttonclass="navbar-toggler"type="button"data-bs-toggle="collapse"data-bs-target="navbarSupportedContent"aria-controls="navbarSupportedContent"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon">span>button><divclass="collapse navbar-collapse"id="navbarSupportedContent"><ulclass="navbar-nav me-auto mb-2 mb-lg-0"><liclass="nav-item"><aclass="nav-link active"aria-current="page"href="">首页a>li>ul><formclass="d-flex"><inputclass="form-control me-2"type="search"placeholder="Search"aria-label="Search"><buttonclass="btn btn-outline-success"type="submit">Searchbutton>form>div>div>nav><divclass="accordion"id="accordionExample">{% for entry in entries %}<divclass="accordion-item"><h2class="accordion-header"id="heading{{ loop.index }}"><buttonclass="accordion-button"type="button"data-bs-toggle="collapse"data-bs-target="collapse{{ loop.index }}"aria-expanded="false"aria-controls="collapse{{ loop.index }}">{{ entry.title }} | {{ entry.published }}button>h2><divid="collapse{{ loop.index }}"class="accordion-collapse collapse"aria-labelledby="heading{{ loop.index }}"data-bs-parent="accordionExample"><divclass="accordion-body">{{ entry.summary | safe }}div>div>div>{% endfor %}div>div>div>div>body>html>
两个文件修改完,直接点击部署然后访问腾讯云给我们分配的域名:
https://service-ehshqmzv-1252138314.cd.apigw.tencentcs.com/release/rss?url=https://blog.csdn.net/qqxx6661/rss/list
文章版权声明:除非注明,否则均为本站原创文章,转载或复制请以超链接形式并注明出处