compute-nest-best-practice/opensource/stablediffusion/cluster.yaml (811 lines of code) (raw):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建VPC、VSwitch、ECS实例部署Nginx,配置RDS(可选)、SLB、NAS和ESS,实现高可用Web服务部署。
en: Create VPC, VSwitch, and ECS instances to deploy Nginx, and configure RDS (optional), SLB, NAS, and ESS to implement high-availability web service deployment.
# 参数配置
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
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Label:
en: VSwitch Availability Zone
zh-cn: 交换机可用区
# 新建ack所在的vpc的网段
VpcCidrBlock:
Type: String
Label:
en: VPC CIDR IPv4 Block
zh-cn: 专有网络IPv4网段
Description:
zh-cn: VPC的ip地址段范围,<br>您可以使用以下的ip地址段或其子网:<br><font color='green'>[10.0.0.0/8]</font><br><font color='green'>[172.16.0.0/12]</font><br><font color='green'>[192.168.0.0/16]</font>
en: 'The ip address range of the VPC in the CidrBlock form; <br>You can use the following ip address ranges and their subnets: <br><font color=''green''>[10.0.0.0/8]</font><br><font color=''green''>[172.16.0.0/12]</font><br><font color=''green''>[192.168.0.0/16]</font>'
Default: 192.168.0.0/16
AssociationProperty: ALIYUN::VPC::VPC::CidrBlock
# 新建ack所在的交换机的网段
VSwitchCidrBlock:
Type: String
Label:
en: VSwitch CIDR Block
zh-cn: 交换机子网网段
Description:
zh-cn: 必须属于VPC的子网段。
en: Must belong to the subnet segment of VPC.
Default: 192.168.1.0/24
AssociationProperty: ALIYUN::VPC::VSwitch::CidrBlock
AssociationPropertyMetadata:
VpcCidrBlock: VpcCidrBlock
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
AllowedValues:
- ecs.gn7e-c16g1.4xlarge
- ecs.gn7e-c16g1.16xlarge
- ecs.gn7e-c16g1.32xlarge
- ecs.gn7i-c8g1.2xlarge
- ecs.gn7i-c16g1.4xlarge
- ecs.gn7i-c32g1.8xlarge
- ecs.gn6v-c8g1.2xlarge
- ecs.gn6v-c8g1.8xlarge
- ecs.gn6v-c8g1.16xlarge
- ecs.gn6v-c10g1.20xlarge
- ecs.gn6i-c4g1.xlarge
- ecs.gn6i-c8g1.2xlarge
- ecs.gn6i-c16g1.4xlarge
- ecs.gn6i-c24g1.6xlarge
- ecs.gn6i-c40g1.10xlarge
- ecs.gn6i-c24g1.12xlarge
- ecs.gn6i-c24g1.24xlarge
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
InstanceCount:
Type: Number
Label:
en: Instance Count
zh-cn: 实例数量
Default: 1
MinValue: 1
MaxValue: 100
EnableRdsStoragePlugin:
Label:
en: Enable RDS Storage Plugin
zh-cn: 开启RDS插件
Description:
en: Suggest open RDS storge plugin to store images and prompt
zh-cn: 建议开启RDS存储插件以保留图片和prompt
Default: true
Type: Boolean
DBInstanceClass:
Label:
zh-cn: 实例规格
en: DB Instance Class
AssociationProperty: ALIYUN::RDS::Instance::InstanceType
AssociationPropertyMetadata:
Engine: MySQL
EngineVersion: 5.7
Category: Basic
Visible:
Condition:
Fn::Equals:
- ${EnableRdsStoragePlugin}
- true
Default: 'mysql.n2.medium.1'
AllowedValues:
- mysql.n2.medium.1
- mysql.n4.medium.1
- mysql.n2.large.1
Type: String
Description:
zh-cn: 根据数据库引擎的类型和可用的区域支持选择实例规格;<br><font color='red'>RDS新客首购2核4G-20GB首月只需8.8元/月</font>
en: 'Select the instance specification based on the type of database engine and the available area support;<br>see detail: <a href=''https://www.alibabacloud.com/help/doc-detail/26312.html'' target=''_blank''><b><font color=''blue''>Instance specification sheet</font></b></a>'
DBInstanceStorage:
Label:
zh-cn: 实例存储
en: Storage
Type: Number
Description:
zh-cn: RDS实例大小范围为20-2000,每5个增量,单位为GB
en: The size range of RDS instances is 20 - 2000, Incrementing in every 5, unit GB
MinValue: 20
MaxValue: 2000
ConstraintDescription:
zh-cn: RDS实例大小范围为20-2000,每5个增量,单位为GB
en: The size range of RDS instances is 20 - 2000, Incrementing in every 5, unit GB
Default: 20
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- ${EnableRdsStoragePlugin}
- true
DBMasterUsername:
Type: String
Description:
en: Primary account name of the database instance.The length cannot exceed 16 characters. Start with an English letter and can contain English letters, numbers and underscores (_).
zh-cn: 数据库实例的主账号名称。长度不超过16个字符。以英文字母开头,可包含英文字母、数字和下划线(_)。
ConstraintDescription:
en: The length cannot exceed 16 characters. Start with an English letter and can contain English letters, numbers and underscores (_)
zh-cn: 长度不超过16个字符。以英文字母开头,可包含英文字母、数字和下划线(_)
Label:
zh-cn: 数据库账号名称
en: DB Username
Default: rdsuser
AllowedPattern: '^[a-zA-Z0-9\_]*$'
MaxLength: 16
MinLength: 2
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- ${EnableRdsStoragePlugin}
- true
DBMasterPassword:
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,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
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,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
MinLength: 8
MaxLength: 30
Default: pleaseChangeThis
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- ${EnableRdsStoragePlugin}
- true
LoadBalancerSpec:
Type: String
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
Label:
en: LoadBalancer Specifications
zh-cn: 负载均衡实例规格
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
LoadBalancerPersistenceTimeout:
Type: Number
Label:
en: Persistence Timeout
zh-cn: 会话保持超时时间
Description:
en: Persistence Timeout 0 means close persistence
zh-cn: 用户web使用建议开启会话保持(配置600-3600),API调用建议关闭会话保持(配置成0)
Default: 600
MinValue: 0
MaxValue: 3600
UserName:
Type: String
Label:
en: User Name
zh-cn: 软件登录名
Default: admin
Password:
NoEcho: true
Type: String
Description:
en: Software login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
zh-cn: 软件登录密码
AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
Label:
en: Software Login 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
Conditions:
UseRDSPlugin:
Fn::Equals:
- Ref: EnableRdsStoragePlugin
- true
Resources:
# 新建vpc
EcsVpc:
Type: ALIYUN::ECS::VPC
Properties:
VpcName:
Ref: ALIYUN::StackName
CidrBlock:
Ref: VpcCidrBlock
# 新建vswitch
EcsVSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: EcsVpc
ZoneId:
Ref: ZoneId
CidrBlock:
Ref: VSwitchCidrBlock
# 创建Nat网关
VpcNatGateway:
Type: ALIYUN::VPC::NatGateway
Properties:
NatGatewayName:
Ref: ALIYUN::StackName
VSwitchId:
Fn::GetAtt:
- EcsVSwitch
- VSwitchId
VpcId:
Fn::GetAtt:
- EcsVpc
- VpcId
# 创建EIP
NatGatewayEip:
Type: ALIYUN::VPC::EIP
Properties:
# 名称
Name:
Fn::Join:
- '-'
- - nat
- Ref: ALIYUN::StackName
# 请根据需求配置带宽
Bandwidth: 100
# 绑定EIP和Nat网关
NatGatewayEipAssociation:
Type: ALIYUN::VPC::EIPAssociation
Properties:
AllocationId:
Fn::GetAtt:
- NatGatewayEip
- AllocationId
InstanceId:
Fn::GetAtt:
- VpcNatGateway
- NatGatewayId
# 配置NAT网关中的源地址转换表
SNatEntry:
DependsOn: NatGatewayEipAssociation
Type: ALIYUN::ECS::SNatEntry
Properties:
SNatIp:
Fn::GetAtt:
- NatGatewayEip
- EipAddress
SNatTableId:
Fn::GetAtt:
- VpcNatGateway
- SNatTableId
SourceCIDR:
Ref: VSwitchCidrBlock
AccessGroup:
Type: ALIYUN::NAS::AccessGroup
Properties:
AccessGroupName:
Ref: ALIYUN::StackName
AccessGroupType: Vpc
# 创建权限组规则
AccessRule:
DependsOn: AccessGroup
Type: ALIYUN::NAS::AccessRule
Properties:
AccessGroupName:
Fn::GetAtt:
- AccessGroup
- AccessGroupName
# 优先级
Priority: 1
# 读写权限类型
RWAccessType: RDWR
# 地址
SourceCidrIp: 0.0.0.0/0
# 用户权限类型
UserAccessType: no_squash
# 创建文件系统
FileSystem:
Type: ALIYUN::NAS::FileSystem
Properties:
# 协议类型
ProtocolType: NFS
# 存储类型
StorageType: Capacity
ZoneId:
Ref: ZoneId
VSwitchId:
Ref: EcsVSwitch
VpcId:
Ref: EcsVpc
# 创建挂载点
MountTarget:
DependsOn:
- FileSystem
- AccessRule
Type: ALIYUN::NAS::MountTarget
Properties:
# 权限组名称
AccessGroupName:
Fn::GetAtt:
- AccessGroup
- AccessGroupName
# 文件系统ID
FileSystemId:
Fn::GetAtt:
- FileSystem
- FileSystemId
# 网络类型
NetworkType: Vpc
VSwitchId:
Ref: EcsVSwitch
VpcId:
Ref: EcsVpc
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: EcsVpc
# 安全组出端口
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: internet
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
# 定义waitCondition和waitConditionHandle来等待跳板机命令执行完毕部署成功
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count:
Ref: InstanceCount
Handle:
Ref: WaitConditionHandle
Timeout: 2400
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
Database:
Condition: UseRDSPlugin
Type: ALIYUN::RDS::DBInstance
Properties:
ZoneId:
Ref: ZoneId
VpcId:
Ref: EcsVpc
VSwitchId:
Ref: EcsVSwitch
Engine: MySQL
EngineVersion: '5.7'
DBInstanceClass:
Ref: DBInstanceClass
DBInstanceStorage:
Ref: DBInstanceStorage
DBInstanceStorageType: cloud_essd
Category: Basic
DBInstanceNetType: Intranet
MasterUserType: Super
MasterUserPassword:
Ref: DBMasterPassword
MasterUsername:
Ref: DBMasterUsername
PayType:
Ref: PayType
PeriodType:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
SecurityIPList:
Ref: VSwitchCidrBlock
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
# 实例名
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
IoOptimized: optimized
# 付费类型
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
# 网络配置
VpcId:
Ref: EcsVpc
ZoneId:
Ref: ZoneId
VSwitchId:
Ref: EcsVSwitch
SecurityGroupId:
Ref: EcsSecurityGroup
# 磁盘类型和大小
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
MaxAmount:
Ref: InstanceCount
# 镜像
ImageId: centos_7
# 实例类型
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
# 公网开启
AllocatePublicIP: false
UserData:
Fn::Sub:
# 将master的ip输入到/root/conf.txt
# 可以在后续的步骤中通过conf.txt里的内容完成slave的初始化
- |
#!/bin/bash
#挂载nas
yum install nfs-utils -y
if (lsmod | grep sunrpc); then
(modinfo sunrpc | grep tcp_max_slot_table_entries) && sysctl -w sunrpc.tcp_max_slot_table_entries=128
(modinfo sunrpc | grep tcp_slot_table_entries) && sysctl -w sunrpc.tcp_slot_table_entries=128
fi
(modinfo sunrpc | grep tcp_max_slot_table_entries) && echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
(modinfo sunrpc | grep tcp_slot_table_entries) && echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
sudo mount -t nfs -o vers=4,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport ${MountTargetDomain}:/ /mnt
test -e /mnt/stable-diffusion-webui || ( mv /home/stable-diffusion-webui /mnt/ && touch /mnt/mount_finish)
for ((i=0;i<2400;i++))
do
test -e /mnt/mount_finish
if [ "$?" == 0 ]
then
break
fi
sleep 1
done
ls -lrt
rm -rf /home/stable-diffusion-webui && ln -s /mnt/stable-diffusion-webui /home/stable-diffusion-webui
docker stop `docker ps |grep aigc|awk -F' ' '{print $1}'`
echo "docker run -d --gpus all -p8081:7860 -v /home/models:/workspace/stable-diffusion-webui/models -v /home/extensions:/workspace/stable-diffusion-webui/extensions -v /home/embeddings:/workspace/stable-diffusion-webui/embeddings -v /home/aesthetic_embeddings:/workspace/stable-diffusion-webui/aesthetic_embeddings -e DB_HOST=${DBConnectString} -e DB_USER=${DBMasterUsername} -e DB_PASSWORD='${DBMasterPassword}' -e DB_PORT=3306 registry.cn-shanghai.aliyuncs.com/tcc_public/aigc:stable-diffusion-v9 sh -c '/opt/conda/bin/python /opt/conda/bin/conda run --no-capture-output -n stabel python3 launch.py --listen --api --enable-insecure-extension-access' "> /etc/init.d/start_sd_docker.sh
/etc/init.d/start_sd_docker.sh
for ((i=0;i<100;i++))
do
curl 127.0.0.1:8081
if [ "$?" == 0 ]
then
break
fi
sleep 1
done
htpasswd -bc /etc/nginx/password ${UserName} '${Password}'
systemctl start nginx
systemctl status nginx
systemctl enable nginx
# 执行成功回调WaitCondition结束waitCondition的等待
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
- DBMasterUsername:
Ref: DBMasterUsername
# 从用户输入中拿到用户名和密码
DBMasterPassword:
Ref: DBMasterPassword
# 从Database的Output中拿到内网连接串
DBConnectString:
Fn::If:
- UseRDSPlugin
- Fn::GetAtt:
- Database
- InnerConnectionString
- ''
UserName:
Ref: UserName
Password:
Ref: Password
RegionId:
Ref: ALIYUN::Region
MountTargetDomain:
Fn::GetAtt:
- MountTarget
- MountTargetDomain
# 获取到waitConditionHandle的地址放到 ${CurlCli}变量里
CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
Slb:
Type: ALIYUN::SLB::LoadBalancer
Properties:
VpcId:
Ref: EcsVpc
VSwitchId:
Ref: EcsVSwitch
LoadBalancerName:
Fn::Join:
- '-'
- - 'slb'
- Ref: ALIYUN::StackName
PayType:
Ref: PayType
PricingCycle:
Ref: PayPeriodUnit
Duration:
Ref: PayPeriod
AddressType: intranet
LoadBalancerSpec:
Ref: LoadBalancerSpec
AutoPay: true
EipSlbAddress:
Type: ALIYUN::VPC::EIP
Properties:
Name:
Fn::Join:
- '-'
- - 'slb'
- Ref: ALIYUN::StackName
InternetChargeType: PayByTraffic
Bandwidth: 100
EipSlbAddressAssociation:
Type: ALIYUN::VPC::EIPAssociation
Properties:
InstanceId:
Ref: Slb
AllocationId:
Ref: EipSlbAddress
SlbBackendServerAttachment:
DependsOn:
- EcsInstanceGroup
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServerList:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
LoadBalancerId:
Ref: Slb
BackendServerWeightList:
- 100
SlbListener:
DependsOn:
- Slb
Type: ALIYUN::SLB::Listener
Properties:
Persistence:
CookieTimeout: 60
StickySession: 'on'
PersistenceTimeout:
Ref: LoadBalancerPersistenceTimeout
XForwardedFor: 'off'
StickySessionType: insert
ListenerPort: 8080
Bandwidth: -1
HealthCheck:
HttpCode: http_2xx,http_3xx,http_4xx,http_5xx
HealthCheckType: tcp
UnhealthyThreshold: 3
Timeout: 5
HealthyThreshold: 3
Port: 8080
URI: /
Interval: 2
LoadBalancerId:
Ref: Slb
BackendServerPort: 8080
Protocol: tcp
EssInstanceScalingGroupEnable:
Type: 'ALIYUN::ESS::ScalingGroupEnable'
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EcsInstanceScalingConfiguration
InstanceIds:
'Fn::GetAtt':
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroup
DependsOn:
- EcsInstanceScalingConfiguration
- EssInstanceScalingGroup
EcsInstanceScalingConfiguration:
Type: 'ALIYUN::ESS::ScalingConfiguration'
Properties:
# 网络配置
SecurityGroupId:
Ref: EcsSecurityGroup
# 伸缩组
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Join:
- '-'
- - 'sc'
- Ref: ALIYUN::StackName
# 实例类型
InstanceType:
Ref: EcsInstanceType
# SLB
LoadBalancerWeight: 100
# 磁盘配置
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
ImageId: centos_7
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
UserData:
Fn::Sub:
# 将master的ip输入到/root/conf.txt
# 可以在后续的步骤中通过conf.txt里的内容完成slave的初始化
- |
#!/bin/bash
#挂载nas
yum install nfs-utils -y
if (lsmod | grep sunrpc); then
(modinfo sunrpc | grep tcp_max_slot_table_entries) && sysctl -w sunrpc.tcp_max_slot_table_entries=128
(modinfo sunrpc | grep tcp_slot_table_entries) && sysctl -w sunrpc.tcp_slot_table_entries=128
fi
(modinfo sunrpc | grep tcp_max_slot_table_entries) && echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
(modinfo sunrpc | grep tcp_slot_table_entries) && echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
sudo mount -t nfs -o vers=4,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport ${MountTargetDomain}:/ /mnt
test -e /mnt/stable-diffusion-webui || mv /home/stable-diffusion-webui /mnt/
rm -rf /home/stable-diffusion-webui && ln -s /mnt/stable-diffusion-webui /home/stable-diffusion-webui
docker stop `docker ps |grep aigc|awk -F' ' '{print $1}'`
echo "docker run -d --gpus all -p8081:7860 -v /home/models:/workspace/stable-diffusion-webui/models -v /home/extensions:/workspace/stable-diffusion-webui/extensions -v /home/embeddings:/workspace/stable-diffusion-webui/embeddings -v /home/aesthetic_embeddings:/workspace/stable-diffusion-webui/aesthetic_embeddings -e DB_HOST=${DBConnectString} -e DB_USER=${DBMasterUsername} -e DB_PASSWORD='${DBMasterPassword}' -e DB_PORT=3306 registry.cn-shanghai.aliyuncs.com/tcc_public/aigc:stable-diffusion-v9 sh -c '/opt/conda/bin/python /opt/conda/bin/conda run --no-capture-output -n stabel python3 launch.py --listen --api --enable-insecure-extension-access' "> /etc/init.d/start_sd_docker.sh
/etc/init.d/start_sd_docker.sh
for ((i=0;i<100;i++))
do
curl 127.0.0.1:8081
if [ "$?" == 0 ]
then
break
fi
sleep 1
done
ARGUS_VERSION=3.5.7 /bin/bash -c "$(curl -s https://cms-agent-${RegionId}.oss-${RegionId}-internal.aliyuncs.com/Argus/agent_install_ecs-1.7.sh)" >> /root/install_cms_agent.log
htpasswd -bc /etc/nginx/password ${UserName} '${Password}'
systemctl start nginx
systemctl status nginx
systemctl enable nginx
# 执行成功回调WaitCondition结束waitCondition的等待
- DBMasterUsername:
Ref: DBMasterUsername
# 从用户输入中拿到用户名和密码
DBMasterPassword:
Ref: DBMasterPassword
# 从Database的Output中拿到内网连接串
DBConnectString:
Fn::If:
- UseRDSPlugin
- Fn::GetAtt:
- Database
- InnerConnectionString
- ''
RegionId:
Ref: ALIYUN::Region
UserName:
Ref: UserName
Password:
Ref: Password
MountTargetDomain:
Fn::GetAtt:
- MountTarget
- MountTargetDomain
EssInstanceScalingGroup:
Type: 'ALIYUN::ESS::ScalingGroup'
Properties:
ScalingGroupName:
Fn::Join:
- '-'
- - 'scg'
- Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize:
Ref: InstanceCount
MaxSize: 1000
VSwitchId:
Ref: EcsVSwitch
DefaultCooldown: 300
LoadBalancerIds:
- Ref: Slb
HealthCheckType: NONE
DependsOn:
- Slb
- SlbListener
# 定义输出
Outputs:
# 将公网ip做为http返回的地址显示在控制台
Endpoint:
Description:
zh-cn: 对外暴露的公网IP地址
en: Public IP Addresses
Value:
Fn::Sub:
- http://${ServerAddress}:8080
- ServerAddress:
Fn::GetAtt:
- EipSlbAddress
- EipAddress
Metadata:
ALIYUN::ROS::Interface:
TemplateTags:
- 'acs:integrate:计算巢:StableDiffusion'
# 分组信息
ParameterGroups:
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型配置
- Parameters:
- EcsInstanceType
- InstancePassword
- InstanceCount
Label:
default:
en: Instance
zh-cn: ECS实例配置
- Parameters:
- LoadBalancerSpec
- LoadBalancerPersistenceTimeout
Label:
default:
en: SLB Configure
zh-cn: 负载均衡配置
- Parameters:
- UserName
- Password
Label:
default:
en: Login Information
zh-cn: 登录信息
- Parameters:
- EnableRdsStoragePlugin
- DBInstanceClass
- DBInstanceStorage
- DBInstanceStorageType
- DBMasterUsername
- DBMasterPassword
Label:
default:
en: Database
zh-cn: RDS插件配置
- Parameters:
- ZoneId
Label:
default:
zh-cn: 可用区配置
en: Zone Configuration
- Parameters:
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 选择网络配置
en: Choose existing Infrastructure Configuration