基于阿里云Severless函数计算搭建按量付费的WordPress网站

383 阅读4分钟

序言

ServerLess经过几年的发展,已经和传统服务器一样好用了。我最初接触ServerLess是在2020年的云开发校园合伙人创造营上,当时我基于阿里云云开发平台部署了一个在线工具箱。

image

“ServerLess发展简史”

网站背后的运行技术服务的发展就像人类的进化:物理服务器时代——云计算时代——无服务器化时代,但是有些老系统不能直接部署到ServerLess,必须进行一定的拆解,这无形之中增加了一道门槛。

本文我将介绍如何基于阿里云Severless函数计算搭建按量付费的WordPress网站。

简介

通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码。更棒的是,您只需要为代码实际运行消耗的资源付费 - 代码未运行则不产生费用。

下表是传统方式搭建服务和 ServerLess 的对比:

项目开发效率传统方式搭建服务函数计算方式
采购服务器等基础设施需要不需要
管理服务器等基础设施需要不需要
开发业务服务模块需要需要
部署业务服务模块需要需要,但是很简单,提供了很多工具
通过 nginx 搭建反向代理、https 和负载均衡需要不需要,通过阿里云 API 网关或函数 HTTP 触发器可以实现
搭建相关日志服务需要不需要,通过日志开关开启日志服务
配置安全访问规则需要不需要,自带基础安全访问配置,API 网关提供更多的配置
运维负担
开发效率高,通常几天就能完成
Serverless传统方式搭建服务
维护成本维护成本低,无需管理服务器等基础设施,只需编写代码并上传,程序员从底层设备维护中解放出来,只考虑实际业务逻辑即可。维护成本高,自行维护服务器,需要处理服务器宕机、服务器扩容等一系列底层琐碎的事情
可用性可用性高,函数计算为用户准备弹性、可靠的计算资源,具有根据流量自动scale特性,对有明显波峰波谷的运用效果奇佳服务器故障会对应用服务产生严重影响
费用按需付费,只为实际使用的计算资源付费,代码未运行则不产生费用需要支付服务器的费用,代码运行与否都要收费

\

准备

1.函数计算FC,可按量付费,有免费额度

2.文件储存NAS,可按量付费

3.云数据库RDS版

4.日志服务SLS

在进行本文的操作前,需要先开通上述四项服务,并开通在同一地域的同一VPC下。

流程

NAS

1.访问阿里云NAS控制台:nasnext.console.aliyun.com/overview

2.创建通用型NAS文件系统。在这里我选择华东1(杭州)地域。

image.png

3.系统已经自动创建了挂载点,所以我们无需再进行创建挂载点的操作。

image.png

FC

1.访问阿里云函数计算控制台:fcnext.console.aliyun.com/overview

2.在“概览”中进入刚才创建NAS服务时选择的地域。

image.png

3.创建服务。需要选择允许访问VPC并且允许访问公网,选择好刚才创建NAS服务时使用的VPC和交换机,如果没有安全组,则需要新建安全组。

image.png

image.png

服务角色按默认选择。

image.png

4.在函数的“服务详情”页面,找到“储存配置”选项,点击编辑。

image.png

5.启用NAS,并选择自动配置。

image.png

6.回到函数管理界面,创建新函数,选择创建一个空白函数。

image.png

运行环境选择php7.2,并勾选“处理http请求”。

image.png

配置触发器,请求方式全部勾选,最后点击创建。

image.png

7.进入函数详情页面,编辑默认提供的代码为下面的这段代码。

image.png

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.之后回到函数计算控制台,在高级功能—域名管理中配置自定义域名。

image.png

域名填写已经接入阿里云备案的域名,路由配置选择刚才的服务名称和函数名称,点击创建。

需要把域名解析到提供的内网chame。

\

9.上传wordpress程序

为了简便操作,本文通过开一台按量付费的ECS挂载NAS然后通过SFTP进行可视化操作来上传程序。

可通过类似下面的命令将NAS通过NFS的方式挂载至目录下。

mount -t nfs -o vers=4.0 16d3e4b609-cub21.cn-hangzhou.nas.aliyuncs.com:/ /mnt

image.png

\

10.访问我们绑定的域名。

image.png

至此部署完成。