序言
ServerLess经过几年的发展,已经和传统服务器一样好用了。我最初接触ServerLess是在2020年的云开发校园合伙人创造营上,当时我基于阿里云云开发平台部署了一个在线工具箱。
“ServerLess发展简史”
网站背后的运行技术服务的发展就像人类的进化:物理服务器时代——云计算时代——无服务器化时代,但是有些老系统不能直接部署到ServerLess,必须进行一定的拆解,这无形之中增加了一道门槛。
本文我将介绍如何基于阿里云Severless函数计算搭建按量付费的WordPress网站。
简介
通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码。更棒的是,您只需要为代码实际运行消耗的资源付费 - 代码未运行则不产生费用。
下表是传统方式搭建服务和 ServerLess 的对比:
项目开发效率 | 传统方式搭建服务 | 函数计算方式 |
采购服务器等基础设施 | 需要 | 不需要 |
管理服务器等基础设施 | 需要 | 不需要 |
开发业务服务模块 | 需要 | 需要 |
部署业务服务模块 | 需要 | 需要,但是很简单,提供了很多工具 |
通过 nginx 搭建反向代理、https 和负载均衡 | 需要 | 不需要,通过阿里云 API 网关或函数 HTTP 触发器可以实现 |
搭建相关日志服务 | 需要 | 不需要,通过日志开关开启日志服务 |
配置安全访问规则 | 需要 | 不需要,自带基础安全访问配置,API 网关提供更多的配置 |
运维负担 | 重 | 轻 |
开发效率 | 低 | 高,通常几天就能完成 |
Serverless | 传统方式搭建服务 | |
维护成本 | 维护成本低,无需管理服务器等基础设施,只需编写代码并上传,程序员从底层设备维护中解放出来,只考虑实际业务逻辑即可。 | 维护成本高,自行维护服务器,需要处理服务器宕机、服务器扩容等一系列底层琐碎的事情 |
可用性 | 可用性高,函数计算为用户准备弹性、可靠的计算资源,具有根据流量自动scale特性,对有明显波峰波谷的运用效果奇佳 | 服务器故障会对应用服务产生严重影响 |
费用 | 按需付费,只为实际使用的计算资源付费,代码未运行则不产生费用 | 需要支付服务器的费用,代码运行与否都要收费 |
准备
1.函数计算FC,可按量付费,有免费额度
2.文件储存NAS,可按量付费
3.云数据库RDS版
4.日志服务SLS
在进行本文的操作前,需要先开通上述四项服务,并开通在同一地域的同一VPC下。
流程
NAS
1.访问阿里云NAS控制台:https://nasnext.console.aliyun.com/overview
2.创建通用型NAS文件系统。在这里我选择华东1(杭州)地域。
3.系统已经自动创建了挂载点,所以我们无需再进行创建挂载点的操作。
FC
1.访问阿里云函数计算控制台:https://fcnext.console.aliyun.com/overview
2.在“概览”中进入刚才创建NAS服务时选择的地域。
3.创建服务。需要选择允许访问VPC并且允许访问公网,选择好刚才创建NAS服务时使用的VPC和交换机,如果没有安全组,则需要新建安全组。
服务角色按默认选择。
4.在函数的“服务详情”页面,找到“储存配置”选项,点击编辑。
5.启用NAS,并选择自动配置。
6.回到函数管理界面,创建新函数,选择创建一个空白函数。
运行环境选择php7.2,并勾选“处理http请求”。
配置触发器,请求方式全部勾选,最后点击创建。
7.进入函数详情页面,编辑默认提供的代码为下面的这段代码。
getAttribute("requestURI");
$uriArr = explode("?", $uri); // default php / or /wp-admin/
if (preg_match('#/$#', $uriArr[0]) && !(strpos($uri, '.php')))
{
$uriArr[0] .= "index.php";
$uri = implode($uriArr);
}
$proxy = $GLOBALS['fcPhpCgiProxy'];
$root_dir = '/mnt/www'; //php script
if (preg_match('#\.php.*#', $uri))
{
$host = "www.stgit.cn"; // 此处填写你的域名
$resp = $proxy->requestPhpCgi($request, $root_dir, "index.php",
['HTTP_HOST' => $host, 'SERVER_NAME' => $host, 'SERVER_PORT' => '80'],
['debug_show_cgi_params' => false, 'readWriteTimeout' => 60000]
);
return $resp;
}
else { // static files, js, css, jpg ...
$filename = $root_dir . explode("?", $uri)[0];
$filename = rawurldecode($filename);
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename)); fclose($handle);
$headers = [
'Content-Type' => $proxy->getMimeType($filename),
'Cache-Control' => "max-age=8640000",
'Accept-Ranges' => 'bytes',
];
return new Response(200, $headers, $contents);
}
}
8.之后回到函数计算控制台,在高级功能—域名管理中配置自定义域名。
域名填写已经接入阿里云备案的域名,路由配置选择刚才的服务名称和函数名称,点击创建。
需要把域名解析到提供的内网chame。
9.上传wordpress程序
为了简便操作,本文通过开一台按量付费的ECS挂载NAS然后通过SFTP进行可视化操作来上传程序。
可通过类似下面的命令将NAS通过NFS的方式挂载至目录下。
mount -t nfs -o vers=4.0 16d3e4b609-cub21.cn-hangzhou.nas.aliyuncs.com:/ /mnt
10.访问我们绑定的域名。
至此部署完成。