Skip to main content

8 posts tagged with "命令行"

View All Tags

从玩具到生产力 2: 从脚手架到快速部署

Anycodes

Anycodes

Serverless Devs

从刚开始接触一个工具,到通过这个工具把一个东西部署到线上要多久?这一直是我在思考的一个问题,就我个人而言,如果这个时间超过1小时,就会大大折扣开发者的耐性,甚至让开发者直接放弃这个工具的使用,更甚之,这个时间不能超过30分钟,10分钟,5分钟。

那么Serverless Devs从脚手架到快速部署要多久呢?

部署一个Hello World#

当我们通过npm install -g @serverless-devs/s完成了Serverless的安装,我们只需要s init,选择一个云厂商(例如Alibaba),就可以看到Hello world的模板了:

image

此时,我们可以快速选择一个Hello world的模板:

image

此时脚手架发挥作用,会引导我们选择文件目录,所需密钥信息等,完成之后,我们就可以直接进入项目目录,并且执行s deploy部署项目:

image

此时系统会为我们默认分配一个域名,我们可以直接打开:

image

部署一个Zblog/Wordpress#

部署一个Zblog/Wordpress有多简单?也许在传统服务器上,宝塔等工具已经让我们部署这类PHP框架非常简单的,但是在Serverless架构下,由于天然分布式原因,由于一些目录不可写原因,这些框架的部署,还是挺受考验的。

但是Serverless devs可以提供非常简单的部署方案:

image

根据各种提醒,即可完成项目创建:

image

这里需要额外说明一下,阿里云Serverless Devs提供的传统CMS,BLOG等项目的部署到Serverless架构,默认采用了NAS的模式,即函数计算本身是一个单纯的环境,所有代码等放在NAS中,这样可以保证代码最小改造,以目前的所示的Zblog案例,理论上是可以做到0改造部署到Serverless架构,Wordpress同样。Wordpress的初始化方法为:s init start-wordpress

完成之后,同样可以获得到一测试地址,快速体验。

更多的部署#

  • 快速创建案例项目:
    • 快速创建WordPress: s init start-wordpress
    • 快速创建ZBlog: s init start-zblog
    • 快速创建Discuz: s init start-discuz
    • 快速创建企业网站: s init start-metinfo
    • 快速创建问答系统: s init start-whatsns
    • 快速创建电商系统: s init start-ecshop
  • 快速创建静态项目:
    • react应用 s init devsapp/website-react
    • vue应用 s init devsapp/website-vue
    • hexo应用 s init devsapp/website-hexo
    • docusaurus应用 s init devsapp/website-docusaurus
    • vuepress应用 s init devsapp/website-vuepress

创建完成之后,可以直接进入项目,执行s deploy进行项目部署

总结#

Serverless Devs提供了强大的脚手架能力和快速部署的能力,通过这些能力,对我们:

  • 创建一个初始化项目快速体验有极好的帮助
  • 对我们快速创建一个示例项目有很好的支持
  • 对于我们快速开发,上手项目有比较好的效果

如何通过Github Action使用Serverless Devs做CI/CD

Anycodes

Anycodes

Serverless Devs

当我们在体验Serverless之后,欲将项目真真实实的部署到Serverless架构时,CI/CD是我们很多人绕不开的话题,那么基于Serverless Devs这款工具,如何快速的和Github Action进行有机结合,实现CI/CD的能力呢?

CI/CD的“脚手架”#

现在有很多的脚手架,但是Serverless CI/CD的脚手架应该还是少数的,而Serverless Devs为我们提供了一个CI/CD的脚手架,以Github Action为例,我们可以执行代码,快速在项目下初始化CI/CD模板。

例如,当前我的项目结构:

image

此时,我只需要告诉Serverless Devs,我要生成一个Github Action模板即可:

s cli cicd github

image

我们可以看到,系统会在当前项目创建相对应的CI/CD模板:

image

至此,我们完成了第一个步骤,初始化一个CI/CD的模板。

流程配置#

Yml文件配置#

系统所为我们生成的模板文件实际上是一个非常简单的案例:

name: Serverless Devs Project CI/CD
on:
push:
branches: [ master ]
jobs:
serverless-devs-cd:
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
# 默认密钥配置指令是阿里云密钥配置指令,更多可以参考:
# 如何通过Github Action使用Serverless Devs做CI/CD:http://short.devsapp.cn/cicd/github/action/usage
# Serverless Devs的官网是通过Serverless Devs部署的: http://short.devsapp.cn/cicd/github/action/practice
- run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
- run: s deploy

整个核心流程是:

  1. 下载serverless-devs
  2. 配置密钥信息
  3. 项目部署(执行s deploy命令)

但是在实际生产过程中,我们可能需要自定义使用一些功能,此时可以参考Github Action的文档:https://docs.github.com/cn/actions

例如,我在下载serverless-devs之后,配置密钥之后,我需要进行build等操作,操作之后,我在删除临时生成的文件夹"./abc",此时我们可以:

...
- run: npm install
- run: npm install -g @serverless-devs/s
# 默认密钥配置指令是阿里云密钥配置指令,更多可以参考:
# 如何通过Github Action使用Serverless Devs做CI/CD:http://short.devsapp.cn/cicd/github/action/usage
# Serverless Devs的官网是通过Serverless Devs部署的: http://short.devsapp.cn/cicd/github/action/practice
- run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
- run: s build
- run: rm -rf ./abc
- run: s deploy

所以,具体的流程,我们完全可以根据需求自定义。

账号信息配置#

在上一个流程中,我们涉及到密钥信息的配置,我们可以使用Serverless Devs为我们提供的s config add命令进行。

例如,阿里云的账号体系需要AccountID,AccessKeyID,AccessKeySecret等内容,此时我们可以:

  1. 将密钥信息配置到Github Secrets中

image

我们创建多对密钥信息:

image

例如,我此处配置了三对密钥:

  • ALIYUN_ACCOUNT_ID对应阿里云密钥体系中的AccountID
  • ALIYUN_ACCESS_KEY_ID对应阿里云密钥体系中的AccessKeyID
  • ALIYUN_ACCESS_KEY_SECRET对应阿里云密钥体系中的AccessKeySecret

image

我此时则可以对应配置:

s config add --AccountID ${{secrets.ALIYUN_ACCOUNT_ID}} --AccessKeyID ${{secrets.ALIYUN_ACCESS_KEY_ID}} --AccessKeySecret ${{secrets.ALIYUN_ACCESS_KEY_SECRET}} -a website_access

当然,不同厂商可能需要不同的密钥信息配置,部分情况下厂商可能还需要配置临时密钥,此时可以通过s config add -h获取密钥配置的帮助文档:

jiangyu@ServerlessSecurity ~ % s config add -h
Usage: s config add [commands] [name]
You can add an account
Example:
$ s config add
$ s config add --AccessKeyID ****** --AccessKeySecret ****** --AccountID ******
$ s config add --AccessKey ****** --SecretKey ******
Configuration parameters for cloud vendors:
alibaba: AccountID, AccessKeyID, AccessKeySecret
aws: AccessKeyID, SecretAccessKey
baidu: AccessKeyID, SecretAccessKey
huawei: AccessKey, SecretKey
google: PrivateKeyData
tencent: AccountID, SecretID, SecretKey
🧭 How to get the key: https://github.com/Serverless-Devs/docs/tree/master/zh/others/provider-config
Options:
--AccountID [AccountID] AccountID of key information
--AccessKeyID [AccessKeyID] AccessKeyID of key information
--AccessKeySecret [AccessKeySecret] AccessKeySecret of key information
--SecretAccessKey [SecretAccessKey] SecretAccessKey of key information
--AccessKey [AccessKey] AccessKey of key information
--SecretKey [SecretKey] SecretKey of key information
--SecretID [SecretID] SecretID of key information
--PrivateKeyData [PrivateKeyData] PrivateKeyData of key information
-kl , --keyList [keyList] Keys of key information, like: -kl key1,key2,key3
-il , --infoList [infoList] Values of key information, like: -kl info1,info2,info3
-a , --aliasName [name] Key pair alias, if the alias is not set, use default instead
-h, --help Display help for command

如何配置自定义Key-Value的密钥,例如某个组件是我自己开发的,我需要配置一个Key为tempToken1,Value为tempValue1,和Key为tempToken2,Value为tempValue2,别名为demo的密钥对? 此时可以通过参数-kl , --keyList [keyList]-il , --infoList [infoList]自定义添加,例如:s config add -kl tempToken1,tempToken2 -il tempValue1,tempValue2 -a demo image

密钥中的别名有什么? 密钥中的别名,是为了帮助Serverless Devs更快的识别出你要用的密钥信息,主要是在Yaml中体现,例如: image 在此处配置的密钥信息(默认是default),如果此处配置了密钥别名是"default",那么系统就会在执行相关操作的时候,去获取名为"default"的密钥信息;

我的一个应用中,涉及到部署到多个平台,需要多个密钥信息,如何配置?
例如,当存在项目: image 此时,该app中涉及到两个Service,分别用了不同的组件以及不同的密钥内容website_access, fc_access
我们可以通过配置多个密钥信息来进行CI/CD的配置

  1. 在Github Secrets处配置对应的Key-Value
  2. 在生成的.github/workflow/serverless-devs.yml文件中配置密钥信息:
s config add -kl tempToken1,tempToken2 -il tempValue1,tempValue2 -a website_access
s config add -kl tempToken3,tempToken4 -il tempValue3,tempValue4 -a fc_access

Others#

Best practices:

透过指令集设计去看Serverless Devs 的扩展能力

hanxie-crypto

hanxie-crypto

Serverless Devs

希望通过本篇文章帮助你理解serverless devs 的指令集设计思想,并且希望你能够更好的使用serverless devs工具提升自己的开发生产力

静态指令和动态指令#

目前serverless devs 开发者工具的静态指令集非常简单只有5个 image.png

  • 配置云商秘钥的【config】
  • 初始化应用/组件的 【init】
  • 以及无配置式执行指令的 【cli】
  • 数据源设置【set】
  • 以及可以用来支持 复杂指令执行的 【exec】

以上的静态指令集主要可以帮助新用户快速使用s工具,掌握s工具的基本能力。 除了上面的静态指令,还有就是检测到有配置文件s.yaml会自动生成的动态指令,这些动态指令是根据具体执行组件的方法来确认的。举个例子,如果有一个配置文件如下,他包含了一个标准服务 component-demo,服务所关联的逻辑组件是s-demo

edition: 1.0.0 # 命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范
name: component-demo # 项目名称
vars: # [全局变量,提供给各个服务使用]
logo: https://image.aliyun.com/xxxx.png
domain: xxxx.yyy.com
services:
component-demo: # 服务名称
component: s-demo # 这里引入的是相对路径,正式配置替换成你自己的component名称即可
props:
name: ${component-test2.props.name}
otherInput: ${component-test2.output.hello}
envshow: ${env(USER)}

那么在这个配置文件的同目录下你去查看s 的输出指令,会发现新增了一个 component-demo的指令 image.png 然后你可以通过 s component-demo -h 查看其具体的使用方法 image.png 实现的原理是输入了 s component-demo test 指令后s工具会去找到 component-demo 关联的 组件s-demo,然后对他进行实例化,再把配置文件中的props 参数以及 内置的秘钥信息参数统一传到 s-demo 的 test 方法中,并且会代为执行test 方法,并把该方法的结果进行格式化输出。
这样的好处就是,s工具不关心具体的组件实现逻辑,只负责编排和解析,而把具体的执行逻辑交给组件也就是具体由开发者实现,从而极大的扩展了工具的能力范围。 假设你的配置文件下有多个services

edition: 1.0.0 # 命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范
name: component-demo # 项目名称
vars: # [全局变量,提供给各个服务使用]
logo: https://image.aliyun.com/xxxx.png
domain: xxxx.yyy.com
services:
component-demo: # 服务名称
component: s-demo # 这里引入的是相对路径,正式配置替换成你自己的component名称即可
props:
name: s1
component-demo2: # 服务名称
component: s-demo # 这里引入的是相对路径,正式配置替换成你自己的component名称即可
props:
name: s2

如果你不希望通过输入 s component-demo test , s component-demo2 test 这样一个一个的去执行,也可以通过 s test 去全量执行 image.png 系统会提示要执行的全量服务,并且会把最终结果做汇总,一起输出,这样的好处是简化了多服务并且之间有依赖关系的执行方式,是应用编排能力的具体实现。 即使只有一个服务也可以 使用 s test,最起码输入的字符更少,更加节省时间。

cli - 无配置执行组件的指令#

单独把这个指令拿出来说是因为他是本篇文章的主角,体现Serverless devs 强大扩展能力的关键点之一。#

我们知道,随着一个工具支持的能力越来越多,他的使用复杂度也会越来越高,我们一直想在设计上做一个平衡,既能够让新用户快速上手,不让那些复杂的指令迷人眼,也能够支持老用户的进阶,满足他们更高层次的需求。 配置式的指令执行方式固然有着他自己的强大和独到之处,但是相关的依赖也让很多自动化的流程变的更加的复杂,所以团队考虑再三决定推出无配置的指令集 s cli image.png

实际上有了cli指令,我可以在数小时或半天之内扩展一个新的功能点,并且对用户而言无需更新他们的工具集,即可使用我开发的功能。

真实组件例子#

platform - 登录,注册,发布#

拿 platform 组件举例子来说,platform 组件是为了方便开发者贡献用用或者组件,快速发布到我们的serverless hub上,从开发测试到发布使用只用了半天不到。 已经安装好s工具的开发者不需要做任何的升级改变,就可以 通过 s cli platform register 注册 serverless hub账号; 以及 s cli platform login 登录 serverless hub; 然后再通过s cli platform publish 发布已经写好的应用/组件。

init - 已有项目初始化s配置, cicd配置, api 配置#

再比如当前我们的 s init 只能针对新项目初始化配置,对于已有项目,例如我已经有一个使用create-react-app开发的前端项目,想把他部署到 云服务上。是没有办法处理的,这时如果通过修正代码,增加逻辑分支支持固然也可以应对这种需求,但这必须要求我修改核心功能并且进行一次发布,然后让开发者用户更新他们的命令行工具。一方面流程变得很长,并且存在变动导致的功能异常风险,另外一方面在整个用户体验上也不够友好,如果功能不停的增加意味着开发者用户要不停的升级。
我采取的方案是通过cli 组件扩展

  • 1.使用 s init 初始化一个组件模板,命名为 init ,
  • 2.然后开发初始化逻辑,比如对已有项目初始化配置文件,支持添加cicd配置文件,添加api文件等
  • 3.使用 s cli platform publish(其实已经内置到组件模板的npm publish指令了,可以直接使用npm run publish) 发布到应用市场。

之后其他的开发者就能够使用这个组件 ,通过 s cli init 引导式的初始化配置,并且 使用s deploy将自己的静态站点发布,整个过程行云流水,效率奇高,并且核心模块完全不受影响,完全不用担心影响到其他的功能使用

关于如何快速开发自己的组件请戳这里#

未来的扩展#

除了platform,init 这些官方的能力,我们也欢迎更加优秀的场景方案透出到指令设计上。这边我可以把场景大家分享一下,具体实现可以交给大家

场景1#

企业内部系统自动化流程构建, 比如我们提交代码,触发集成测试,然后继续构建部署Serverless服务到指定的云商,最后把部署结果通过钉钉等IM 端通知到开发者。 这个时候你可以在自己的CI,CD 服务器上部署 s 工具,然后开发 对应的组件,在执行脚本里面通过 s cli <自定义组件> <自定义方法> 处理流程,最终完成这个流程 ​

场景2#

企业内容serverless 开发脚手架初始化 ,通过包装s 工具完成内部常用开发工程的选择,初始化配置 ,部署测试等工作。 比如你经常做中后台开发, 可以为内部其他开发同学提供多个主题选择,将s工具用于部署和调试阶段会减少对这方面的开发量 ​

其他更多的场景取决于你的想象力。

写在最后#

我们最近一直在思考,工具最终要做成什么样子,最后觉得是能够帮助到更多的开发者,让他们享受serverless红利,或者优化自己的工作流都是好的,当然这个过程离不开广大开发者的支持,我们也希望不仅仅是我们自己在主导这个项目,希望更多的人参与进来加入社区,通过社区去主导他,只有集众所长,才有能把serverless devs 建设的更好。 社区也正在招募优秀开发,欢迎你的加入, 提pr,提issue,点star 都可以。

项目地址 https://github.com/Serverless-Devs/Serverless-Devs

阿里云Cloudshell助力Serverless Devs快速体验

Anycodes

Anycodes

Serverless Devs

如果想要体验命令行工具需要那几步骤?下载客户端->配置密钥信息->下载模板项目->配置相关的资源->部署项目。

在Serverless Devs中,这个过程可以非常简单:通过Cloudshell,直接初始化项目,并且快速入门Serverless,快速体验Serverless Devs。

首先,可以参考我们基于Cloudshell创建的帮助仓库:https://github.com/devsapp/devsapp-cloudshell-example

例如,我们想要体验Django项目:

image

此时,可以点击这个链接,并登陆阿里云账号,可以看到一个在线执行工具就出现了:

image

此时点击“确定”按钮即可:

image

完成每一步骤,点击右下角的"下一步"即可,当完成最后一步,我们可以看到系统会给我们返回默认的域名,此时我们就完成了项目的“初体验”。

Serverless devs是一款重快速体验的产品,虽然开源没多久,但一直在提升用户体验的道路上不断的努力,这次与阿里云Cloudshell结合,赋能阿里云相关的组件/应用快速部署,极速体验,这是具有非常跨越性的“体验提升”。也非常希望更多云厂商可以参与到Serverless的社区建工作中。

从玩具到生产力 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

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