Web动态网站可以根据用户的偏好、行为历史等信息定制化展示内容,提供更加个性化的服务。那么如何部署动态网站?本篇教程旨在通过AWS云平台部署一个典型的Web动态网站,由NodeJS及MySQL构建,采用多可用区部署的方式来提高网站的可靠性。接下来将由站长百科详细为大家介绍。
一、AWS产品说明
本文主要基于AWS(亚马逊云与科技)产品进行部署,涉及产品包括:
- Amazon RDS:提供数据库服务(12个月免费)
- Amazon CloudFront:CDN加速(永久免费)
- Amazon VPC:虚拟私有云
- Amazon EC2:亚马逊云服务器(12个月)
- Amazon ELB:负载均衡
亚马逊云科技官网:点击访问(新客注册立享100+免费云产品及服务)
二、架构概述
本教程使用典型的三层Web架构,包括:负载均衡器、应用服务器及数据库。VPC内的NAT网关和ELB节点位于公有子网,其它资源则放置于私有子网,从而增强系统安全性。此外Route 53将托管和解析域名,CloudFront则用来加速静态和动态内容的加载,同时提升网站安全性。
下图展示了所采用的架构:
三、部署流程
在开始之前,确保已进入AWS控制台。如果还没有账户,请先进行注册:
相关推荐:《亚马逊云科技账号注册流程》(国内用户)
四、网络规划与安全设置
VPC是创建的私有网络,可以自定义网络配置,包括CIDR分配、子网划分、路由表设置等。通过安全组,可以控制进出网卡的流量。
1、创建VPC
通过AWS CloudFormation模板可以迅速创建所需的VPC资源。此VPC包含两个公有子网(共享路由表)、两个私有子网(分别有独立的路由表)及两个NAT Gateway。
打开CloudFormation控制台并选择“创建堆栈”。
然后输入以下URL以获取VPC模板:
https://workshop-binc.s3.cn-northwest-1.amazonaws.com.cn/cfn/vpc-with-natgw.yaml
继续点击默认设置,完成堆栈创建。大约1-2分钟后即可完成创建。
2、创建安全组
进入Amazon EC2控制台,选择安全组并点击“创建安全组”。
为以下各项创建安全组并添加入站规则:
(1)ELB安全组
- 名称:SG-ALB-HA-Workshop
- 描述:SG-ALB-HA-Workshop
- 协议:HTTP(端口80)
- 来源:0.0.0.0/0
(2)Bastion安全组
- 名称:SG-Bastion-HA-Workshop
- 描述:SG-Bastion-HA-Workshop
- 协议:SSH(端口22)
- 来源:0.0.0.0/0
(3)AppServer安全组
- 名称:SG-AppServer-HA-Workshop
- 描述:SG-AppServer-HA-Workshop
- 协议:自定义TCP(端口3000)
- 来源:SG-ALB-HA-Workshop(安全组ID)
(4)RDS安全组
- 名称:SG-RDS-HA-Workshop
- 描述:SG-RDS-HA-Workshop
- 协议:MySQL/Aurora(端口3306)
- 来源:SG-AppServer-HA-Workshop(安全组ID)
五、创建数据库
1、创建数据库子网组
打开RDS控制台。
2、创建数据库实例
接下来,先点击 添加与此VPC相关的所有子网,然后删除CIDR为10.192.11.0/24 及 10.192.10.0/24的公有子网,只保留两个私有子网即可。
3、新建数据库实例
这里我们创建一个RDS MySQL 5.7.31的数据库实例,实例类型选择db.t2.medium,并开启多可用区部署(创建备用实例)。
存储保留默认设置即可。
其余保留默认设置即可。
六、创建应用服务器模板
打开EC2控制台,选择“创建实例”,并按照以下配置创建服务器:
1、 服务器配置
操作系统:Ubuntu Server 18.04(AMI ID: ami-0071f6f4df15863cc 或 ami-0a22b8776bb32836b)
- 实例类型:t3.small
- VPC:选择创建的VPC
- 子网:选择一个公有子网
- 安全组:SG-AppServer-HA-Workshop和SG-Bastion-HA-Workshop
2、安装应用程序及依赖
连接到EC2实例并执行以下命令安装所需的软件和依赖:
sudo apt update sudo apt install nodejs npm memcached -y # 下载并解压应用程序 wget https://workshop-binc.s3.cn-northwest-1.amazonaws.com.cn/code/workshop_ha.tgz tar -xf workshop_ha.tgz cd workshop_ha npm install sudo npm install -g sequelize-cli pm2
3、数据库初始化
修改配置文件~/workshop_ha/config/config.json
"development": { ... "host": "xxxxxx.xxxx.rds.cn-north-1.amazonaws.com.cn", // 修改为数据库endpoint "username": "your user name", // 数据库用户名 "password": "your password", // 数据库密码 ... } 执行如下命令创建schema: sequelize-cli db:create sequelize-cli db:migrate
4、设置应用程序开机自启动
使用pm2来管理应用程序并设置开机自启动:
pm2 startup sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu pm2 start app.js pm2 status # 确保状态为online pm2 save
# 执行如下命令,确认应用程序有正常的返回 curl -I localhost:3000 >> HTTP/1.1 200 OK # 设置开机自启动 pm2 save
5、创建AMI镜像
回到EC2控制台,为这台EC2创建AMI镜像。
七、设置负载均衡及弹性伸缩
1、创建目标组
在目标组控制台创建目标组,选择默认设置并完成创建。
2、创建启动模板
通过AWS云服务器启动模板控制台创建启动模板,选择一个密钥对并完成创建。
3、创建Auto Scaling组
在Auto Scaling控制台创建Auto Scaling组,选择已创建的启动模板,配置伸缩策略并完成创建。
其余步骤,均保持默认值,然后点击【跳至检查】,并完成创建。
4、创建负载均衡器
在负载均衡器控制台创建ALB,选择相应的安全组和目标组,完成创建。
跳过第二步;第三步,选择安全组:SG-ALB-HA-Workshop;第四步,选择现有目标组 TG-HA-Workshop;其余步骤保留默认值,完成创建。
稍等片刻,等待ALB的状态进入Active,复制DNS名称,ALB-HA-Workshop-xxxx.cn-north-1.elb.amazonaws.com.cn,在浏览器新标签页打开。
注意:DNS解析生效时间稍长,约5分钟左右,需耐心等待。
正常情况下,可以进入如下页面,尝试刷新几次,可以观察到 az, instance_id 均会发生变化,表明流量通过ALB发送到了不同的后端EC2。
为了验证应用的健壮性,我们尝试将其中一台EC2做关机处理,模拟机器故障情况。
接下来,我们进入AutoScalingGroup页面,观察到如下活动历史记录,表明ASG探测到实例处于不健康状态,将其终止之后开启了一台新的实例。
稍等一会,实例通过目标组的健康检查之后,再次刷新网页,可以观察到新的实例已经投入使用。
八、配置CloudFront
1、配置Amazon CloudFront
在CloudFront控制台创建分配,选择源服务器和配置缓存策略,其他设置可以保持默认。完成后,等待CNAME状态为Active。
2、添加域名解析记录
在Route 53里面选择“托管区域”,然后点击为该网站准备的域名。
点击“创建记录”。
填入内容如下(需根据您的实际情况调整内容):
创建完成后,显示如下:
等新增的DNS记录生效后,就可以通过在浏览器输入CNAME域名访问到我们所托管的网站了。
使用自定义域名进行访问:
相关推荐:
《Amazon Lightsail上启动cPanel & WHM实例教程》
《亚马逊云科技Amazon EC2部署DeepSeek-R1蒸馏模型教程》
-
广告合作
-
QQ群号:4114653