tencent cloud

文档反馈

通过命令行完成框架部署

最后更新时间: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
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持