跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    腾讯云 CVM 实践

    腾讯云云服务器(CVM)是腾讯云的核心计算服务。本文介绍在腾讯云 CVM 上使用 Enterprise Linux 发行版(OpenCloudOS、TencentOS Server、AlmaLinux)的完整实践,包括实例创建、安全组配置、COS 对象存储集成、腾讯云 CLI(tccli)使用及自定义镜像制作。

    腾讯云 CVM 提供多种 Enterprise Linux 镜像:

    镜像说明推荐场景
    OpenCloudOS 8/9腾讯主导的开源操作系统(8 用户态兼容 CentOS 8;9 为社区全自研)腾讯云深度用户、需要 TencentOS Kernel 的场景
    TencentOS Server 3/4腾讯云官方定制 Linux,基于 OpenCloudOS腾讯云原生工作负载
    AlmaLinux 8/9/10社区驱动的 EL 兼容发行版通用生产环境、多云部署
    CentOS Stream 9/10RHEL 上游滚动发行版开发测试
    CentOS 7(已 EOL)已于 2024 年 6 月停止维护不推荐新部署

    上表是概览:具体可选的镜像版本以控制台当前列表为准(10 系已随上游 GA,各区域上架时间可能不同;看不到就用「自定义镜像」导入)。

    1. 登录腾讯云 CVM 控制台,点击「新建」
    2. 在「镜像」步骤中选择「公共镜像」
    3. 操作系统选项卡中选择目标发行版
    4. TencentOS Server 位于「TencentOS」分类下,OpenCloudOS 位于「OpenCloudOS」分类下

    腾讯云安全组的功能与使用方式与其他云平台类似,是控制 CVM 实例网络访问的虚拟防火墙。

    典型的 Web 服务器安全组规则
    方向 协议 端口 来源 说明
    入站 TCP 22 你的办公 IP/32 SSH 登录
    入站 TCP 80 0.0.0.0/0 HTTP
    入站 TCP 443 0.0.0.0/0 HTTPS
    入站 ICMP 全部 0.0.0.0/0 Ping
    出站 全部 全部 0.0.0.0/0 允许所有出站
    • SSH 端口仅对办公 IP 或堡垒机开放
    • 数据库端口(3306、5432、6379 等)仅对应用服务器的内网 IP 开放
    • 使用安全组模板快速创建常见场景的规则集
    • 不同用途的 CVM 使用不同安全组(Web 安全组、数据库安全组等)
    • 安全组规则按优先级从上到下匹配,注意规则顺序
    创建安全组
    $ tccli vpc CreateSecurityGroup \
    --GroupName web-sg \
    --GroupDescription "Web 服务器安全组"
    添加入站规则(开放 80 端口)
    $ tccli vpc CreateSecurityGroupPolicies \
    --SecurityGroupId sg-xxxxxx \
    --SecurityGroupPolicySet '{"Ingress":[{"Protocol":"TCP","Port":"80","CidrBlock":"0.0.0.0/0","Action":"ACCEPT","PolicyDescription":"Allow HTTP"}]}'
    查看安全组规则
    $ tccli vpc DescribeSecurityGroupPolicies \
    --SecurityGroupId sg-xxxxxx

    腾讯云 CVM 同样使用 Cloud-Init 进行实例初始化。你可以在创建实例时传入自定义数据(User-Data)。

    在创建 CVM 实例的「高级设置」中,勾选「自定义数据」,在文本框中输入 cloud-config 或 shell 脚本。

    cloud-config:初始化应用服务器
    #cloud-config
    package_update: true
    package_upgrade: true
    packages:
    - nginx
    - firewalld
    - git
    - vim-enhanced
    users:
    - name: deploy
    groups: wheel
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    ssh_authorized_keys:
    - ssh-ed25519 AAAA... your-key-comment
    runcmd:
    - systemctl enable --now firewalld
    - firewall-cmd --permanent --add-service=http
    - firewall-cmd --permanent --add-service=https
    - firewall-cmd --reload
    - systemctl enable --now nginx

    除了 cloud-config YAML 格式,腾讯云也支持直接传入 Shell 脚本:

    Shell 脚本格式的 User-Data
    #!/bin/bash
    # 更新系统
    dnf update -y
    # 安装软件
    dnf install -y nginx firewalld
    # 配置防火墙
    systemctl enable --now firewalld
    firewall-cmd --permanent --add-service=http
    firewall-cmd --permanent --add-service=https
    firewall-cmd --reload
    # 启动 Nginx
    systemctl enable --now nginx

    腾讯云 CVM 实例通过以下地址访问元数据服务:

    查询实例元数据
    # 获取实例 ID
    $ curl http://metadata.tencentyun.com/latest/meta-data/instance-id
    # 获取实例所在地域
    $ curl http://metadata.tencentyun.com/latest/meta-data/placement/region
    # 获取可用区
    $ curl http://metadata.tencentyun.com/latest/meta-data/placement/zone
    # 获取实例私网 IP
    $ curl http://metadata.tencentyun.com/latest/meta-data/local-ipv4
    # 获取实例公网 IP
    $ curl http://metadata.tencentyun.com/latest/meta-data/public-ipv4
    # 获取实例规格
    $ curl http://metadata.tencentyun.com/latest/meta-data/instance/instance-type
    # 获取 User-Data
    $ curl http://metadata.tencentyun.com/latest/user-data

    腾讯云元数据服务地址为 metadata.tencentyun.com(解析到 169.254.0.23)。

    腾讯云 CLI 工具 tccli 用于在命令行管理腾讯云资源。

    通过 pip 安装 tccli
    $ sudo pip3 install tccli
    验证安装
    $ tccli --version
    交互式配置
    $ tccli configure

    按提示输入:

    • SecretId
    • SecretKey
    • Region(如 ap-guangzhou)
    • Output format(推荐 json)

    配置文件保存在 ~/.tccli/ 目录下。

    在 CVM 实例上,推荐绑定 CAM 角色代替使用 SecretKey:

    1. 在腾讯云 CAM 控制台创建角色,授予所需策略
    2. 在 CVM 控制台将角色绑定到实例
    3. tccli 会自动从实例元数据获取临时凭证
    查询 CVM 实例列表
    $ tccli cvm DescribeInstances
    查询特定地域的实例
    $ tccli cvm DescribeInstances --region ap-shanghai
    启动/停止/重启实例
    $ tccli cvm StartInstances --InstanceIds '["ins-xxxxxx"]'
    $ tccli cvm StopInstances --InstanceIds '["ins-xxxxxx"]'
    $ tccli cvm RebootInstances --InstanceIds '["ins-xxxxxx"]'
    查询实例详情并用 jq 提取信息
    $ tccli cvm DescribeInstances | \
    jq '.InstanceSet[] | {InstanceId, InstanceName, InstanceState, PublicIpAddresses}'
    启用 tccli 命令补全
    $ tccli configure autocomplete
    $ source ~/.bashrc

    腾讯云对象存储 COS(Cloud Object Storage)用于存储备份文件、静态资源、日志归档等。

    安装 coscli 命令行工具
    $ curl -fsSL https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64 -o /tmp/coscli
    $ sudo install /tmp/coscli /usr/local/bin/coscli
    验证安装
    $ coscli --version
    交互式配置
    $ coscli config init

    按提示输入 SecretId、SecretKey 和默认 Bucket 信息。配置文件保存在 ~/.cos.yaml。

    创建 Bucket
    $ coscli mb cos://my-backup-1250000000 --region ap-guangzhou
    上传文件
    # 上传单个文件
    $ coscli cp /backup/database.sql.gz cos://my-backup-1250000000/db-backups/
    # 递归上传目录
    $ coscli cp -r /var/www/static/ cos://my-backup-1250000000/static/
    下载文件
    $ coscli cp cos://my-backup-1250000000/db-backups/database.sql.gz /tmp/
    列出 Bucket 中的文件
    $ coscli ls cos://my-backup-1250000000/db-backups/
    同步目录到 COS
    $ coscli sync /var/log/nginx/ cos://my-backup-1250000000/nginx-logs/

    如果你更习惯 Python 生态工具:

    安装 coscmd
    $ sudo pip3 install coscmd
    配置 coscmd
    $ coscmd config -a SecretId -s SecretKey -b my-backup-1250000000 -r ap-guangzhou
    coscmd 常用操作
    # 上传文件
    $ coscmd upload /backup/database.sql.gz db-backups/
    # 下载文件
    $ coscmd download db-backups/database.sql.gz /tmp/
    # 列出文件
    $ coscmd list db-backups/
    创建数据库备份脚本
    sudo tee /usr/local/bin/backup-to-cos.sh << 'SCRIPT'
    #!/bin/bash
    DATE=$(date +%Y%m%d_%H%M%S)
    BACKUP_DIR="/tmp/backup"
    BUCKET="cos://my-backup-1250000000"
    mkdir -p "$BACKUP_DIR"
    # 备份 PostgreSQL
    sudo -u postgres pg_dumpall | gzip > "${BACKUP_DIR}/postgres_${DATE}.sql.gz"
    # 上传到 COS
    coscli cp "${BACKUP_DIR}/postgres_${DATE}.sql.gz" "${BUCKET}/db-backups/"
    # 清理本地临时文件
    rm -f "${BACKUP_DIR}/postgres_${DATE}.sql.gz"
    echo "Backup completed: postgres_${DATE}.sql.gz"
    SCRIPT
    sudo chmod +x /usr/local/bin/backup-to-cos.sh
    添加定时任务
    echo "0 2 * * * root /usr/local/bin/backup-to-cos.sh" | sudo tee /etc/cron.d/backup-to-cos

    建议在 COS Bucket 上配置生命周期规则,自动将过期对象沉降到低频存储或归档存储。

    创建镜像前,先清理实例中的敏感信息和临时数据:

    镜像创建前的清理工作
    # 清理 SSH 主机密钥
    $ sudo rm -f /etc/ssh/ssh_host_*
    # 清理 cloud-init 缓存
    $ sudo cloud-init clean --logs
    # 清理 DNF 缓存
    $ sudo dnf clean all
    # 清理日志
    $ sudo journalctl --vacuum-time=1d
    $ sudo rm -f /var/log/*.gz /var/log/*-????????
    # 清理 bash 历史
    $ history -c && history -w
    通过 CLI 创建自定义镜像
    $ tccli cvm CreateImage \
    --InstanceId ins-xxxxxx \
    --ImageName "webapp-alma9-v1" \
    --ImageDescription "AlmaLinux 9 + Nginx + PostgreSQL 基础镜像"

    腾讯云支持从 COS 导入 raw 或 qcow2 格式的外部镜像:

    上传镜像文件到 COS
    $ coscli cp alma9-custom.qcow2 cos://my-image-1250000000/images/
    通过 CLI 导入镜像
    $ tccli cvm ImportImage \
    --Architecture x86_64 \
    --OsType Linux \
    --OsVersion "AlmaLinux 9" \
    --ImageUrl "https://my-image-1250000000.cos.ap-guangzhou.myqcloud.com/images/alma9-custom.qcow2" \
    --ImageName "alma9-imported"
    将镜像同步到其他地域
    $ tccli cvm SyncImages \
    --ImageIds '["img-xxxxxx"]' \
    --DestinationRegions '["ap-shanghai","ap-beijing"]'

    适合小型项目或个人站点:

    单机部署架构
    用户 → CLB(可选) → CVM 实例
    ├── Nginx(反向代理)
    ├── 应用进程
    └── 数据库(PostgreSQL/MySQL)

    关键配置要点:

    • 选择合适的实例规格(推荐标准型 S5 或 S6 系列)
    • 系统盘使用高性能云硬盘或 SSD 云硬盘,数据盘独立挂载
    • 开启定期快照策略
    • 安全组仅开放必要端口

    适合中大型生产环境:

    集群部署架构
    用户 → CLB(负载均衡)
    ├── CVM-1(应用节点)
    ├── CVM-2(应用节点)
    └── CVM-3(应用节点)
    │
    内网连接
    │
    ├── CDB(云数据库 MySQL/PostgreSQL)
    ├── Redis(云数据库 Redis)
    └── COS(静态资源)+ CDN

    关键配置要点:

    • 应用节点使用自定义镜像统一部署
    • 使用 CLB 进行负载均衡和健康检查
    • 数据库使用腾讯云 CDB 托管服务
    • 静态资源存放 COS,通过 CDN 加速分发
    • 使用私有网络(VPC)隔离内网环境
    • 配置弹性伸缩(AS)根据负载自动增减实例
    创建启动配置
    $ tccli as CreateLaunchConfiguration \
    --LaunchConfigurationName web-config \
    --ImageId img-xxxxxx \
    --InstanceType S5.LARGE8 \
    --SecurityGroupIds '["sg-xxxxxx"]' \
    --SystemDisk '{"DiskType":"CLOUD_SSD","DiskSize":50}' \
    --UserData $(base64 -w 0 user-data.yaml)
    创建伸缩组
    $ tccli as CreateAutoScalingGroup \
    --AutoScalingGroupName web-asg \
    --LaunchConfigurationId asc-xxxxxx \
    --MinSize 2 \
    --MaxSize 10 \
    --DesiredCapacity 3 \
    --VpcId vpc-xxxxxx \
    --SubnetIds '["subnet-xxxxxx"]'
    • 密钥管理:使用 CAM 角色代替 SecretKey,避免在实例中存储长期凭证
    • 监控告警:通过腾讯云可观测平台配置 CPU、内存、磁盘、网络告警
    • 定期快照:为系统盘和数据盘设置定期快照策略
    • 安全加固:使用腾讯云主机安全(云镜)进行入侵检测和漏洞扫描
    • 成本优化:开发测试环境使用竞价实例,长期负载使用包年包月或节省计划
    • 网络优化:同地域内使用内网通信,跨地域使用云联网(CCN)