腾讯云CVM云服务器企业网站完整落地教程:LNMP环境搭建+域名解析+SSL部署+自动备份全套脚本
一、引言:从零开始的企业网站上云之路
拥有一台腾讯云CVM云服务器只是企业数字化转型的第一步。从空白Linux系统到能够对外提供服务的生产级网站,中间需要完成操作系统初始化、Web运行环境搭建、域名解析绑定、SSL加密传输配置以及数据自动备份等一系列环节。对于缺乏专职运维人员的中小企业而言,这些步骤常常成为上云之路的隐形门槛。
本文旨在提供一套完整、可落地的操作指南,涵盖从CVM选购到网站正式上线的全流程。全文以CentOS 7.6操作系统为例,所有命令均在腾讯云CVM实测通过。无论你选择手动编译安装还是使用一键安装包,都能在本文中找到对应的实操方案。文章最后提供一套生产级的自动备份脚本,帮助你在网站上线后建立可靠的数据保护机制。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
二、云服务器选型与基础配置
2.1 CVM与Lighthouse的选择
腾讯云提供两种主要的服务器产品:云服务器CVM和轻量应用服务器Lighthouse。对于企业网站场景,选择哪种产品需要根据实际需求判断。如果网站是纯展示型、没有复杂后台功能,Lighthouse操作更简单、开箱即用。但如果网站涉及电商、会员系统、在线支付等功能,或者未来1-2年内可能扩展ERP、CRM等业务系统,则必须选择CVM云服务器,因为CVM支持VPC组网、弹性伸缩和更精细的权限管理。
2.2 实例规格推荐
对于大多数中小型企业的官方网站,推荐选择2核4GB内存的配置,这一规格足以稳定运行Nginx、PHP-FPM、MySQL以及常见的PHP框架。低于此配置的1核2GB实例,在MySQL与PHP-FPM同时运行时容易因内存不足触发OOM(Out of Memory),导致后台卡顿或频繁出现502错误。若项目预期访问量较大或涉及复杂的计算任务,可进一步选择4核8GB或更高规格的实例。带宽方面,1Mbps适用于日UV低于1000的小型企业官网,3-5Mbps可满足中等流量需求。
2.3 操作系统选择
腾讯云CVM支持多种Linux发行版。考虑到兼容性与社区支持广度,推荐选择Ubuntu 22.04 LTS或CentOS 7.9。Ubuntu 22.04在软件包更新速度与PHP版本支持方面表现更优,尤其适合希望使用PHP 8.2及以上版本的开发者。CentOS 7则因存量用户庞大,仍有大量生产环境在使用,但需注意其默认软件源较旧,需额外配置EPEL与Remi源才能获取最新PHP版本。本文后续操作以CentOS 7.6为例。
2.4 安全组与端口开放
安全组是腾讯云CVM的虚拟防火墙,控制着进出实例的网络流量。部署Web应用时,必须在安全组中放行以下端口:
- 22端口(TCP):SSH远程登录,必须开放,建议限制来源IP为管理员办公网段
- 80端口(TCP):HTTP网站访问,必须对所有IP开放
- 443端口(TCP):HTTPS加密访问,若启用SSL证书则必须开放
- 3306端口(TCP):MySQL数据库,建议仅对内网或指定IP开放,避免暴露在公网
在腾讯云控制台的"安全组"页面中,选择对应的安全组,点击"入站规则"→"添加规则",按上述端口逐一添加即可。
2.5 服务器初始化三件事
服务器购买完成后,在开始使用之前有三件事必须优先处理:
- 重置密码:在腾讯云控制台的实例管理页面,找到"重置密码"功能,为root用户设置一个足够复杂的密码(建议包含大小写字母、数字和特殊字符)
- 记录公网IP:在实例列表中查看并记录公网IP地址,后续所有访问和配置都将使用该IP
- 配置安全组:按照上文2.4节的要求完成端口放行
三、LNMP环境搭建
LNMP是Linux+Nginx+MySQL+PHP的缩写,是运行PHP网站最经典的服务器架构。搭建LNMP环境有两种主流方式:手动编译安装与使用LNMP.org一键安装包。两种方式各有优劣,下面分别介绍。
3.1 方式一:使用LNMP.org一键安装包(推荐新手)
对于大多数用户而言,使用LNMP一键安装包是最省事、最可靠的路径。它适配主流CentOS/Ubuntu系统,预置了PHP多版本切换、SSL自动部署、防跨站配置等关键能力。手动搭建看似可控,实则容易卡在php-fpm.sock权限、open_basedir路径错误、或Nginx与PHP版本不匹配等问题上。
安装步骤:
首先通过SSH登录服务器(使用root用户和之前设置的管理员密码):
ssh root@你的服务器公网IP然后执行LNMP一键安装命令:
screen -S lnmp
wget https://soft.lnmp.org/lnmp1.9.tar.gz -O lnmp1.9.tar.gz
tar -zxvf lnmp1.9.tar.gz
cd lnmp1.9
./install.sh lnmp安装过程中,脚本会依次询问以下配置选项:
- 选择MySQL版本(建议选择MySQL 8.0或MariaDB 10.11)
- 设置MySQL的root密码(请务必牢记)
- 选择PHP版本(新项目推荐PHP 8.2,性能和类型系统更稳定)
- 选择内存优化选项(根据服务器内存大小选择)
整个安装过程大约需要15-30分钟,取决于服务器性能和网络速度。安装完成后,终端会显示Nginx、MySQL、PHP的安装路径和版本信息。
安装后的关键验证:
# 检查Nginx是否运行
systemctl status nginx
# 检查PHP版本
php -v
# 检查MySQL服务
systemctl status mysqld在浏览器中访问 `http://服务器公网IP`,如果看到LNMP的默认欢迎页面,说明环境搭建成功。
3.2 方式二:手动搭建LNMP环境(适合定制化需求)
如果你需要对每一层技术栈有完整的掌控,或者需要特定版本的软件组合,可以选择手动搭建方式。以下以CentOS 7.6为例。
步骤1:安装Nginx
在 `/etc/yum.repos.d/` 下创建nginx.repo文件:
vi /etc/yum.repos.d/nginx.repo写入以下内容:
[nginx]
name = nginx repo
baseurl = https://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck = 0
enabled = 1保存后执行安装命令:
yum install -y nginx
systemctl start nginx
systemctl enable nginx步骤2:安装MySQL
添加MySQL官方YUM源并安装:
wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
yum localinstall mysql80-community-release-el7-6.noarch.rpm -y
yum install mysql-community-server -y
systemctl start mysqld
systemctl enable mysqld首次启动后,MySQL会生成一个临时密码,使用以下命令查看:
grep 'temporary password' /var/log/mysqld.log然后执行安全设置:
mysql_secure_installation按照提示设置root密码、移除匿名用户、禁止远程root登录等。
步骤3:安装PHP
添加Remi源并安装PHP:
yum install epel-release yum-utils -y
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php82
yum install php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl -y
systemctl start php-fpm
systemctl enable php-fpm步骤4:配置Nginx与PHP联动
编辑Nginx默认配置文件:
vim /etc/nginx/conf.d/default.conf将server块替换为以下内容:
server {
listen 80;
root /usr/share/nginx/html;
server_name localhost;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}重启Nginx使配置生效:
systemctl restart nginx3.3 方式三:镜像部署LNMP环境(最快路径)
如果不想执行任何命令行操作,腾讯云市场提供了预装LNMP环境的镜像。在创建CVM实例时,选择"镜像市场"→搜索"LNMP"→选择官方认证的镜像,系统会自动帮你装好Web服务器、数据库和PHP环境。这种方式最快,10分钟内即可完成环境部署,但定制性相对较低。
四、域名解析与绑定
4.1 域名购买与准备
如果还没有域名,可以在腾讯云域名注册页面购买。已有域名的用户,需要将域名解析到CVM的公网IP地址。
4.2 添加DNS解析记录
登录腾讯云控制台,在"产品列表"中搜索"DNSPod",进入域名解析页面。选择需要解析的域名(若域名未在腾讯云注册,需先转入或使用第三方DNS解析)。点击"添加记录",填写以下信息:
- 主机记录:填写"www"(表示解析www.example.com)或"@"(表示解析example.com根域名)
- 记录类型:选择"A"(将域名指向IPv4地址)
- 记录值:填写CVM实例的公网IP地址
- TTL:保持默认600秒即可
添加完成后,等待DNS生效(通常几分钟到几小时)。可以通过 `ping 你的域名` 命令检查解析是否生效。
五、SSL证书申请与HTTPS部署
5.1 SSL证书类型选择
腾讯云提供三种主要证书类型:
- DV型证书(域名验证型):仅验证域名所有权,审核速度快(几分钟到几小时),适合个人博客、小型展示型网站。腾讯云提供免费的DV证书,有效期为一年
- OV型证书(组织验证型):验证域名所有权和企业真实身份,审核周期1-3个工作日,浏览器中显示企业名称,适合教育机构、政府网站、企业官网
- EV型证书(扩展验证型):最高等级,验证最为严格,适合金融、银行、支付类网站
对于一般企业网站,免费DV证书已经足够。如果网站涉及用户登录、支付等敏感信息传输,建议至少选择OV型证书。
5.2 申请免费SSL证书
登录腾讯云控制台,进入SSL证书管理页面。点击"申请免费证书",填写以下信息:
- 证书绑定域名(填写需要启用HTTPS的域名,如www.example.com)
- 域名验证方式:选择"自动DNS验证"(如果域名在腾讯云DNSPod管理)或"手动DNS验证"
- 填写申请邮箱
提交申请后,等待证书签发(通常5分钟内完成)。证书状态变为"已签发"后,点击"下载",服务器类型选择"Nginx",下载证书文件包。
解压后获得以下文件:
- `cloud.tencent.com_bundle.crt` - 证书文件
- `cloud.tencent.com_bundle.pem` - 证书文件(PEM格式)
- `cloud.tencent.com.key` - 私钥文件
5.3 Nginx配置HTTPS
将证书文件上传到服务器。可以使用WinSCP等工具,将 `.crt` 和 `.key` 文件上传到 `/etc/nginx/` 目录。
编辑Nginx配置文件:
vim /etc/nginx/conf.d/ssl.conf写入以下HTTPS配置:
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/cloud.tencent.com_bundle.crt;
ssl_certificate_key /etc/nginx/cloud.tencent.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /usr/share/nginx/html;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# HTTP自动跳转HTTPS
server {
listen 80;
server_name www.example.com;
return 301 https://$server_name$request_uri;
}测试配置并重启Nginx:
nginx -t
systemctl restart nginx访问 `https://你的域名`,如果浏览器地址栏显示安全锁图标,说明HTTPS配置成功。
5.4 HTTPS常见问题排查
如果HTTPS无法访问,按以下顺序排查:
- 确认安全组已放行443端口
- 确认域名已解析到CVM公网IP
- 检查Nginx配置文件中的证书路径是否正确
- 执行 `nginx -t` 检查配置文件语法
- 查看Nginx错误日志:`tail -f /var/log/nginx/error.log`
六、自动备份脚本(生产级方案)
数据备份是保障企业业务连续性的关键环节。腾讯云服务器(CVM)提供的定时任务功能(CronJob)能够帮助用户自动化执行备份脚本,有效降低人为操作风险。结合腾讯云对象存储(COS)的高可靠性存储能力,可实现"计算+存储"一体化的自动备份解决方案。
6.1 备份策略设计
生产环境的备份策略应遵循以下原则:
- 备份频率:每日增量备份 + 每周全量备份
- 保留周期:保留最近7天的每日备份 + 最近4周的每周备份
- 存储位置:本地保留一份 + 上传至腾讯云COS异地存储
- 可恢复性:定期测试备份文件的恢复能力
6.2 安装COSCMD工具
首先在服务器上安装腾讯云COS的命令行工具,用于将备份文件上传至对象存储:
pip install coscmd配置COSCMD(需要先创建COS存储桶并获取SecretId和SecretKey):
coscmd config -a <你的SecretId> -s <你的SecretKey> -b <存储桶名称> -r <存储桶地域>6.3 完整备份脚本
创建备份脚本文件:
mkdir -p /home/backup
vi /home/backup/auto_backup.sh写入以下完整脚本:
#!/bin/bash
# ============================================================
# 企业网站自动备份脚本
# 功能:备份网站文件 + MySQL数据库 + 上传至腾讯云COS
# 适用环境:LNMP (CentOS 7/Ubuntu)
# ============================================================
# -------- 配置区域(请根据实际情况修改)--------
WEB_ROOT="/usr/share/nginx/html" # 网站根目录
BACKUP_DIR="/home/backup" # 本地备份存储目录
MYSQL_USER="root" # MySQL用户名
MYSQL_PASS="你的MySQL密码" # MySQL密码
MYSQL_DB="你的数据库名" # 要备份的数据库名
COS_BUCKET="你的存储桶名称" # COS存储桶
COS_REGION="ap-guangzhou" # COS地域
RETENTION_DAYS=7 # 本地保留天数
# ----------------------------------------------
# 创建备份目录(如不存在)
mkdir -p $BACKUP_DIR
# 生成日期标签
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="backup_$DATE"
# 日志文件
LOG_FILE="$BACKUP_DIR/backup.log"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
log "========== 开始执行备份任务 =========="
# -------- 1. 备份网站文件 --------
log "正在打包网站文件:$WEB_ROOT"
tar -czf "$BACKUP_DIR/${BACKUP_NAME}_web.tar.gz" -C $WEB_ROOT . 2>&1
if [ $? -eq 0 ]; then
log "网站文件打包完成:${BACKUP_NAME}_web.tar.gz"
else
log "错误:网站文件打包失败"
exit 1
fi
# -------- 2. 备份MySQL数据库 --------
log "正在备份数据库:$MYSQL_DB"
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --single-transaction --routines --triggers $MYSQL_DB > "$BACKUP_DIR/${BACKUP_NAME}_db.sql" 2>&1
if [ $? -eq 0 ]; then
log "数据库导出完成:${BACKUP_NAME}_db.sql"
# 压缩SQL文件
gzip "$BACKUP_DIR/${BACKUP_NAME}_db.sql"
log "数据库压缩完成:${BACKUP_NAME}_db.sql.gz"
else
log "错误:数据库备份失败"
exit 1
fi
# -------- 3. 上传至腾讯云COS --------
log "正在上传备份文件至COS..."
coscmd upload "$BACKUP_DIR/${BACKUP_NAME}_web.tar.gz" "/backup/${BACKUP_NAME}_web.tar.gz" 2>&1
if [ $? -eq 0 ]; then
log "网站文件上传COS成功"
else
log "警告:网站文件上传COS失败"
fi
coscmd upload "$BACKUP_DIR/${BACKUP_NAME}_db.sql.gz" "/backup/${BACKUP_NAME}_db.sql.gz" 2>&1
if [ $? -eq 0 ]; then
log "数据库备份上传COS成功"
else
log "警告:数据库备份上传COS失败"
fi
# -------- 4. 清理本地过期备份 --------
log "清理本地超过 $RETENTION_DAYS 天的旧备份..."
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +$RETENTION_DAYS -delete
log "本地旧备份清理完成"
# -------- 5. 清理COS过期备份(保留30天) --------
log "清理COS中超过30天的旧备份..."
coscmd list /backup/ | grep -E "backup_.*\.(tar\.gz|sql\.gz)" | while read line; do
FILE_DATE=$(echo $line | grep -oE "[0-9]{8}_[0-9]{6}")
if [ ! -z "$FILE_DATE" ]; then
FILE_TIMESTAMP=$(date -d "${FILE_DATE:0:8} ${FILE_DATE:9:2}:${FILE_DATE:11:2}:${FILE_DATE:13:2}" +%s 2>/dev/null)
if [ ! -z "$FILE_TIMESTAMP" ]; then
CURRENT_TIMESTAMP=$(date +%s)
DIFF_DAYS=$(( ($CURRENT_TIMESTAMP - $FILE_TIMESTAMP) / 86400 ))
if [ $DIFF_DAYS -gt 30 ]; then
FILE_NAME=$(echo $line | awk '{print $1}')
log "删除COS过期备份:$FILE_NAME"
coscmd delete "$FILE_NAME" 2>&1
fi
fi
fi
done
log "========== 备份任务执行完成 =========="
log "备份文件列表:"
ls -lh $BACKUP_DIR/backup_* | tee -a $LOG_FILE赋予脚本执行权限:
chmod +x /home/backup/auto_backup.sh6.4 配置定时任务
使用crontab配置定时执行:
crontab -e添加以下定时任务(每天凌晨2点执行备份):
0 2 * * * /home/backup/auto_backup.sh如果需要每周全量备份 + 每日增量备份的组合策略,可以添加多个任务:
# 每日凌晨2点执行日常备份
0 2 * * * /home/backup/auto_backup.sh
# 每周日凌晨3点执行全量备份(单独脚本,逻辑更完整)
0 3 * * 0 /home/backup/full_backup.sh6.5 备份恢复指南
当网站数据需要恢复时,按以下步骤操作:
恢复网站文件:
# 解压备份文件到网站根目录
tar -xzf /home/backup/backup_YYYYMMDD_HHMMSS_web.tar.gz -C /usr/share/nginx/html/恢复数据库:
# 解压并导入数据库
gunzip /home/backup/backup_YYYYMMDD_HHMMSS_db.sql.gz
mysql -u root -p 数据库名 < /home/backup/backup_YYYYMMDD_HHMMSS_db.sql从COS恢复(如果本地备份丢失):
# 从COS下载备份文件
coscmd download /backup/backup_YYYYMMDD_HHMMSS_web.tar.gz /home/backup/
coscmd download /backup/backup_YYYYMMDD_HHMMSS_db.sql.gz /home/backup/七、常见问题与解答
问1:安装LNMP一键包时提示"screen: command not found"怎么办?
执行 `yum install -y screen`(CentOS)或 `apt install -y screen`(Ubuntu)安装screen工具后重新执行安装命令。
问2:网站部署后访问出现502 Bad Gateway错误是什么原因?
502错误十有八九是PHP-FPM没有启动,或者socket文件路径或权限不对。检查PHP-FPM是否运行:`ps aux | grep php-fpm`,如果没有进程则执行 `lnmp php start` 或 `systemctl start php-fpm` 启动。同时确认Nginx配置中的 `fastcgi_pass` 与PHP-FPM的实际监听方式一致。
问3:SSL证书部署后网站仍然显示"不安全"?
检查网页中是否混合了HTTP资源(如图片、CSS、JS等)。所有资源都应使用HTTPS链接,或在Nginx中配置 `Content-Security-Policy` 升级不安全请求。另外确认证书已绑定正确的域名,且未过期。
问4:备份脚本中的MySQL密码明文存储有安全风险怎么办?
可以创建MySQL专用备份用户,授予最小权限(仅SELECT、LOCK TABLES、SHOW VIEW),并限制该用户只能从localhost连接。或者使用MySQL的 `.my.cnf` 配置文件存储密码,将脚本中的密码参数改为 `--defaults-extra-file=/path/to/.my.cnf`。
问5:如何验证备份文件是可恢复的?
建议在测试环境定期执行恢复演练。可以每月选择一份备份文件,在测试服务器上完整恢复网站文件和数据库,验证网站功能是否正常。这才是检验备份有效性的唯一标准。
问6:网站访问量增长后如何扩展CVM配置?
腾讯云CVM支持在线升级配置。在控制台停止实例后,可以调整CPU、内存、带宽等规格,重启后配置即生效。对于需要零停机扩容的场景,建议采用负载均衡CLB + 多台CVM的集群架构。





