diff --git a/.computenest/.computenest_parameters.yaml b/.computenest/.computenest_parameters.yaml new file mode 100644 index 00000000..3f7fbc14 --- /dev/null +++ b/.computenest/.computenest_parameters.yaml @@ -0,0 +1 @@ +{"ServicePort":"80","SecurityPorts":[80],"RepoName":"hanans426/one-api","Arch":"EcsSingle","RunCommand":"echo \"start run command\"\necho \"${AdminPassword}\"\n","SourceCodePath":".","CommandTimeout":3600,"ServiceType":"private","AllowedRegions":["cn-hangzhou","cn-shanghai","cn-beijing"],"ArtifactSourceType":"SourceCode","ImageId":"centos_7_9_x64_20G_alibase_20230613.vhd","RegionId":"cn-hangzhou","CustomParameters":[{"NoEcho":true,"Type":"String","AssociationProperty":"ALIYUN::ECS::Instance::Password","Label":"管理员密码","Name":"AdminPassword"}]} diff --git a/.computenest/README.md b/.computenest/README.md new file mode 100644 index 00000000..4ec8782f --- /dev/null +++ b/.computenest/README.md @@ -0,0 +1,21 @@ +# 代码仓库结构 + +## 文档目录说明: +``` +. +├── README.md - README +├── docs - 服务文档相关文件 +│ └── index.md +├── resources - 服务资源文件 +│ ├── icons +│ │ └── service_logo.png - 服务logo +│ └── artifact_resources - 部署物相关资源文件 +├── ros_templates - 服务ROS模板目录,支持多模板 +│ └── template.yaml - ROS模板,ROS模板引擎根据该模板会自动创建出所有的资源 +├── config.yaml - 服务配置文件,服务构建过程中会使用计算巢命令行工具computenest-cli,computenest-cli会基于该配置文件构建服务 +├── preset_parameters.yaml - (该文件只有托管版有)服务商预设参数,如VpcId,VSwitchId等,该ros模板内容会渲染为表单方便服务商填写 +``` + +## 其他 +关于ROS模板,请参见 [资源编排](https://help.aliyun.com/zh/ros)。 +关于computenest-cli请参见 [computenest-cli](https://pypi.org/project/computenest-cli/)。 \ No newline at end of file diff --git a/.computenest/config.yaml b/.computenest/config.yaml new file mode 100644 index 00000000..17b77f6b --- /dev/null +++ b/.computenest/config.yaml @@ -0,0 +1,28 @@ +Service: + RegionId: cn-hangzhou + DeployType: ros + DeployMetadata: + SupplierDeployMetadata: + FileArtifactRelation: + '{{ computenest::file::hanans426_one-api }}': + ArtifactId: ${Artifact.Artifact_1.ArtifactId} + ArtifactVersion: ${Artifact.Artifact_1.ArtifactVersion} + TemplateConfigs: + - Name: 单机版 + Url: 'ros_templates/template.yaml' + AllowedRegions: + - cn-hangzhou + - cn-shanghai + - cn-beijing + ServiceType: private + ServiceInfo: + Locale: zh-CN + ShortDescription: demo + Image: 'resources/icons/service_logo.png' +Artifact: + Artifact_1: + ArtifactType: File + ArtifactName: hanans426_one-api + ArtifactProperty: + RegionId: cn-hangzhou + Url: 'resources/artifact_resources/file/hanans426_one-api.tar.gz' \ No newline at end of file diff --git a/.computenest/docs/architecture_ecs_single.png b/.computenest/docs/architecture_ecs_single.png new file mode 100644 index 00000000..087d61ff Binary files /dev/null and b/.computenest/docs/architecture_ecs_single.png differ diff --git a/.computenest/docs/index_ecs_single.md b/.computenest/docs/index_ecs_single.md new file mode 100644 index 00000000..3f829f8d --- /dev/null +++ b/.computenest/docs/index_ecs_single.md @@ -0,0 +1,70 @@ +# 服务模板说明文档 + +## 服务说明 + +**简单描述服务的功能和用途。** +例如: +_(服务功能描述,如“WordPress 是一款免费开源的 CMS,适用于创建和管理各种类型的网站。”)_ + +_(服务快速上手链接或文档,如果有的话)_ + +## 服务架构 + +此服务模板构建出的服务的部署架构为单机ecs部署。 + + + +## 计费说明 +通过此服务模板构建服务不产生费用。 +用户部署构建出的服务时,资源费用主要涉及: +- 所选ECS实例规格 +- 磁盘容量 +- 公网带宽 + +计费方式包括: +- 按量付费(小时) +- 包年包月 + +预估费用在部署前可实时看到。 + +## RAM账号所需权限 + +此服务模板构建出的服务需要对ECS、VPC等资源进行访问和创建操作,若使用RAM用户创建服务实例,需要在创建服务实例前,对使用的RAM用户的账号添加相应资源的权限。添加RAM权限的详细操作,请参见[为RAM用户授权](https://help.aliyun.com/document_detail/121945.html)。所需权限如下表所示: + +| 权限策略名称 | 备注 | +|-------------------------------------|-------------------------------| +| AliyunECSFullAccess | 管理云服务器服务(ECS)的权限 | +| AliyunVPCFullAccess | 管理专有网络(VPC)的权限 | +| AliyunROSFullAccess | 管理资源编排服务(ROS)的权限 | +| AliyunComputeNestUserFullAccess | 管理计算巢服务(ComputeNest)的用户侧权限 | +| AliyunComputeNestSupplierFullAccess | 管理计算巢服务(ComputeNest)的服务商侧权限 | | + +## 服务实例计费说明 + +**详细说明服务实例的计费方式。** +_(描述费用构成,例如所选 vCPU 和内存规格,系统盘类型和容量等)_ + +_(列出计费方式,例如按量付费或包年包月)_ + +## 服务实例部署流程 + +### 部署参数说明 + +| 参数组 | 参数项 | 说明 | +|---------------------------------|--------|-------------------------------------------------------------------------| +| 服务实例 | 服务实例名称 | 长度不超过64个字符,必须以英文字母开头,可包含数字、英文字母、短划线(-)和下划线(_)。 | +| | 地域 | 服务实例部署的地域。 | +| | 付费类型 | 资源的计费类型:按量付费和包年包月。 | +| ECS实例配置 | 实例类型 | ECS实例规格配置。 | +| | 实例密码 | 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*-+=|{}[]:;'<>,.?/ 中的特殊符号)。 | +| 网络配置 | 可用区 | ECS实例所在可用区。 | + +### 部署步骤 + +**简述如何一步步部署服务实例。** + +1. _(步骤1描述和相关链接或图片,如果有的话)_ +2. _(步骤2描述和相关链接或图片,如果有的话)_ +... + +[部署链接](部署链接地址) \ No newline at end of file diff --git a/.computenest/resources/artifact_resources/file/hanans426_one-api.tar.gz b/.computenest/resources/artifact_resources/file/hanans426_one-api.tar.gz new file mode 100644 index 00000000..ac13201f Binary files /dev/null and b/.computenest/resources/artifact_resources/file/hanans426_one-api.tar.gz differ diff --git a/.computenest/resources/icons/service_logo.png b/.computenest/resources/icons/service_logo.png new file mode 100644 index 00000000..6c37525c Binary files /dev/null and b/.computenest/resources/icons/service_logo.png differ diff --git a/.computenest/ros_templates/template.yaml b/.computenest/ros_templates/template.yaml new file mode 100644 index 00000000..dfb5165a --- /dev/null +++ b/.computenest/ros_templates/template.yaml @@ -0,0 +1,218 @@ +ROSTemplateFormatVersion: '2015-09-01' +Description: + en: Source Code Service Ros Template + zh-cn: 源代码服务模板 +Parameters: + PayType: + Type: String + Label: + en: ECS Instance Charge Type + zh-cn: 付费类型 + Default: PostPaid + AllowedValues: + - PostPaid + - PrePaid + AssociationProperty: ChargeType + AssociationPropertyMetadata: + LocaleKey: InstanceChargeType + PayPeriodUnit: + Type: String + Label: + en: Pay Period Unit + zh-cn: 购买资源时长周期 + Default: Month + AllowedValues: + - Month + - Year + AssociationProperty: PayPeriodUnit + AssociationPropertyMetadata: + Visible: + Condition: + Fn::Not: + Fn::Equals: + - ${PayType} + - PostPaid + PayPeriod: + Type: Number + Label: + en: Period + zh-cn: 购买资源时长 + Default: 1 + AllowedValues: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + AssociationProperty: PayPeriod + AssociationPropertyMetadata: + Visible: + Condition: + Fn::Not: + Fn::Equals: + - ${PayType} + - PostPaid + EcsInstanceType: + Type: String + Label: + en: Instance Type + zh-cn: 实例类型 + AssociationProperty: ALIYUN::ECS::Instance::InstanceType + AssociationPropertyMetadata: + InstanceChargeType: ${PayType} + Constraints: + InstanceTypeFamily: + - ecs.u1 + - ecs.e + InstancePassword: + NoEcho: true + Type: String + Description: + en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in) + zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号) + AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$' + Label: + en: Instance Password + zh-cn: 实例密码 + ConstraintDescription: + en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in) + zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号) + MinLength: 8 + MaxLength: 30 + AssociationProperty: ALIYUN::ECS::Instance::Password + ZoneId: + Type: String + Label: + en: Zone ID + zh-cn: 可用区ID + AssociationProperty: ALIYUN::ECS::Instance::ZoneId + VpcId: + Type: String + Label: + en: VPC ID + zh-cn: 专有网络VPC实例ID + AssociationProperty: 'ALIYUN::ECS::VPC::VPCId' + VSwitchId: + Type: String + Label: + en: VSwitch ID + zh-cn: 交换机实例ID + Default: '' + AssociationProperty: 'ALIYUN::ECS::VSwitch::VSwitchId' + AssociationPropertyMetadata: + VpcId: VpcId + ZoneId: ZoneId + AdminPassword: + Type: String + AssociationProperty: ALIYUN::ECS::Instance::Password + Label: 管理员密码 + NoEcho: True +Resources: + SecurityGroup: + Type: ALIYUN::ECS::SecurityGroup + Properties: + SecurityGroupName: + Ref: ALIYUN::StackName + VpcId: + Ref: VpcId + SecurityGroupIngress: + - PortRange: 80/80 + Priority: 1 + SourceCidrIp: 0.0.0.0/0 + IpProtocol: tcp + NicType: internet + InstanceGroup: + Type: ALIYUN::ECS::InstanceGroup + Properties: + # 付费类型 + InstanceChargeType: + Ref: PayType + PeriodUnit: + Ref: PayPeriodUnit + Period: + Ref: PayPeriod + VpcId: + Ref: VpcId + VSwitchId: + Ref: VSwitchId + ZoneId: + Ref: ZoneId + SecurityGroupId: + Ref: SecurityGroup + ImageId: centos_7_9_x64_20G_alibase_20230613.vhd + Password: + Ref: InstancePassword + InstanceType: + Ref: EcsInstanceType + SystemDiskCategory: cloud_essd + SystemDiskSize: 200 + InternetMaxBandwidthOut: 5 + IoOptimized: optimized + MaxAmount: 1 + RunInstallCommand: + Type: ALIYUN::ECS::RunCommand + Properties: + InstanceIds: + Fn::GetAtt: + - InstanceGroup + - InstanceIds + Type: RunShellScript + Sync: true + Timeout: 3600 + CommandContent: + Fn::Sub: + - | + #!/bin/bash + # 源代码通过computenest-cli被打包为tar.gz包,并发布为部署物 + wget '{{ computenest::file::hanans426_one-api }}' -O hanans426_one-api.tar.gz > /var/log/download.log + tar -zxvf hanans426_one-api.tar.gz && cd "$(tar -tzf hanans426_one-api.tar.gz | head -1 | awk -F'/' '{print $1}')" + echo "start run command" + echo "${AdminPassword}" + + ARGUS_VERSION=3.5.7 /bin/bash -c "$(curl -sS https://cms-agent-${RegionId}.oss-${RegionId}-internal.aliyuncs.com/Argus/agent_install_ecs-1.7.sh)" >> /root/install_cms_agent.log 2>&1 + - RegionId: + Ref: ALIYUN::Region +Outputs: + ServerAddress: + Description: + en: ServerAddress. + zh-cn: 访问页面。 + Value: + Fn::Sub: + - 'http://${ServerAddress}:80' + - ServerAddress: + Fn::Select: + - 0 + - Fn::GetAtt: + - InstanceGroup + - PublicIps +Metadata: + ALIYUN::ROS::Interface: + ParameterGroups: + - Parameters: + - PayType + - PayPeriodUnit + - PayPeriod + Label: + default: 付费类型配置 + - Parameters: + - EcsInstanceType + - InstancePassword + Label: + default: 资源配置 + - Parameters: + - ZoneId + - VpcId + - VSwitchId + Label: + default: 可用区配置 + - Parameters: + - AdminPassword + Label: + en: Software Configuration + zh-cn: 软件配置 + \ No newline at end of file