Skip to content

Commit

Permalink
feat: support koa,egg,next,nuxt,thinkphp frameworks (#1)
Browse files Browse the repository at this point in the history
* feat: support koa,egg,next,nuxt,thinkphp frameworks

* chore: fix express test

* fix: apigw remove error

* docs: update readme

* docs: add vision in readme
  • Loading branch information
yugasun authored Oct 27, 2020
1 parent 5c5c3fb commit a8c568a
Show file tree
Hide file tree
Showing 185 changed files with 3,768 additions and 103 deletions.
2 changes: 1 addition & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ coverage
dist
node_modules
example
*.test.js
examples
89 changes: 32 additions & 57 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,43 @@
# Serverless Framework Component

Serverless Web 框架组件,可以方便将传统 Web 框架部署到腾讯云 Serverless 架构上。
[![Build Status](https://github.com/serverless-plus/tencent-framework/workflows/Test/badge.svg?branch=master)](https://github.com/serverless-plus/tencent-framework/actions?query=workflow:Test+branch:master)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)

> 此组件非腾讯云官方组件,很多特性是实验性的。如果有相关疑问,请提交 issue 或者 pr。
Serverless Web 框架组件,可以方便将传统 Web 框架部署到腾讯云 Serverless 架构上,支持目前流行的所有 Web 框架。

目前支持框架:

- [x] Express
- [ ] Koa
- [ ] Egg.js
- [ ] Next.js
- [ ] Nuxt.js
- [x] Express.js
- [x] Koa.js
- [x] Egg.js
- [x] Next.js
- [x] Nuxt.js
- [x] Laravel
- [x] ThinkPHP
- [x] Flask
- [ ] Django
- [x] Laravel
- [ ] ThinkPHP

### 安装
## 愿景 🚀🚀🚀

由于现存 Web 框架组件太多了,配置文档比较零散,维护起来比较困难,但是 Web 框架组件的核心逻辑基本一致,为此作为`第三方开发者`开发了本适配所有 Web 框架的组件。而且 yaml `配置`也进行了`重新设计``不兼容其他独立的框架组件配置`

希望因此能够帮助到广大爱好 Serverless Components 的开发者。

## 示例项目

[Examples](./examples)

## 安装

通过 npm 安装最新版本的 Serverless Framework

```bash
$ npm install -g serverless
```

### 初始化项目
## 初始化项目

通过如下命令和模板链接,快速创建一个 Express 应用:

Expand All @@ -31,14 +46,16 @@ $ serverless init express-starter --name example
$ cd example
```

### 配置
## 配置

**现在还是开发阶段,版本为 `framework@dev`**

以下是 Express 框架的 `serverless.yml`配置示例:

```yml
app: serverless
stage: dev
component: framework
component: framework@dev
name: express-demo

inputs:
Expand All @@ -61,52 +78,10 @@ inputs:
> 注意:`inputs` 中 `framework` 参数是必须的,组件将根据该参数来对 Web 框架项目进行自动化部署。

### 5. 开发调试

部署了 Express.js 应用后,可以通过开发调试能力对该项目进行二次开发,从而开发一个生产应用。在本地修改和更新代码后,不需要每次都运行 `serverless deploy` 命令来反复部署。你可以直接通过 `serverless dev` 命令对本地代码的改动进行检测和自动上传。

可以通过在 `serverless.yml`文件所在的目录下运行 `serverless dev` 命令开启开发调试能力。

`serverless dev` 同时支持实时输出云端日志,每次部署完毕后,对项目进行访问,即可在命令行中实时输出调用日志,便于查看业务情况和排障。

除了实时日志输出之外,针对 Node.js 应用,当前也支持云端调试能力。在开启 `serverless dev` 命令之后,将会自动监听远端端口,并将函数的超时时间临时配置为 900s。此时你可以通过访问 chrome://inspect/#devices 查找远端的调试路径,并直接对云端代码进行断点等调试。在调试模式结束后,需要再次部署从而将代码更新并将超时时间设置为原来的值。详情参考[开发模式和云端调试](https://cloud.tencent.com/document/product/1154/43220)。

### 6. 查看状态

在`serverless.yml`文件所在的目录下,通过如下命令查看部署状态:

```
$ serverless info
```
### 7. 移除
在`serverless.yml`文件所在的目录下,通过以下命令移除部署的 Express 服务。移除后该组件会对应删除云上部署时所创建的所有相关资源。
```
$ serverless remove
```
和部署类似,支持通过 `serverless remove --debug` 命令查看移除过程中的实时日志信息。
## 账号配置
## 部署

当前默认支持 CLI 扫描二维码登录,如您希望配置持久的环境变量/秘钥信息,也可以本地创建 `.env` 文件
```console
$ touch .env # 腾讯云的配置信息
```

`.env` 文件中配置腾讯云的 SecretId 和 SecretKey 信息并保存

如果没有腾讯云账号,可以在此[注册新账号](https://cloud.tencent.com/register)

如果已有腾讯云账号,可以在[API 密钥管理](https://console.cloud.tencent.com/cam/capi)中获取 `SecretId``SecretKey`.

```
# .env
TENCENT_SECRET_ID=123
TENCENT_SECRET_KEY=123
```bash
$ sls deploy
```

## License
Expand Down
16 changes: 9 additions & 7 deletions tests/integration.test.js → __tests__/express.test.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
const path = require('path')
require('dotenv').config({
path: path.join(__dirname, '..', '.env.test')
})
const { generateId, getServerlessSdk } = require('./utils')
const execSync = require('child_process').execSync
const { execSync } = require('child_process')

// set enough timeout for deployment to finish
jest.setTimeout(300000)

const srcPath = path.join(__dirname, '..', 'example/express')
const srcPath = path.join(__dirname, '..', 'examples/express')

// the yaml file we're testing against
const instanceYaml = {
Expand All @@ -31,7 +28,7 @@ const instanceYaml = {
const credentials = {
tencent: {
SecretId: process.env.TENCENT_SECRET_ID,
SecretKey: process.env.TENCENT_SECRET_KEY,
SecretKey: process.env.TENCENT_SECRET_KEY
}
}

Expand All @@ -54,7 +51,12 @@ it('should successfully deploy express app', async () => {

it('should successfully remove express app', async () => {
await sdk.remove(instanceYaml, credentials)
result = await sdk.getInstance(instanceYaml.org, instanceYaml.stage, instanceYaml.app, instanceYaml.name)
const result = await sdk.getInstance(
instanceYaml.org,
instanceYaml.stage,
instanceYaml.app,
instanceYaml.name
)

expect(result.instance.instanceStatus).toEqual('inactive')
})
File renamed without changes.
Loading

0 comments on commit a8c568a

Please sign in to comment.