越来越多PHP开发者把项目搬到阿里云上。个人博客、企业官网、电商后台和内部管理系统,都能在这里找到合适的基础设施。下面以一个电商后台的迁移为例,说明选型、环境搭建、部署、性能调优和安全加固各自要做什么。

一、PHP项目适合用哪些阿里云产品
PHP在WordPress、Laravel、ThinkPHP这些生态里仍然很常见。部署时先要想清楚三件事:服务器稳不稳,能不能方便扩容,运维要花多少人力。阿里云在这几方面的产品线都比较完整。
- 云服务器ECS:操作系统和运行环境可以自己定,适合需要完全掌控PHP运行环境的项目。
- 云数据库RDS:支持MySQL、PostgreSQL等主流数据库,自带备份和主从切换。
- 对象存储OSS:存放图片、视频和用户上传的文件,应用服务器不必再承担这部分流量。
- 负载均衡SLB:把流量分发到多台PHP服务器上。多台机器配合自动伸缩使用,效果更明显。
流量波动大的业务,比如大促期间访问量在短时间内涨好几倍,可以用ECS加弹性伸缩组。高峰时自动加实例,活动结束后释放,闲置资源就不用一直付费。
二、迁移前的情况
某本地生活电商团队原来把PHP 7.4站点部署在一台物理服务器上,数据库和应用混在一起。每到大促,页面响应时间会从200毫秒涨到3秒以上,还多次出现磁盘写满、服务中断的情况。团队给迁移定了三个目标:P95响应时间低于500毫秒,单点故障不影响整体可用,发布时不中断服务。
迁移前,团队先把项目依赖理了一遍:扩展包括pdo_mysql、redis、gd、mbstring,Web服务用Nginx加PHP-FPM。ECS镜像和RDS的规格,都是根据这份清单选的。
三、环境搭建与部署
1. 创建ECS和安全组
ECS选离用户近的地域,比如华东1(杭州)。操作系统可以用Alibaba Cloud Linux 3或Ubuntu 22.04 LTS。安全组只对公网开放80和443端口。22端口只给运维办公室的IP,数据库端口则完全不对公网开放。
2. 安装PHP运行环境
以Alibaba Cloud Linux为例,目标版本是PHP 8.1。下面的包名要以系统软件源里的实际名字为准,这里只说思路。
- 安装Nginx和PHP-FPM。
- 安装扩展:php-mysqlnd、php-redis、php-gd、php-mbstring、php-opcache。
- 修改php.ini里的memory_limit、upload_max_filesize和max_execution_time。上传大图的站点最容易卡在upload_max_filesize上,改完要重启PHP-FPM才会生效。
3. 连接RDS
在RDS控制台创建实例和账号,把ECS所在的VPC加入白名单。代码里用PDO并开启预处理语句,数据库连接信息从环境变量读取,不要把密码写进代码仓库。
4. 部署代码和目录权限
代码用Git拉到/var/www/shop,Nginx的Web根目录指向其中的public子目录。PHP-FPM的运行用户只需要对storage、cache这类要写文件的目录有写权限,其他目录保持只读。即便程序出现漏洞,能被改写的文件范围也小很多。
四、性能优化:把响应时间压到稳定区间
部署完成后做压测,瓶颈集中在三处。
1. 开启OPcache
PHP默认每次请求都会重新解析脚本。OPcache把编译后的字节码放进共享内存,下次直接复用。团队把opcache.memory_consumption设为256,同时关闭opcache.validate_timestamps。代价是每次发布都要重启PHP-FPM,新代码才会生效。换来的是单接口平均耗时下降约30%。
2. 用Redis缓存热点数据
商品详情和分类树每次访问都要查MySQL。团队改用阿里云Redis(兼容版)做二级缓存,过期时间按数据的变化频率设定。商品更新时,通过事件机制主动清除对应缓存,避免读到旧数据。数据库查询量因此下降近六成。
3. 把图片等静态资源挪到OSS和CDN
商品图片原来由应用服务器直接输出,很占带宽。迁到OSS后配合CDN加速,图片加载变快,ECS的出口流量也随之降下来。
优化后,大促模拟压测中P95响应时间稳定在380毫秒左右,达到了500毫秒的目标。
五、安全加固
PHP项目上云后,安全配置和性能配置同样要做。以下几项是这个团队实际验证过的做法:
- 在php.ini里把expose_php设为Off,不对外暴露PHP版本。
- 用阿里云WAF拦截常见的SQL注入和XSS请求。
- 数据库查询全部使用预处理语句,表单输入做严格校验和转义。
- 定期到云安全中心查看漏洞和异常登录记录,同时开启RDS自动备份。备份只开不验证等于没有,最好隔一段时间实际恢复一次。
- 数据库密码和AccessKey放进环境变量或KMS,不写进代码。
六、小结
把PHP项目部署到阿里云,就是按业务需要选择ECS、RDS、OSS、SLB,部署后再用压测数据指导优化。在这个案例里,OPcache、Redis缓存和静态资源分离三项措施,加上基本的安全配置,让一个中型PHP应用在阿里云上跑得稳定。下一步可以尝试容器化部署和弹性伸缩。