Skip to main content

从玩具到生产力 1:Serverless Devs的新手引导

Anycodes

Anycodes

Serverless Devs

Serverless devs在上个月末,在中国上海,发布了2.0版本,对于很多看热闹的人可能就是一个开源工具的升级更新,但是对于我个人来说,这是Serverless Devs从玩具到生产力的转变。

在Serverless Devs 1.0版本,我们是完全的在摸索一条Serverless开发者工具的路,这条路很黑,我们在艰难前进。经过几个月的努力,我们逐渐的看到了光亮,于是在Serverless devs 2.0版本正式发布。

相对于1.0版本,2.0在很多层面上都有了十足的优化。

“无休止”的引导#

Serverless devs 2.0版本,增加了很多的引导,以至于一个超级小白,都可以快速入手体验。

当我们通过npm install -g @serverless-devs/s完成了Serverless devs的安装,我们仅需要一个s就可以开始Serverless之旅:

image

非常明显的s init,带着我们迈向开始的第一步, 选择一个hello world

image

此时我们还没有配置过密钥信息,所以会让我们配置:

image

我们选择Alibaba Cloud即可再次看到引导:

image

打开引导,不仅可以看到密钥的获取方法:

image

还可以看到安全建议:

image

密钥配置成功之后,依旧可以看到下一步的引导:

image

当我们输入:

cd /Users/jiangyu/Desktop/untitled/start-fc/src/mytest/myhello
s -h

之后,我们可以看到金手指:

image

此时只需要按照提示执行命令即可看到帮助文档:

image

完成之后,我们就可以大胆的执行:s deploy进行项目部署。

至此,我们完成了一个新手入门的案例。

也许,有人会觉得上面的步骤有些多,好像并不是十分的方便。其实,上面的过程是我们在完全无额外帮助的前提下,仅仅通过一个s开始的。如果说我们写文档如何引导大家开始第一个hello world呢?

三步开始Serverless devs:

  • 下载Serverless devs:npm install -g @serverless-devs/s
  • 初始化项目,并进入到项目文件夹:s init devsapp/start-fc
  • 部署项目:s deploy

显然三步能说明的问题,我为啥要用上面的整个过程来描述呢?

因为,我们不仅仅希望用户在文档的帮助下,在新手引导文档的帮助下,可以三步开始,我们更希望,开发者可以在任何情况下,哪怕没有文档说明,仅仅通过一个s就开始顺利开始自己的Serverless旅程。

在新版的Serverless Devs中,出现的绝大部分错误,都会给出可能的解决方案:

例如Yaml的格式有问题,我们会告诉你出问题的位置,同时也会告诉你要用标准的Yaml格式: image

再比如,没有找到你要初始化的案例,会告诉你注意源的配置,并且给你两个可能的解决方案: image

再再再比如,当出现错误,我们都会努力给出引导:

😈 If you have questions, please tell us: https://github.com/Serverless-Devs/Serverless-Devs/issues

我们希望的是,用户在使用Serverless Devs的时候,无论何时,都不会因为出现错误而手忙脚乱,因为“Serverless Devs”和广大的社区开发者,一直就在你的身边,陪伴你解决一切问题,让问题不再是问题。

未来章节预告:

  • 《从玩具到生产力 2: 从脚手架到快速部署》
  • 《从玩具到生产力 3: 也许Serverless Devs的CI/CD方案更有趣》
  • 《从玩具到生产力 4: 拥抱容器,让一切容易》
  • 《从玩具到生产力 5: 命令行的可观测性,让“方便”更加“方便”》
  • 《从玩具到生产力 6: 吃自己的狗粮》
  • 《从玩具到生产力 7: 前端开发神器 Rocket》
  • 《从玩具到生产力 8: 简单与感动》

简单几步完成Serverless架构下的Blog建设

Anycodes

Anycodes

Serverless Devs

前言#

在日常生活中,我们经常需要记录一些自己的日常,包括一些想法、状态,或者是学习的某些技术,这个时候,就需要有一个博客系统来满足需求。但是无论是自己开发的博客系统,还是用已经开源的博客软件或者一些CMS系统,只要涉及到自己搭建博客功能,就离不开服务器等云资源,涉及到服务器、数据库等云资源,就势必离不开成本的支出,包括资金成本和运维成本等。此时,如果可以有一个可以保证博客安全、稳定、高性能的同时,又能低运维、低成本的运行博客的云端服务/云产品,显得尤为重要。而随着Serverless架构越来越火热,其按量付费,弹性伸缩... 等很多优质特性,都让人眼前一亮,不得惊叹云计算为我们带来的便利,也让很多人逐渐的开始思考,自己的项目应该如何和Serverless架构有交集,或者如何让Serverless为自己的项目赋能,体验Serverless架构带来的技术红利。

一个博客对于一个人而言可能会承载很多事情,尤其是一个技术博客对于一个程序员而言,不仅仅是自己学习、成长的见证,也是自己的工作、生活的一个见证,甚至在很多的技术面试过程中,拥有一个自己的技术博客都是一个非常不错的加分项。但是传统意义上的很多研发同学建设的技术博客都会面临服务器的问题,因为技术博客往往并没有太大的流量,也很难产生很大的收入,单纯为了自己的兴趣、爱好来购买服务器,并且进行一些后期运维工作,在成本支出、精力支出上确实不太合适。所以基于Serverless架构的博客系统就显得非常重要了,因为基于Serverless架构建设的博客系统,不仅仅可以体验学习进技术,也可以直接得到Serverless架构带来的技术红利

安装Serverless Devs开发者工具#

通过 npm 包管理安装:适用于已经预装了 npm 的 Windows、Mac、Linux 平台。在 Windows、Mac、Linux 平台执行以下命令安装 Serverless Devs Tool工具。

$ npm install @serverless-devs/s -g

或者 通过 yarn 进行安装

$ yarn global add @serverless-devs/s

说明:

  • 如果在 Linux 或 MacOS 下执行该命令报错且报错信息为 Error: EACCES: permission denied,请执行命令 sudo npm install @serverless-devs/s -g。
  • 如果安装过程较慢,可以考虑使用淘宝 npm 源,安装命令为 npm --registry=https://registry.npm.taobao.org install @serverless-devs/s -g。

快速部署博客系统#

Serverless devs提供了多种类型的博客系统:

  • Zblog
  • Wordpress
  • Hexo
  • Vuepress
  • Django Blog

在部署过程中可能需要获取阿里云密钥信息,可以参考:https://config.devsapp.net/account/alibaba

Zblog#

Zblog是一款轻量级的PHP开源框架,拥有独立的后台管理能力,支持Sqlite和Mysql等数据库。
使用该博客系统涉及到阿里云函数计算、容器镜像、硬盘挂载等产品。

部署流程:

  • 初始化一个模版项目:s init devsapp/start-zblog
  • 进入项目:cd start-zblog
  • 部署项目:s deploy

Typecho#

Typecho是一款PHP开源框架,拥有独立的后台管理能力,支持Sqlite和Mysql等数据库。
使用该博客系统涉及到阿里云函数计算、容器镜像、硬盘挂载等产品。

部署流程:

  • 初始化一个模版项目:s init devsapp/start-typecho
  • 进入项目:cd start-typecho
  • 部署项目:s deploy

Wordpress#

Wordpress是一款PHP开源框架,拥有独立的后台管理能力,支持Mysql等数据库。
使用该博客系统涉及到阿里云函数计算、容器镜像、硬盘挂载等产品。

部署流程:

  • 初始化一个模版项目:s init devsapp/start-wordpress
  • 进入项目:cd start-wordpress
  • 部署项目:s deploy

Hexo#

Hexo是一款轻量级的前端开源框架。

部署到函数计算#

针对该博客系统,您可以选择把他部署在函数计算上,涉及到阿里云函数计算、容器镜像、硬盘挂载等产品。

部署流程:

  • 初始化一个模版项目:s init devsapp/start-hexo
  • 进入项目:cd start-hexo
  • 部署项目:s deploy

部署到对象存储#

您也可以选择把他部署在对象存储上,涉及到阿里云函数计算、对象存储、CDN等产品。

部署流程:

  • 初始化一个模版项目:s init devsapp/website-hexo
  • 进入项目:cd website-hexo
  • 部署项目:s deploy

Vuepress#

Vuepress可以作为一款轻量级的前端博客系统。
使用该博客系统涉及到阿里云函数计算、对象存储、CDN等产品。

部署流程:

  • 初始化一个模版项目:s init devsapp/website-vuepress
  • 进入项目:cd website-vuepress
  • 部署项目:s deploy

Django Blog#

Django Blog是一款基于Python Django框架编写的博客系统,拥有独立的后台管理能力,支持Sqlite和Mysql等数据库。
使用该博客系统涉及到阿里云函数计算、容器镜像、硬盘挂载等产品。

部署流程:

  • 初始化一个模版项目:s init devsapp/django-blog
  • 进入项目:cd django-blog
  • 部署项目:s deploy

默认信息:

  • 默认登录后台:/admin
  • 默认账号:blog
  • 默认密码:myblog12345!

Serverless Devs的官网是通过Serverless Devs部署的

Anycodes

Anycodes

Serverless Devs

只有自己吃自己的狗粮,自己做的东西才不“🐶”。Serverless Devs自发展之处到现在,已经经历了几个月的时间,在这几个月,Serverless Devs的成长是迅速的,这很大一部分的原因是“我们在吃自己的狗粮”,我们相信,如果自己都用不爽的东西,大家一定很难用的起来。

今天这篇文章,是一个关于Serverless Devs官网建设的文章,文章很简单,也很有趣。

Serverless Devs与Docusaurus#

众所周知,开源项目的官网不宜太复杂,其实简简单单的就好,所以我们经过了很长时间的对比,最终选择了Docusaurus作为官网的框架选型。那么问题来了,我们选型结束之后,我们要如何来建设官网?

经过一些简单的调研,我们决定用Serverless Devs建设Serverless Devs官网,并将其部署到Serverless架构上,很绕嘴是吧?但是,这个过程却真的很“经典”:

我们通过Serverless devs初始化了Docusaurus:s init devsapp/website-docusaurus,这一部分可以参考文档:https://github.com/devsapp/website-example

讲真,虽然也就是一行代码的事情,但是整个初始化还是比较“赏心悦目”的,作为一个Serverless应用全生命周期的工具,Serverless Devs在脚手架和引导层面还是下了很多功夫的:

image

可以看到,初始化的时候,系统引导式的让我们填写了项目名,存储桶名,以及需要的密钥信息,同时完成之后,还告诉我们:

You could [cd /Users/jiangyu/Desktop/start-fc/website/serverless-website] and enjoy your serverless journey!

感觉还是很贴心的。

接下来,按照指引:

image

可以看到帮助文档:

image

当执行s website-starter -h之后,首次运行帮助信息,可能涉及到组件加载过程,稍等片刻,可以看到帮助信息:

image

此时,我们要将项目部署到线上,只需要执行s deploy即可。

当然,我们还需要对项目进行一定的配置,以及对我们的官网进行一定的建设。

关于网站建设,可以参考Docusaurus的官网文档,关于Serverless Devs的website组件配置,可以参考上图给我们🧭 More information: https://github.com/devsapp/website

image

在文档中可以了解更多的配置内容,最终生成我们的s.yaml

edition: 1.0.0
access: website_access
services:
website:
component: devsapp/website
actions:
pre-deploy:
- run: npm install
path: ./
- run: npm run build
path: ./
props:
bucket: serverless-devs-website
src:
codeUri: ./
publishDir: ./build
index: index.html
subDir:
type: index
region: cn-hongkong

CD与Serverless Devs#

当我们建立好了网站页面,在本地也可以正常运行,通过本地的s deploy也可以顺利部署了,这个时候面临了新的问题:我如何更新我的网站?每次都要手动的在本地发布么?是否可以利用Github Action,接入自动化的能力呢?

所以:

  1. 我创建了一个仓库:https://github.com/Serverless-Devs/website
  2. 我将代码推送到仓库之后,创建了一个Github Action的配置:
name: Website Publish
on:
push:
branches: [ master ]
jobs:
publish-website:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 12
registry-url: https://registry.npmjs.org/
- run: npm install
- run: npm install -g @serverless-devs/s
- run: s config add --AccountID ${{secrets.ALIYUN_ACCOUNT_ID}} --AccessKeyID ${{secrets.ALIYUN_ACCESS_KEY_ID}} --AccessKeySecret ${{secrets.ALIYUN_ACCESS_KEY_SECRET}} -a website_access
- run: s deploy

此时我再push代码,就可以自动将网站发布出来了。

这里面的核心点:

  1. 安装Serverless Devs: run: npm install -g @serverless-devs/s
  2. 配置密钥信息:run: s config add --AccountID ${{secrets.ALIYUN_ACCOUNT_ID}} --AccessKeyID ${{secrets.ALIYUN_ACCESS_KEY_ID}} --AccessKeySecret ${{secrets.ALIYUN_ACCESS_KEY_SECRET}} -a website_access
  3. 部署:run: s deploy

整个效果:

image

部署后的页面:

image

这里要说明,此处配置密钥信息,使用了Github的Secrets功能,这个功能还是比较基础的,所以不多赘述,主要就是将发布的所需要的密钥信息配置到Secrets里面。

总结#

其实,目前来说很多人的博客,部分的官网都是通过静态网站等进行部署,通过Serverless Devs走这一套还是比较方便的:

  1. 得益于Serverless Devs的行为描述,我们可以更简单的将npm installnpm run build等指令集成到项目中;
  2. 得益于Serverless Devs的引导能力,包括创建,入门,以及密钥配置时的获取链接,Serverless devs确实在不断的从细节出发,为便利而努力;
  3. 得益于Serverless Devs的灵活性,只需要两三行代码,就可以配置出Github的CD能力,将网站持续发出去,我觉得这个还是挺爽的;

当然,目前来看还是有一些问题等待去做的:

  1. Serverless Devs的场景还是有待丰富的;
  2. 这个社区官网只有CD,没有CI其实还是有一定风险的,要慢慢的完善起来;

命令行工具升级:不仅仅是更多的Emoji

Anycodes

Anycodes

Serverless Devs

安装完一个工具,第一步做什么?敲一下工具的名称,看看这个工具的“葫芦里卖的什么药”:

image

在这个页面我们做了这样几个事情:

  1. 提供了一个极客的logo:serverless
  2. 提供了工具的简介,并提供了部分的url入口:包括Documents、Discussions、Issues
  3. 提供了快速入门的指令:🍻 Can perform [s init] fast experience
  4. 提供了指令说明,包括自定义命令,例如: 👉 This is a customer command please use [s fc-deploy-test -h] obtain the documentation

当我们入门执行s init之后,你会发现:

image

我们提供了:Hello World Example、Web Framework Example、Static Website、Serverless Dev template等十余个案例的模板,如果觉得这些模板不够有趣,还可以直接使用已有的模板。那么问题来了,已有的模板在哪里看呢?

当然,在这个页面已经告诉大家了:🚀 More: https://github.com/Serverless-Devs/package-awesome

So.... 我们可以初始化一个,假如说,我们要初始化一个zblog-example:

image

不要惊慌,仔细看一下错误信息:No application found?,下面附带了几个解决方案:

1️⃣ Start quickly with 's init'
2️⃣ See some cases on GitHub: https://github.com/Serverless-Devs/package-awesome
😬 Give us an issue to solve: https://github.com/Serverless-Devs/Serverless-Devs/issues

Get新技能,打开 https://github.com/Serverless-Devs/package-awesome搜索一下zblog,发现zblog案例叫做start-zblog,果然名字不能瞎猜,要看文档,接下来s init start-zblog,爽歪歪 ....

image

Serverless Devs 开源之夏 2021

Anycodes

Anycodes

Serverless Devs

Serverless Devs 目前已经在参加 开源之夏 2021 的活动。

在开源之夏中,我们将会提交以下项目,欢迎同学们积极报名:

  • Serverless Devs测试用例的完善: Serverless Devs现在的包括主仓库和组件库两个部分。 例如Serverless Devs repo:https://github.com/serverless-devs 在这个repo中,由于Serverless Devs项目是发展中的,所以测试用例目前并不完善。所以该项目的工作是为该项目编写测试用例。 主要包括: https://github.com/serverless-devshttps://github.com/devsapp
  • Serverless 调试&依赖安装优化: Serverless架构很新,很热,被很多人关注,但是其被吐槽的点还是有一些的,例如调试复杂,安装依赖复杂。所以通过该项目进行调试和依赖安装的相关调研,并参与到开源项目中,提供行业的解决方案。
  • Serverless架构环境划分方案探索: Serverless架构发展速度很快,但是也有很多问题,例如环境划分(开发环境,线上环境,测试环境)等,希望通过该项目,可以通过工具链层面提供一种环境划分的方案,并将其实现成Serverless Devs的组件。
  • Serverless Devs 云厂商组件开发:Serverless devs是一个无厂商锁定的Serverless开发者工具,目前已经支持阿里云、腾讯云、AWS等多家云厂商的Serverless产品,希望通过本项目可以进一步拓展云厂商的组件。
  • Serverless与前端的碰撞:Serverless架构被称为是云计算的下一个十年,更是被很多前端工程师视为“改变命运的转折点”,通过Serverless架构,“前端不再是单纯的前端”,通过Serverless架构,“人人都是全栈工程师”,那么Serverless架构和前端的碰撞到底是什么样子的?希望通过该项目,更多的同学可以对Serverless有一个更深入的了解,对Serverless架构有一个更深刻的认识,同时希望可以进一步探索Serverless架构与前端的结合点,并做出一些有趣的事情吧!
  • Serverless工具链新形态的探索:Serverless架构是一个比较新的话题,Serverless架构的工具链更是比较受关注的点,那么Serverless架构的工具链和传统的例如K8S工具,和一些监控告警工具有什么区别呢?Serverless架构的工具更应该注意什么问题呢?它长什么样子呢?目前Serverless Devs作为Serverless的工具链开源项目,包括Serverless CLI,Serverless Desktop,Serverless Cloud以及Serverless Hub,Serverless Registry等几个部分,那么这些模块又是如何划分,有什么作用呢?通过本项目,希望大家可以对Serverless有一定的了解,对Serverles是架构工具链有一定的自主思考能力,并且参与到Serverless架构工具链的创新中。
  • Serverless CI/CD探索:Serverless架构是相对来说比较新的技术,也是目前比较火热的技术,随着时间的不断发展,其也被更多人所重视,成为更多企业技术选型的首选。通过Serverless架构虽然在一定程度上做到了降本提效,但是却可能产生更细腻的资源,这些资源的管理,持续集成/发布,逐渐的成为了比较重要的关注点,所以本项目将会是Serverless CI/CD的探索,主要包括Serverless架构下的CI/CD是什么样子的,Serverless本身是否可以做CI/CD,Serverless架构工具链和CI/CD结合后是什么样子的。

我们期待你#

如果需要参加上面所述的项目,您需要具备以下基础条件:

  • 基础的前端知识,例如HTML,Javascript,CSS等;
  • 对后端语言等有一定的了解,尤其是Node.js/Typescript;
  • 有一颗积极探索的心,不断的发现问题,不断的创新挑战;
  • 有积极负责的态度,不仅仅要学习,更要有对一件事的执着,愿意探索新鲜事物;

加分项:

  • 对Serverless有一定了解
  • 对CI/CD,环境划分等有一定了解
  • 开发过完整项目,有过开源贡献经验;

我们将会提供#

  • 相关的Serverless资料,包括Serverless的学习路径
  • Serverless Devs的相关资料
  • 强大的导师阵容
    • 寒斜:阿里云智能云原生中间件前端负责人,2016年加入阿里中间件从事云产品企业控制台研发工作,目前带队负责中间件20多款云产品的前端研发工作,主要技术栈为大前端通用技术,包括不限于Node.js, TypeScript, React , Electron, ReactNative等。对前端研发效能提升,前端数字化体验管理体系建设有多年的实践经验,目前专注在Serverless 开发者工具链的建设,是云原生Serverless Dev研发负责人。关注前端最新技术动态,关注云原生技术对前端群体的影响,致力于向前端群体推广普及云原生理念
    • 西流:阿里云智能云原生函数计算技术专家,负责阿里云函数计算产品功能开发(runtime开发、事件源集成以及企业级sereverless解决方案落地等),目前专注在Serverless 开发者工具链的建设,是云原生Serverless Dev Tools研发负责人之一,主导了S/fc 组件的开发工作。关注Serverless最新技术动态以及在企业级解决方案的落地,致力于推动 Serverless 在开发者群体的流行
    • 江昱:NUDT在读博士,阿里云Serverless产品体验侧负责人,开源社区Serverless Framework国内贡献者,Serverless Devs项目发起人,Serverless架构布道师,阿里云CIO学院特聘讲师,纸质图书《Serverless架构》、《Serverless工程实践》作者,电子书《架构师特刊:人人都能学会的Serverless实践》作者;

希望的样子#

  • 你可以对Serverless有更加深刻的认识;
  • 你可以参与到Serverless Devs社区工作中来;
  • 可以开发出对应项目的组件,以帮助Serverless生态中的更多人,让大家一起玩转Serverless;

总结#

Serverless是非常前沿的技术,Serverless devs是非常重要的工具链体系,我们愿意和大家一起努力,一起奋进,为推动Serverless的发展而不断前行。