Flowise是一个开源的低代码工具,供开发者构建定制化的 LLM 流程编排和 AI 代理。
资源编排服务(Resource Orchestration Service, ROS)是阿里云提供基于基础设施即代码(Infrastructure as Code, IaC) 理念的自动化部署服务,我们可以通过定义一个 JSON/YAML/Terraform
模板,轻松部署一套云上的 Flowise 环境。
部署步骤
- 登录ROS 控制台-Flowise 部署页面
- 配置模板参数:选择 ECS 实例的可用区、实例类型等
- 点击【下一步】,然后【创建】。部署完成后,点击资源栈的输出,即可看到 Flowise 服务的地址。点击链接即可体验 Flowise 的功能。
⚠️说明:
- 本示例使用 GitHub 站点进行克隆,可能会因网络问题导致克隆失败。如遇此问题,请重新部署,或手动登录到 ECS 实例中执行安装命令(见模板中
RunCommand
)。- Flowise 安装在
/opt/Flowise
下,日志文件为flowise.log
。
部署原理
我们可以看到通过 ROS 可以非常快捷地部署阿里云上的各种云资源(比如 VPC、VSwitch、ECS 实例等)和应用程序(比如 Flowise)。如果想了解是如何做到的,那么可以阅读此章节。
编写 ROS 模板。在如下模板中定义了:
Resources
:定义了 VPC、VSwitch、ECS 实例、安全组、安全组规则以及安装 Flowise 的命令。Parameters
:定义了常用的参数,比如可用区、ECS实例类型类型。Outputs
:定义了自定义输出,比如 Flowise 服务的地址。
ROSTemplateFormatVersion: '2015-09-01'
Description:en: Build the LLM orchestration flow & AI agents service Flowise on the ECS instance (Ubuntu 22.04).zh-cn: 在ECS实例(Ubuntu 22.04)上搭建LLM流程编排和AI代理服务Flowise。
Parameters:ZoneId:Type: StringLabel:en: Availability Zonezh-cn: 可用区IDAssociationProperty: ALIYUN::ECS::Instance:ZoneIdInstanceType:Type: StringLabel:en: Instance Typezh-cn: 实例类型AssociationProperty: ALIYUN::ECS::Instance::InstanceTypeAssociationPropertyMetadata:ZoneId: ${ZoneId}DefaultValueStrategy: recentSystemDiskCategory:Type: StringLabel:en: System Disk Typezh-cn: 系统盘类型AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategoryAssociationPropertyMetadata:LocaleKey: DiskCategoryZoneId: ${ZoneId}InstanceType: ${InstanceType}AutoSelectFirst: trueAutoChangeType: falseDefault: cloud_essdInstancePassword:Type: StringLabel:en: Instance Passwordzh-cn: 实例密码Description:en: Server login password, Length 8-30, must contain three(Capital letters,lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbolin).zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。ConstraintDescription:en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers,()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in).zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。AssociationPropertyMetadata:Visible:Condition:Fn::Equals:- ${SelectInstance}- falseDefault:AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'MinLength: 8MaxLength: 30NoEcho: true
Resources:Vpc:Type: ALIYUN::ECS::VPCProperties:CidrBlock: 192.168.0.0/16VSwitch:Type: ALIYUN::ECS::VSwitchProperties:ZoneId:Ref: ZoneIdVpcId:Ref: VpcCidrBlock: 192.168.0.0/24SecurityGroup:Type: ALIYUN::ECS::SecurityGroupProperties:VpcId:Ref: VpcSecurityGroupIngress_3000:Type: ALIYUN::ECS::SecurityGroupIngressProperties:SecurityGroupId:Ref: SecurityGroupSourceCidrIp: 0.0.0.0/0IpProtocol: tcpNicType: intranetPortRange: 3000/3000InstanceGroup:Type: ALIYUN::ECS::InstanceGroupProperties:VpcId:Ref: VpcVSwitchId:Ref: VSwitchSecurityGroupId:Ref: SecurityGroupImageId: ubuntu_22_04InstanceName: FlowiseInstanceType:Ref: InstanceTypeSystemDiskCategory:Ref: SystemDiskCategoryPassword:Ref: InstancePasswordIoOptimized: optimizedMaxAmount: 1DS_Instances:Type: DATASOURCE::ECS::InstancesProperties:InstanceIds:Fn::GetAtt:- InstanceGroup- InstanceIdsInstallFlowise:Type: ALIYUN::ECS::RunCommandProperties:InstanceIds:Fn::GetAtt:- InstanceGroup- InstanceIdsType: RunShellScriptSync: trueTimeout: 1800CommandContent: |#!/bin/bashecho "#########################"echo "# Install NodeJS"echo "#########################"curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashexport NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"nvm install 22npm config set registry https://registry.npmmirror.comnpm i -g pnpmecho "#########################"echo "# Install Flowise"echo "#########################"git clone --depth 1 https://gitclone.com/github.com/FlowiseAI/Flowise.git /opt/Flowise && cd /opt/Flowiseret_code=$?if [ $ret_code -ne 0 ]; thenecho "Git clone https://gitclone.com/github.com/FlowiseAI/Flowise.git failed. Exiting."exit $ret_codefipnpm installpnpm buildnohup pnpm start > flowise.log 2>&1 &
Outputs:FlowiseUrl:Description: Flowise default address.Value:Fn::Sub:- http://${IP}:3000- IP:Fn::Jq:- First- if .[0].PublicIpAddress != [] then .[0].PublicIpAddress[0] else .[0].EipAddress.IpAddressend- Fn::GetAtt:- DS_Instances- Instances
Metadata:ALIYUN::ROS::Interface:TemplateTags:- acs:example:AI:在ECS实例(Ubuntu 22.04)上搭建LLM流程编排和AI代理服务Flowise
在 ROS 控制台中使用此模板创建资源栈。ROS 会自动解析出模板中资源的依赖关系,按照资源依赖顺序创建云资源。如果资源间没有依赖,则会并发创建,从而提升部署效率。ROS 会把这次创建的所有资源存放到一个“资源栈”中,后续可以方便地管理这组资源集合。比如:
- 将新模板应用到这个“资源栈”中,从而更新里面的资源。
- 删除这个“资源栈”,从而把所有的资源删掉。
总结
基于 IaC 的理念,通过定义一个模板,使用 ROS 进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 Flowise 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。