tencent cloud

云函数

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
相关概念
工作原理
产品优势
应用场景
相关产品
购买指南
计费概述
计费方式
计费项与计费方式
函数算力支持
免费额度
产品定价
计费示例
欠费与停服说明
快速入门
使用控制台创建一个事件函数
操作指南
配额管理
函数管理
Web 函数管理
日志管理
并发管理
触发器管理
函数 URL
自定义域名
版本管理
别名管理
权限管理
运行实例管理
插件管理
监控与告警管理
网络配置
层管理
执行配置
扩展存储管理
DNS 缓存配置
资源托管模式管理
近离线资源托管模式
工作流
触发器
触发器概述
触发器事件消息结构汇总
API 网关触发器
COS 触发器
CLS 触发器
定时触发器
CKafka 触发器
Apache Kafka 触发器
MQTT 触发器
触发器配置描述
MPS 触发器
CLB 触发器说明
云 API 触发器
开发指南
基本概念
测试云函数
环境变量
依赖安装
使用容器镜像
使用 Docker 安装依赖
错误类型与重试策略
死信队列
云函数接入数据库
自动化部署
云函数状态码
常见错误码解决方法
开发者工具
Serverless Web IDE
函数间调用 SDK
第三方工具
代码开发
Python
Node.js
Golang
PHP
Java
Custom Runtime
使用镜像部署函数
Web 框架部署
通过命令行完成框架部署
快速部署 Egg 框架
快速部署 Express 框架
快速部署 Flask 框架
快速部署 Koa 框架
快速部署 Laravel 框架
快速部署 Nestjs 框架
快速部署 Nextjs 框架
快速部署 Nuxtjs 框架
快速部署 Django 框架
实践教程
最佳实践概述
云产品联合解决方案
业务开发相关实践
实时音视频 TRTC
对象存储 COS
消息队列 CKafka
日志服务CLS
负载均衡 CLB
视频处理 MPS
内容分发网络 CDN
云数据仓库 PostgreSQL
云点播 VOD
短信 SMS
Elasticsearch Service
定时任务
视频处理
客户案例
腾讯在线教育
在线教育行业案例
游戏聊天系统
腾讯互娱国际(IEGG)
API 文档
History
Introduction
API Category
Making API Requests
Other APIs
Namespace APIs
Layer Management APIs
Async Event Management APIs
Trigger APIs
Function APIs
函数和层的状态说明
Data Types
Error Codes
SDK文档
常见问题
通用问题
Web 函数相关问题
计费相关问题
网络相关问题
日志相关问题
SCF 工具相关问题
事件处理相关问题
API 网关触发器相关问题
相关协议
Service Level Agreement
联系我们
词汇表
文档云函数Web 框架部署通过命令行完成框架部署

通过命令行完成框架部署

PDF
聚焦模式
字号
最后更新时间: 2024-12-02 20:43:00
除了控制台之外,您也可以通过命令行快速部署 Web 框架,本篇文档将具体为您介绍,如何通过 Serverless Framework 的 HTTP 组件,完成 Web 应用的本地部署。

前提条件

已开通服务并完成 Serverless Framework 的 权限配置

支持框架

操作步骤

1. 本地开发应用 根据您实际业务场景,本地完成开发,详情可参考 支持框架 开发文档。
2. 配置 yml 文件 在项目根目录下,新建 serverless.yml 文件,按照以下示例进行配置编写。全量配置请参考 配置文档
# serverless.yml
component: http # (必选) 组件名称
name: webDemo # 必选) 组件实例名称.

inputs:
region: ap-guangzhou # 云函数所在区域
src: # 部署src下的文件代码,并打包成zip上传到bucket上
src: ./ # 本地需要打包的文件目录
exclude: # 被排除的文件或目录
- .env
- 'node_modules/**'
faas: # 函数配置相关
framework: express #选择框架,此处以 express 为例
runtime: Nodejs12.16
name: webDemo # 云函数名称
timeout: 10 # 超时时间,单位秒
memorySize: 512 # 内存大小,默认 512 MB
layers:
- name: layerName # layer名称
version: 1 # 版本

apigw: # # http 组件会默认帮忙创建一个 API 网关服务
isDisabled: false # 是否禁用自动创建 API 网关功能
id: service-xxx # api网关服务ID,不填则自动新建网关
name: serverless # api网关服务ID
api: # 创建的 API 相关配置
cors: true # 允许跨域
timeout: 15 # API 超时时间
name: apiName # API 名称
qualifier: $DEFAULT # API 关联的版本
protocols:
- http
- https
environment: test

3. 创建完成后,在根目录下执行 sls deploy 进行部署,组件会根据选择的框架类型,自动生成 scf_bootstrap 启动文件进行部署。
注意:
由于启动文件逻辑与用户业务逻辑强关联,默认生成的启动文件可能导致框架无法正常启动,建议您根据实际业务需求,手动配置启动文件,详情参考各框架的部署指引文档。

示例 scf_bootstrap:

express:
#!/usr/bin/env bash

/var/lang/node12/bin/node app.js
koa
#!/usr/bin/env bash

/var/lang/node12/bin/node app.js
egg
#!/var/lang/node12/bin/node

/**
* dockernode 路径:/var/lang/node12/bin/node
* 由于 serverless 函数只有 /tmp 读写权限,所以在启动时需要修改两个环境变量
* NODE_LOG_DIR 是为了改写 egg-scripts 默认 node 写入路径(~/logs)-> /tmp
* EGG_APP_CONFIG 是为了修改 egg 应有的默认当前目录 -> /tmp
*/

process.env.EGG_SERVER_ENV = 'prod';
process.env.NODE_ENV = 'production';
process.env.NODE_LOG_DIR = '/tmp';
process.env.EGG_APP_CONFIG = '{"rundir":"/tmp","logger":{"dir":"/tmp"}}';

const { Application } = require('egg');

// 如果通过层部署 node_modules 就需要修改 eggPath
Object.defineProperty(Application.prototype, Symbol.for('egg#eggPath'), {
value: '/opt',
});

const app = new Application({
mode: 'single',
env: 'prod',
});

app.listen(9000, '0.0.0.0', () => {
console.log('Server start on http://0.0.0.0:9000');
});

nextjs
#!/var/lang/node12/bin/node

/*
# HTTP 直通函数由于是基于 docker 镜像运行,所以必须监听地址为 0.0.0.0,并且端口为 9000
*/
const { nextStart } = require('next/dist/cli/next-start');
nextStart(['--port', '9000', '--hostname', '0.0.0.0']);

nuxtjs

#!/var/lang/node12/bin/node

/*
# HTTP 直通函数由于是基于 docker 镜像运行,所以必须监听地址为 0.0.0.0,并且端口为 9000
*/
require('@nuxt/cli')
.run(['start', '--port', '9000', '--hostname', '0.0.0.0'])
.catch((error) => {
require('consola').fatal(error);
require('exit')(2);
});

nestjs
#!/bin/bash

# SERVERLESS=1 /var/lang/node12/bin/npm run start -- -e /var/lang/node12/bin/node
SERVERLESS=1 /var/lang/node12/bin/node ./dist/main.js
flask
#!/bin/bash

# HTTP 直通函数由于是基于 docker 镜像运行,所以必须监听地址为 0.0.0.0,并且端口为 9000
/var/lang/python3/bin/python3 app.py
django
#!/bin/bash

# HTTP 直通函数由于是基于 docker 镜像运行,所以必须监听地址为 0.0.0.0,并且端口为 9000
/var/lang/python3/bin/python3 manage.py runserver 0.0.0.0:9000

laravel
#!/bin/bash

#######################################
# 注入 serverless 环境下的环境变量
#######################################
# 注入 SERVERLESS 标识
export SERVERLESS=1
# 修改模板编译缓存路径,云函数只有 /tmp 目录可读写
export VIEW_COMPILED_PATH=/tmp/storage/framework/views
# 修改 session 以内存方式(数组类型)存储
export SESSION_DRIVER=array
# 日志输出到 stderr
export LOG_CHANNEL=stderr
# 修改应用存储路径
export APP_STORAGE=/tmp/storage

# 初始化模板缓存目录
mkdir -p /tmp/storage/framework/views

# HTTP 直通函数由于是基于 docker 镜像运行,所以必须监听地址为 0.0.0.0,并且端口为 9000
# 云端可执行文件路径 /var/lang/php7/bin/php
/var/lang/php7/bin/php artisan serve --host 0.0.0.0 --port 9000



帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈