传统博客系统到云原生高可用博客系统的转变(搭建篇)
本篇文章旨在指导用户完成,云原生博客系统的搭建。
基础要求:只需一台阿里云ecs,按需购买,包年包月均可。
与传统博客系统的核心区别
| 对比维度 | 传统博客系统 | 云原生博客系统 |
| 数据库架构 | 单实例本地部署(单点风险) | 云端高可用 RDS(多副本 + 自动容灾) |
| 静态资源 | 本地存储(带宽瓶颈) | 分布式 OSS+CDN(全球加速 + 流量卸载) |
| 应用部署 | 单服务器部署 | 负载均衡 + 多 ECS 实例(弹性扩展) |
| 故障恢复 | 人工排查 + 手动恢复(小时级) | 自动化故障转移(秒级切换) |
| 运维成本 | 需手动管理数据库、服务器 | 免运维服务(RDS/SLB/OSS 自动管理) |
| 数据可靠性 | 依赖本地备份(易丢失) | 云端多重备份(全量 + 增量 + 异地冗余) |
第一阶段:搭建 LNMP 环境及安装 WordPress
规范说明
- 服务启动命令格式:systemctl start nginx mariadb php-fpm(去除括号,使用空格分隔多服务)
- 路径一致性:WordPress 根目录为/var/www/wordpress,后续配置文件修改路径需统一
- 安全提示强化:数据库密码建议通过环境变量或独立配置文件管理,避免明文写入文档
操作代码
- 安装 Nginx 服务
| yum install -y nginx |
- 安装 Remi 仓库(适用于 CentOS 7)
| yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm |
- 启用 PHP 7.4 模块
| yum-config-manager --enable remi-php74 |
- 安装 PHP 及必要扩展
| yum install -y php php-fpm php-mysqlnd php-mbstring php-gd php-xml php-json php-zip |
- 安装 MariaDB 数据库
| yum install -y mariadb-server mariadb |
- 初始化数据库安全设置
| mysql_secure_installation # 按提示设置root密码(初始为空,直接回车后设置新密码),后续选项全部输入Y |
- 管理服务状态
| systemctl start nginx mariadb php-fpm # 启动服务 systemctl enable nginx mariadb php-fpm # 设置开机自启 systemctl status nginx mariadb php-fpm # 检查服务状态(返回active表示启动成功) |
- 配置 Nginx 支持 PHP
| mkdir -p /var/www/wordpress # 创建网站根目录 chown -R nginx:nginx /var/www/wordpress # 授权Nginx用户访问 |
- 创建 Nginx 配置文件
| vim /etc/nginx/conf.d/wordpress.conf |
粘贴以下内容:
| server { listen 80; server_name your-domain.com; # 请替换为实际域名(本地测试可保留localhost) root /var/www/wordpress; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } 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
| nginx -t # 检查配置语法 systemctl restart nginx # 应用配置 |
- 创建 WordPress 数据库
| mysql -u root -p # 登录MariaDB(输入数据库root密码) |
在数据库终端执行:
| CREATE DATABASE wordpress; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'StrongDBPassword123!'; # 强密码示例 GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES; EXIT; |
- 下载并配置 WordPress
| cd /var/www/wordpress wget https://wordpress.org/latest.zip unzip latest.zip mv wordpress/* . rm -rf wordpress latest.zip cp wp-config-sample.php wp-config.php vim wp-config.php # 配置数据库信息(重点修改以下内容) |
关键配置:
| define('DB_NAME', 'wordpress'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'StrongDBPassword123!'); # 与数据库用户密码一致 define('DB_HOST', 'localhost'); |
权限调整:
| chown -R nginx:nginx /var/www/wordpress |
- 完成安装
通过浏览器访问http://ECS公网IP,按向导完成初始化设置。
第二阶段:数据库上云(以阿里云 RDS 为例)
技术优势(高可用性体现)
- 多可用区容灾:主备库部署在不同物理机房,避免单点硬件故障(如阿里云 "可用区 A + 可用区 B" 架构)
- 自动化故障转移:内置心跳检测,主库异常时 30 秒内自动切换备库,应用无感知(RTO≤30 秒)
- 数据可靠性保障:
- 定时全量备份(存储于 OSS,保留 1-365 天)
- Binlog 增量日志支持任意时间点恢复(如误删数据可恢复至 1 分钟前)
- 半同步复制确保主备数据强一致性
- 免运维架构:自动处理主从同步、监控告警、版本升级,降低人工运维风险
操作代码
- 备份本地数据库
| mysqldump -u root -p --database wordpress > /tmp/wordpress_rds_migrate.sql # 提示:执行后输入本地数据库root密码 |
- 导入 RDS 数据库
| mysql -h rds-endpoint.mysql.rds.aliyuncs.com -P 3306 -u wpuser -p --database wordpress < /tmp/wordpress_rds_migrate.sql # 提示:输入RDS账号密码(建议通过安全方式存储,避免明文记录) |
- 验证数据迁移
| mysql -h rds-endpoint.mysql.rds.aliyuncs.com -P 3306 -u wpuser -p wordpress # 登录后执行:SELECT * FROM wp_posts LIMIT 1; 检查数据是否存在 |
- 更新 WordPress 数据库配置
| vim /var/www/wordpress/wp-config.php # 关键配置修改如下 |
替换为 RDS 配置:
| define('DB_HOST', 'rds-endpoint.mysql.rds.aliyuncs.com:3306'); # RDS私网地址+端口 define('DB_NAME', 'wordpress'); # 与RDS数据库名一致 define('DB_USER', 'wpuser'); # RDS专用账号 define('DB_PASSWORD', 'RDS-Strong-Password!'); # RDS账号密码 |
第三阶段:静态资源优化
方案解析
方案一:OSS+CDN(推荐)
前提条件:
- 已备案域名(根据《互联网信息服务管理办法》,中国内地服务器必须备案)
- 基础成本:域名(约 10 元 / 年)+ 3 个月 ECS(约 200 元)+ OSS 存储(按用量计费,1GB 月存储约 0.12 元)
核心优势:
- 静态资源分离:将图片、CSS、JS 等存储于 OSS,降低 ECS 存储压力
- 全球加速:CDN 节点缓存静态资源,用户就近获取,延迟降低 70%+
- 流量卸载:OSS 直接处理静态资源请求,ECS 仅处理动态逻辑(CPU 利用率可下降 60%)
方案二:GitHub Pages(适用于海外用户)
限制:国内访问延迟较高(建议搭配 Cloudflare CDN 中转),本人已经部署在国外平台,奈何身处内地,访问网站全天超时。
方案三:Nginx 反向代理(需备案)
配置要点:
| # 在Nginx配置中添加静态资源重定向规则 location ~* \.(jpg|jpeg|png|gif|css|js|ico|woff|woff2)$ { proxy_pass https://your-oss-bucket.oss-cn-hangzhou.aliyuncs.com; # OSS域名 proxy_redirect off; proxy_set_header Host $host; } |
注意:未备案域名访问 OSS 会触发强制下载,需通过备案域名绑定 OSS Bucket。
对于第三阶段的搭建,本人以及完成95%,只差备案域名那一部分,始终是我无法逾越的鸿沟,如果你有想法,完成搭建,我将倾囊相授,这一阶段的全部操作。
第四阶段:负载均衡与高可用架构
高可用性实现路径
| 阶段 | 高可用能力提升 | 技术实现 | 故障恢复时间 |
| 第一阶段 | 单点架构(无高可用) | 单 ECS 部署 LNMP | 故障恢复需人工介入 |
| 第二阶段 | 数据库高可用 | RDS 多可用区主备 + 自动故障转移 | ≤30 秒 |
| 第三阶段 | 静态资源高可靠 | OSS 跨区域冗余存储 + CDN 节点备份 | 存储故障无感知 |
| 第四阶段 | 应用层高可用 | 负载均衡 + 多 ECS 实例 + 健康检测 | 秒级故障切换 |
操作步骤
- 创建 ECS 实例镜像
- 基于已配置的 LNMP 环境创建自定义镜像(阿里云控制台 - ECS - 镜像 - 创建镜像)
- 使用镜像创建 2 台 ECS(主:可用区 A,备:可用区 B,同一 VPC)
- 配置负载均衡(SLB)
- 创建传统型负载均衡实例(监听端口 80,协议 HTTP)
- 添加后端服务器:主 ECS 权重 90,备 ECS 权重 10(加权轮询算法)
- 开启健康检查(HTTP 检查路径/health.php,响应 200 视为正常)
- 自动化故障切换脚本(示例逻辑)
| # 检测主服务器状态 while true; do STATUS=$(curl -s -o /dev/null -w %{http_code} http://主ECS公网IP) if [ $STATUS -ne 200 ]; then # 从负载均衡中移除故障服务器 aliyun slb RemoveBackendServers --LoadBalancerId lb-xxx --BackendServers 主ECS实例ID # 发送告警通知(邮件/Slack) curl -X POST https://api.example.com/alert -d "主服务器故障" fi sleep 30 # 每30秒检测一次 done |
脚本集合(访问我的github)
https://github.com/11mmff-11/lnmp-wp-static-blog.git
aliyun_ecs_list.py:可查询ecs状态
aliyun_oss_bucket.py:可上传本地ecs文件至oss
aliyun_warn_slb.py:健康检查+故障切换
update_net_wordpress.sh:修改数据库对应配置以及消除ftp的阻碍,主要是我每次用完ecs都会释放,每次创建一个ecs公网ip都会替换,所以设计这个脚本,来自动修改公网ip以及其他配置,确保博客系统正常运行
yali_test.sh:这个脚本诞生于该项目的第三阶段,我进行cpu负载测试,确定静态资源到底在ecs传输还是在oss传输。
总结
本方案通过分阶段架构升级实现云原生高可用性:
- 基础架构:LNMP 环境搭建,实现博客系统基本运行(单点架构)
- 数据上云:迁移数据库至 RDS,解决数据层单点风险,获得多可用区容灾能力
- 资源分离:静态资源存储至 OSS 并通过 CDN 加速,降低服务器压力,提升用户访问速度
- 应用扩展:负载均衡结合多 ECS 实例,实现应用层高可用,支持弹性扩展与故障自动切换
每个阶段均针对传统博客系统的痛点(单点故障、性能瓶颈、高运维成本)提供解决方案,最终构建出数据可靠、访问高效、故障自愈的云原生博客系统。
更多推荐
所有评论(0)