如何把 ThinkPHP 5 的项目迁移到阿里云函数计算来应对流量洪峰?
点击上方图片了解活动详情!
为了帮助更多开发者们客观了解并使用阿里云函数计算(FC),阿里云开发者社区携手云原生应用平台 Serverless 团队发布 “Serverless 函数计算征集令”,7月31日前发布阿里云函数计算 FC 评测文章,即有机会获得千元好礼 + 千元函数计算资源包!
立即参加:
https://developer.aliyun.com/topic/serverless2022
哈喽各位开发者,阿 Ser 又来安利宝藏文章啦!今天推荐的是笔友 “wxf2305” 带来的阿里云函数计算 FC 测评文章;让我们一起跟着这位乘风者博主学习:如何把 ThinkPHP 5 的项目迁移到阿里云函数计算 FC 来应对流量洪峰吧!
为什么要迁移到阿里云函数
部署到阿里云函数计算 FC,还能减少运行环境搭建的成本。之前的模式需要在 ecs 安装 nginx,然后安装 php,以及安装 php 的驱动程序 redis 等。
看了下阿里云函数计算 FC 官方文档,目前 custom runtime Debian 9 内置 php7.4 并且看了下内置的 php 的扩展整好也支持到了我整好需要的 redis。
不仅省下了买服务器钱!而且还不用安装 php 环境了,更惊喜的是,每个月还有免费的算力额度。
迁移原因总结下:
成本降低了很多;
免去了环境部署;
自动扩容,天生应对高并发。
改造旧项目配适函数计算
这里还有一点要注意,我的项目不是前后端分离的,鉴权还是穿透的 session 和 cookie 模式。如果 session 是保留在服务端的文件的话也会存在上面的问题,建议存储的 redis 里面,我的项目本省就是存到 redis 里面的,所以这块不需要改动,如果你的项目存在这样的问题那就需要改进下了。
阿里云函数计算 FC 和云 msyql 、云 redis 通讯的时候一定要采用 vpc 内网互通的原则,减少链路传输的开销以及链路劫持风险。
增加 s.yml 以及启动 shell 脚本
edition: 1.0.0
name: compoent-test
access: 'default'
services:
cn-hangzhou-test1002-func-3i3c0f95:
component: devsapp/fc
props:
region: cn-hangzhou
service:
logConfig:
enableRequestMetrics: true
enableInstanceMetrics: true
logBeginRule: DefaultRegex
project: aliyun-fc-cn-hangzhou-ae3ef8b8-db4a-5b7a-a040-7012789ad20f
logstore: function-log
role: acs:ram::1621341641365186:role/AliyunFcDefaultRole
internetAccess: true
name: test1002
function:
customRuntimeConfig:
command:
- bash
args:
- '-c'
- 'chmod 777 /code/start.sh && /code/start.sh'
handler: index.handler
instanceType: e1
runtime: custom
timeout: 5
instanceConcurrency: 20
memorySize: 512
caPort: 9000
environmentVariables: {}
internetAccess: true
name: func-3i3c0f95
asyncConfiguration: {}
codeUri: ./test1002/func-3i3c0f95
triggers:
- name: defaultTrigger
description: ''
type: http
qualifier: LATEST
config:
methods:
- GET
- POST
- PUT
- DELETE
authType: anonymous
codeUri: ./test1002/func-3i3c0f95这个指定的是我的项目代码的位置,会把这个目录下面的代码拷贝到 debain系统的 /code目录下面。
customRuntimeConfig:
command:
- bash
args:
- '-c'
- 'chmod 777 /code/start.sh && /code/start.sh'
#!/usr/bin/env bash
cd /code/tp5/public
php -S 0.0.0.0:9000 router.php
这里我觉得我还是要说下这个启动脚本,先 cd 到 public 目录,ThinkPHP 5 的入口在 public下面这个和项目框架有关系。然后就是这个启动脚本,上面这是ThinkPHP 5 特有的写法。
其他项就不详细说了,大概看看应该能看懂。
使用客户端工具发布
绑定自己的域名
https://fcnext.console.aliyun.com/cn-hangzhou/domains/create
谈下自己的感受