快速部署
您可以单击一键运行进入Terraform Explorer查看并执行Terraform代码,从而实现自动化地在ECS实例中部署宝塔面板。
部署指引
本文档提供以下2种快速部署宝塔面板的方案,您可以根据操作系统按需选择。
方案一:通过ROS快速部署宝塔面板
步骤一:部署宝塔面板
单击一键部署,根据界面提示配置参数后,单击立即部署。
关键参数说明如下:
ROS会自动部署中,当进度为100%时,表示部署宝塔面板成功。
说明 您可以单击资源栈名称,在ROS控制台查看创建的ECS实例、VPC、安全组等资源信息。具体操作,请参见查看资源栈。
 
单击查看输出页签,查看并记录宝塔面板登录信息。
输出关键字说明如下:
EcsLoginAddress:ECS实例远程连接地址。
Console@PRIVATE_URL:宝塔面板私网登录地址。
Console@PASSWORD:宝塔面板登录密码。
Console@USERNAME:宝塔面板用户名。
Console@PublicURL:宝塔面板公网登录地址。

步骤二:登录宝塔Linux面板
在具有公网访问能力的Windows主机的浏览器中,输入宝塔面板公网地址。
本示例宝塔面板公网地址为https://47.105.XX.XX:8888/cad432be,请以在查看输出页签中显示为准。如果无法访问宝塔面板,请参见以下文档排查:
说明 首次使用浏览器访问宝塔面板外网面板地址时,会出现“您的连接不是私密连接”类似的提示,单击高级,然后单击继续前往47.105.XX.XX(不安全),访问即可。具体操作,请参见宝塔官方文档说明。
 
输入用户名和密码,根据界面提示登录宝塔Linux面板。

选中我已阅读并同意《用户协议》,单击进入面板。
完成宝塔账号绑定后,在弹出的推荐安装套件对话框中,您可以按需安装软件。
关于宝塔面板的具体使用,请参见宝塔面板官网文档。

方案二:通过云市场镜像部署宝塔面板
步骤一:使用宝塔面板镜像创建ECS实例
登录ECS管理控制台。
在左侧导航栏,选择。
在页面左侧顶部,选择目标资源所在的资源组和地域。
 
在实例列表页,单击创建实例。
在自定义购买页面的镜像区域,选择。
在搜索框中输入宝塔,并单击搜索,选择镜像后,单击使用。
您可以单击搜索结果中的镜像标题,进入云市场镜像售卖页,获取镜像的配置信息。本示例中使用的宝塔Linux面板(Alibaba Cloud Linux 3/LAMP/LNMP/Tomcat/Node.js/)镜像如下。
说明 如果您对操作系统及其版本有要求,可以选择对应操作系统的云市场镜像。
选择云市场镜像,您需要关注镜像的费用问题,如果镜像显示¥0/时,表示镜像不收取费用。
您可以单击镜像名称,进入镜像页面,可以查看镜像的详情及其使用指南等信息。
 
在自定义购买页面,按照界面提示配置其他参数,并完成购买操作。
请注意以下参数,更多参数说明,请参见自定义购买实例。
步骤二:登录宝塔面板
获取宝塔面板登录信息。
远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
执行以下命令,获取宝塔面板内、外网面板地址及其用户名和密码信息。
bt default
回显信息类似如下所示。

在ECS实例的安全组的入方向放行宝塔面板8888端口。具体操作,请参见添加安全组规则。
本示例宝塔面板端口为8888,具体以1中实际获取为准。基于服务器数据安全考虑,除创建服务器默认放行的端口外,本示例仅放行必要的端口。

在具有公网访问能力的Windows主机的浏览器中,输入宝塔外网面板地址http://<ECS实例公网IP>:8888/login。
如果无法访问宝塔面板,请参见以下文档排查:
输入用户名和密码,根据界面提示登录宝塔Linux面板。

选中我已阅读并同意《用户协议》,单击进入面板。
完成宝塔账号绑定后,在弹出的推荐安装套件对话框中,您可以按需安装软件。
关于宝塔面板的具体使用,请参见宝塔面板官网文档。

方案三:通过Terraform快速部署宝塔面板
步骤一:部署宝塔面板
点击一键运行进入Terraform Explorer,自动加载如下的Terraform代码。
Terraform代码
//实例名称
variable "name" {
  default = "terraform-example"
}
// 实例规格
variable "instance_type" {
  default = "ecs.e-c1m2.xlarge"
}
//实例登录密码
variable "instance_password" {
  default = "Test@12345"
}
// 地域
variable "region" {
  default = "cn-beijing"
}
provider "alicloud" {
  region = var.region
}
variable "create_instance" {
  default = true
}
//实例ID
variable "instance_id" {
  default = ""
}
// 镜像ID
variable "image_id" {
  default = "debian_12_8_x64_20G_alibase_20241216.vhd"
}
// 创建VPC
resource "alicloud_vpc" "vpc" {
  count      = var.create_instance ? 1 : 0
  cidr_block = "192.168.0.0/16"
}
// 创建交换机
resource "alicloud_vswitch" "vswitch" {
  count        = var.create_instance ? 1 : 0
  vpc_id       = alicloud_vpc.vpc[0].id
  cidr_block   = "192.168.0.0/16"
  zone_id      = data.alicloud_zones.default.zones.0.id
  vswitch_name = var.name
}
//创建安全组
resource "alicloud_security_group" "group" {
  count               = var.create_instance ? 1 : 0
  security_group_name = var.name
  description         = "foo"
  vpc_id              = alicloud_vpc.vpc[0].id
}
//创建安全组规则(此处仅作示例参考,请您按照自身安全策略设置)
resource "alicloud_security_group_rule" "allow_all_tcp" {
  count             = var.create_instance ? 1 : 0
  type              = "ingress"                           # 规则类型:入站
  ip_protocol       = "tcp"                               # 协议类型:TCP
  policy            = "accept"                            # 策略:接受
  port_range        = "22/22"                             # 端口范围:仅22端口
  priority          = 1                                   # 优先级:1
  security_group_id = alicloud_security_group.group[0].id # 关联到之前创建的安全组
  cidr_ip           = "0.0.0.0/0"                         # 允许所有IP地址访问
}
resource "alicloud_security_group_rule" "allow_tcp_80" {
  count             = var.create_instance ? 1 : 0
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "80/80"
  priority          = 1
  security_group_id = alicloud_security_group.group[0].id
  cidr_ip           = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_tcp_443" {
  count             = var.create_instance ? 1 : 0
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "443/443"
  priority          = 1
  security_group_id = alicloud_security_group.group[0].id
  cidr_ip           = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_icmp_all" {
  count             = var.create_instance ? 1 : 0
  type              = "ingress"
  ip_protocol       = "icmp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "-1/-1"
  priority          = 1
  security_group_id = alicloud_security_group.group[0].id
  cidr_ip           = "0.0.0.0/0"
}
data "alicloud_zones" "default" {
  available_disk_category     = "cloud_essd"
  available_resource_creation = "VSwitch"
  available_instance_type     = var.instance_type
}
//创建实例
resource "alicloud_instance" "instance" {
  count             = var.create_instance ? 1 : 0
  availability_zone = data.alicloud_zones.default.zones.0.id
  security_groups   = alicloud_security_group.group.*.id
  # series III
  instance_type              = var.instance_type
  system_disk_category       = "cloud_essd"
  system_disk_name           = var.name
  system_disk_description    = "test_foo_system_disk_description"
  image_id                   = var.image_id
  instance_name              = var.name
  vswitch_id                 = alicloud_vswitch.vswitch.0.id
  internet_max_bandwidth_out = 10
  password                   = var.instance_password
}
resource "alicloud_ecs_command" "install_content" {
  name            = "install_content"
  type            = "RunShellScript"
  command_content = base64encode(local.install_content)
  timeout         = 3600
  working_dir     = "/root"
  depends_on      = [alicloud_instance.instance]
}
resource "alicloud_ecs_invocation" "invocation_install" {
  instance_id = [local.instanceId]
  command_id  = alicloud_ecs_command.install_content.id
  timeouts {
    create = "15m"
  }
}
data "alicloud_instances" "default" {
  count = var.create_instance ? 0 : 1
  ids   = [var.instance_id]
}
locals {
  instanceId         = var.create_instance ? alicloud_instance.instance[0].id : var.instance_id
  instance_public_ip = var.create_instance ? element(alicloud_instance.instance.*.public_ip, 0) : lookup(data.alicloud_instances.default[0].instances.0, "public_ip")
  install_content    = <<SHELL
echo '#!/bin/bash
# 检测操作系统版本
if [ -f /etc/os-release ]; then
    source /etc/os-release || { echo "无法读取 /etc/os-release 文件"; exit 1; }
    if [ -z "$${ID:-}" ] || [ -z "$${VERSION_ID:-}" ]; then
        echo "/etc/os-release 文件格式不符合预期或缺少必要信息"
        exit 1
    fi
    OS=$ID
    VER=$VERSION_ID
    echo "操作系统: $OS 版本: $VER"
else
    echo "无法检测操作系统版本,/etc/os-release 文件不存在"
    exit 1
fi
if [[ $OS == "alinux" ]]; then
url="https://download.bt.cn/install/install_lts.sh"
if [ -f /usr/bin/curl ]; then
    curl -sSO "$url"
else
    wget -O install_lts.sh "$url"
fi
yes | bash install_lts.sh ed8484bec
elif [[ $OS == "centos" ]]; then
url="https://download.bt.cn/install/install_lts.sh"
if [ -f /usr/bin/curl ]; then
    curl -sSO "$url"
else
    wget -O install_lts.sh "$url"
fi
yes | bash install_lts.sh ed8484bec
elif [[ $OS == "ubuntu" ]]; then
wget -O install.sh https://download.bt.cn/install/install_lts.sh && yes | sudo bash install.sh ed8484bec
elif [[ $OS == "debian" ]]; then
wget -O install.sh https://download.bt.cn/install/install_lts.sh && yes | bash install.sh ed8484bec
else
    echo "不支持的操作系统"
    exit 1
fi
' > install.sh
chmod +x install.sh
timeout 300s ./install.sh
bt default > credentials.txt
SHELL
}
output "credentials_info" {
  value = "宝塔面板登录信息请您登录ECS实例后,查看用户主目录下的credentials.txt文件"
}
output "ecs_login_address" {
  value = "ECS远程连接地址:https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs®ionId=${var.region}&instanceId=${local.instanceId}"
}
根据实际情况修改参数,默认情况下,将会在cn-beijing创建1个VPC实例、1台操作系统为Debian的按量付费ECS实例。关于实例计费说明,请参见计费概述。
单击发起调试,预览待创建资源详细信息,若资源信息无误,单击预览并执行开始创建资源。当任务的执行详情状态为执行成功时,说明已部署完成。
步骤二:登录宝塔Linux面板
获取宝塔面板登录信息。
远程连接ECS实例。具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
执行以下命令,获取宝塔面板内、外网面板地址及其用户名和密码信息。
bt default
回显信息类似如下所示。

在ECS实例的安全组的入方向放行宝塔面板8888端口。具体操作,请参见添加安全组规则。
本示例宝塔面板端口为8888,具体以1中实际获取为准。基于服务器数据安全考虑,除创建服务器默认放行的端口外,本示例仅放行必要的端口。

在具有公网访问能力的Windows主机的浏览器中,输入宝塔外网面板地址http://<ECS实例公网IP>:8888/login。
如果无法访问宝塔面板,请参见以下文档排查:
输入用户名和密码,根据界面提示登录宝塔Linux面板。

选中我已阅读并同意《用户协议》,单击进入面板。
完成宝塔账号绑定后,在弹出的推荐安装套件对话框中,您可以按需安装软件。
关于宝塔面板的具体使用,请参见宝塔面板官网文档。
