如何将基于PHP后端与MySQL数据库的Angular 5应用部署到AWS?
你的基础思路完全可行,但确实还有不少容易遗漏的关键细节,尤其是生产环境部署,我帮你梳理一下需要补充的步骤:
一、AWS服务选型与架构优化
- 如果你打算用传统服务器模式,EC2是首选:建议先选t2.micro(免费额度内)做测试,操作系统选Amazon Linux 2或Ubuntu,方便后续配置Web服务。
- 数据库别直接装在EC2上!生产环境强烈推荐用RDS for MySQL:托管式服务自带自动备份、故障转移、性能监控,比自己维护EC2上的MySQL省心太多,还能降低运维风险。
- 静态资源(Angular的dist文件夹)其实可以拆分部署:上传到S3桶并开启静态网站托管,再搭配CloudFront做CDN加速。这样不仅前端加载更快,还能减轻EC2的负载,同时可以通过CloudFront配置API请求转发到EC2的PHP后端。
二、EC2上的Web服务器配置
- 先安装Web服务器(Apache或Nginx):
- 用Apache的话,要确保启用
mod_php和mod_rewrite模块; - 用Nginx的话,需要搭配PHP-FPM来处理PHP请求,别忘配置fastcgi_pass规则。
- 用Apache的话,要确保启用
- 部署路径规划:
- Angular的dist内容放到Web根目录(比如
/var/www/html),用户访问域名时直接加载前端; - PHP后端文件建议放到子目录(比如
/var/www/html/api),或者单独配置虚拟主机,避免和Angular的SPA路由冲突。
- Angular的dist内容放到Web根目录(比如
- 跨域问题必须处理:如果前端在S3/CloudFront、后端在EC2,要么在PHP代码里添加CORS响应头,要么在Web服务器配置中全局设置允许前端域名的跨域请求。
三、数据库连接配置
- 如果用RDS:
- 配置RDS的安全组,只允许EC2实例的IP访问3306端口;
- 修改PHP代码里的数据库连接参数:把
localhost换成RDS的端点地址,用户名、密码用RDS创建时设置的; - 提前把本地的数据库表结构和测试数据导入到RDS实例中。
四、安全与环境变量规范
- 绝对不要把数据库密码、API密钥等敏感信息硬编码在PHP代码里!用AWS Systems Manager的Parameter Store存储这些敏感值,然后在PHP中读取,或者直接设置EC2的环境变量。
- 配置EC2安全组:只开放必要端口——80/443(Web访问)、22(SSH管理,仅限你的IP),3306端口只对RDS的安全组开放。
- 必须配置HTTPS:用AWS Certificate Manager免费申请SSL证书,然后在Web服务器(或CloudFront)上启用HTTPS,现在浏览器对HTTP站点限制很多,这个是生产环境的必备项。
五、部署自动化(可选但推荐)
- 手动部署容易出错,推荐用CodeDeploy或者GitHub Actions实现自动化:
- 前端:代码提交后自动执行
ng build --prod,把dist文件夹上传到S3或EC2; - 后端:自动同步PHP代码到EC2,甚至可以配合CodePipeline实现从代码提交到部署的全流程自动化。
- 前端:代码提交后自动执行
六、测试与监控
- 测试前端路由:Angular是SPA,刷新页面容易出现404,需要在Web服务器配置重写规则(比如Apache的
.htaccess添加RewriteRule,Nginx用try_files指令)。 - 测试API接口:验证PHP是否能正常连接RDS,返回正确的业务数据。
- 开启CloudWatch监控:监控EC2的CPU、内存使用率,RDS的性能指标,同时收集Web服务器和PHP的日志,方便后续排查问题。
总的来说,你的初始方案是正确的方向,但补充这些步骤后,才能保证部署的稳定性、安全性和可维护性,尤其是生产环境一定要重视数据库和安全配置。
内容的提问来源于stack exchange,提问作者Kalyan A
相关产品推荐
相关产品推荐

