【云计算的1024种玩法】一小时用阿里云函数计算部署一个 ServerLess 化的按量版 WordPress

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 在像阿里云ECS这种 IaaS 类的产品大伙前,有一种 PaaS 模式的云产品是非常火的,也就是各种 APP Engine,比如说最早做的谷歌GAE、新浪SAE,以及后期涌现的阿里云ACE和百度云BAE,但是现在来看我们都知道其结果,他们都已经不存在了,尽管在当时看来 App Engine 是对虚拟主机和物理服务器的一场革新,但是过分超前的理念和不切实际的体验葬送了各类 AE。

前面有大段函数计算的概念介绍,为了避免看概念介绍占用我这个一小时,所以大家可以看后面的教程内容,操作完了再来回顾这里的内容。

前言

在像阿里云ECS这种 IaaS 类的产品大火前,有一种 PaaS 模式的云产品是非常火的,也就是各种 APP Engine,比如说最早做的谷歌GAE、新浪SAE,以及后期涌现的阿里云ACE和百度云BAE,但是现在来看我们都知道其结果,他们都已经不存在了,尽管在当时看来 App Engine 是对虚拟主机和物理服务器的一场革新,但是过分超前的理念和不切实际的体验葬送了各类 AE。

所以云计算的普及也是渐进式的,不是一蹴而就的,大家传统服务器用的好好就要一下次大跨步的使用 PaaS 类 SaaS 类服务。

ServerLess (无服务器化)是最近很火的一个概念,让我想起了曾经的 APP Engine,但是随着 ServerLess 的不断发展其实我们可以发现,ServerLess 已经变得和传统服务器一样好用了,受到的限制也随着版本的迭代服务的升级变得越来越少,就像阿里云的函数服务其实并没有太大的学习成本和变动。

image

上图是 ServerLess 发展的小简史,网站背后的运行技术服务的发展其实就像是我们对物质从分子到原子到电子、夸克的理解:

  1. 物理服务器时代,从大型机、小型机中脱离开来,1U、2U的服务器就可以支撑我们的服务,同时将服务器托管给IDC机构,不再考虑机房的建设维护问题,典型应用是 服务器租赁托管和虚拟主机。
  2. 虚拟化时代,我们使用 XEN、KVM等虚拟化技术,隔离了硬件以实现操作系统级别的隔离,让服务器的购买更加优惠同时粒度更细,我们以 CPU、内存计费并以月计费,不再考虑物理服务器采购和维护的问题,典型应用是 VPS。
  3. 云计算时代,我们使用云计算进一步地自动管理这些虚拟化的资源,更安全更便捷同时也更便宜,不仅仅可以将服务器拆的更细,也能将多台服务器整合成一台超性能服务器,同时计费粒度到了小时级别。 不仅仅是服务器,数据库、存储等等我们都不再考虑实施部署的问题,典型应用是各类云计算产品,特别是云数据库、云存储等。
  4. 容器化时代,我们使用 Docker、k8s 等容器技术,通过微服务的拆解将应用粒度变得更细腻,维护和实施变得更加方便。典型应用是各大企业开发能力、效率提升。

现在,我们有了 Serverless,一种粒度更细的形式出现了,我们以 计算 * 时间 的方式计费,同时又获得了将应用拆解的更加细腻的方式,让我们无需考虑任何后端的问题,随着请求的增长,ServerLess 会自动进行伸缩,而不像传统云服务一样要自行搭建负载均衡和配置可扩展的无状态环境,开发人员不用考虑服务器的安全问题,不用考虑Docker的部署问题,不用考虑 Runtime 调优、升级、安全等问题等等。

当然了,ServerLess 远不是那么简单的产品,我也只是浅浅的了解了一层。

介绍

ServerLess 在阿里云上是 函数计算(Function Compute)是一个事件驱动的全托管计算服务。这里是介绍:

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

如果要搜索一些 ServerLess 的中文教程,或者阿里云函数计算的相关教程,个人建议就用 函数计算 代替 ServerLess 来避免大量搜到其他比不要的 ServerLess 教程的噪音。

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

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

不足

当然了 ServerLess 是很诱人,但却不是万能的,有些场景还是不适合的。

  1. ServerLess 不仅仅是一门技术也是一种理念和微服务一样,很多老系统不能直接上 ServerLess,得相应的进行升级和拆解才能更好的适应 ServerLess,这是一个门槛。
  2. 同时 ServerLess 针对开发语言的可定制性和可开放性,ServerLess 会选择处于稳定版的语言且更新具有一定的滞后性,特别是 Node.JS 这样的版本更新帝,最新稳定版是10,但是提供的却是8。同时如果对语言有底层的修改而无法通过 Plugin 实现同样也无法适应相关场景。
  3. 不适合长时间的进行计算处理的场景,ServerLess 是产生计算后按时间计费的,适合那些触发类短时间计算的,如果有长时间进行计算的场景就不适合。

教程

本次教程,我们将介绍如何在阿里云的 ServerLess 产品中部署 WordPress。 因为在博客这种计算量小的场景也是比较适合放在 ServerLess 中的,不过因为 WordPress 的插件库又很丰富用了不同的插件完全可以实现不同的场景功能,所以到底适不适合放还得评估一下。

image

如上图所示,函数计算代替了像 Apache Httpd、Nginx 之类的传统 Web 服务软件本身,用户函数代替了Web 服务软件的 .conf 配置文件。 PHP Runtime 代替 PHP 这个就很好理解了。然后 NAS 则作为存储文件并提供写入的地方,不然像 APP Engine 一样无法进行写入操作就很难操作了。

准备

一、 函数计算FaaS,可按量付费,有免费额度

二、 文件存储NAS,可按量付费

三、 云数据库RDS

四、 日志服务LOG(可选),可按量付费,有免费额度

每个产品都开设在同一个地域同一个 VPC 下。

动手吧

NAS

因为文件托管需要依赖 NAS,所以得开通 NAS。

一、进入 NAS 控制台 https://nas.console.aliyun.com/

二、 选择好地域后,创建文件系统

image

三、存储类型建议还是用 SSD性能型,因为 NAS 的读写性能相比云盘还是有些低的,NAS 只要地域对任何可用区都可以挂载使用。

image

四、创建完之后 添加挂载点

image

五、选择专有网络,选择好对应的VPC网络和交换机,权限组选择 全部允许

image

函数计算

一、进入函数计算控制台 https://fc.console.aliyun.com

二、选择地域后创建新的函数服务

image

三、开启高级配置,开通公网访问,不然网站都打不开:

image

四、需要配置专有网络,在专有网络下才能更安全的使用函数计算并整合其他云产品。

image

五、配置NAS的用户(uid)和用户组(gid),例如我填的是 10005,这个用在到时候 chown 给予权限上,然后选择之前创建过的 NAS挂载点,本地目录选择挂载在 /mnt/www

image

六、日志配置建议就只是选择空白项目和空白仓库好了,日志服务是有一定免费的额度的。 当然不开也不影响服务运行。

image

七、相关服务间的调用需要进行授权,所以我们可以选择 新建角色 ,在系统模板授权中勾选服务所需要的系统授权,然后如图中搜索 AliyunECSNetworkInterfaceManagementAccess 权限,并选择。

image

八、然后会跳转到 角色快捷创建 的页面,也不用管太多,直接 同意授权 即可。

image

九、返回后就是授权成功了。

image

十、点击创建即可,成功了就直接成功了,如果返回说:

VSwitch 'vsw-2zenbov6s8r8kwad6c0bd' is in unsupported zone 'cn-beijing-e' (allowed zones: cn-beijing-c)

意思就是说目前函数计算只支持创建在 cn-beijing-c 的专有网络·虚拟交换机。 不同的地域具体支持的可用区可能不同。 在专有网络哪里创建一个 allowed zones: xxxxx 可用区的虚拟交换器然后重新创建函数计算即可。

十一、然后新建函数

image

十二、选择创建一个空白函数

image

十三、选择创建 HTTP 触发器,认证方式选择 anoymous,请求方式全部勾选

image

十四、运行环境选择 PHP 7.2,不然怎么跑 WordPress

image

十五、代码配置这块,选择 在线编辑,贴入下面我提供的代码即可。

image

<?php
use RingCentral\Psr7\Response;

function endsWith($haystack, $needle) {
    $length = strlen($needle);

    return $length === 0 ||
        (substr($haystack, -$length) === $needle);
}

function handler($request, $context): Response{
    $uri    = $request->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   = "pressless.mf8.biz"; // 此处填写你的域名
        $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);
    }
}

注意:

第25行需要修改为你自己的域名

$host   = "pressless.mf8.biz"; // 此处填写你的域名

其他的环境配置,比如说内存大小、超时秒数都可以自行设置。

十六、授权这块因为一开始我们就创建过,所以可以直接下一步,如果应用比较复杂那么就再修改一下。

image

十七、在触发器中点击之前创建好的 wp-func 触发器

image

十八、可以看到这边又配置自定义域名的位置

image

十九、然后点击创建域名

image

二十、填写域名名称就是域名这个没毛病。 然后路由设置中,路径填写:/*,然后函数就选择之前创建的触发器的函数。

image

二十一、然后会提示你下面的:

domain name 'pressless.mf8.biz' has not been resolved to your FC endpoint, the expected endpoint is '1572623648803837.cn-beijing.fc.aliyuncs.com.'

意思就是咱们得先把域名解析到提示的:1572623648803837.cn-beijing.fc.aliyuncs.com 上才行。

那我就把我要绑定的 pressless.mf8.biz域名CNAME解析到 1572623648803837.cn-beijing.fc.aliyuncs.com上就行。

二十二、接下来就是上传WordPress程序了,这时候需要就需要继续用到 NAS 了。鉴于新建一个转移函数迁移压缩包内容到NAS很多人不太会,所以我更建议开一台按量的 ECS 挂载NAS然后通过SFTP进行可视化操作。 当然还可以拿这台 ECS 来做数据库服务器在前期可以降低购买云数据库的成本。

例如我通过下面的命令将 NAS 通过 NFS 的方式挂载至 /mnt 目录下:

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

image

二十三、访问我们绑定的域名,例如我是:http://pressless.mf8.biz

image

二十四、那我这里就通过 ECS 自建的 MySQL 数据库,然后内网地址连接是可以进行正常连接和安装的。 如果是通过云数据库的话,那么需要在白名单哪里添加 0.0.0.0/0,同样的ECS自建也要保证专有网络内网内可以被访问。

image

二十五、如果我们安装WP插件和升级WP遇到了需要填写FTP的要求的话,我们别忘了之前我们创建函数服务的时候有填写过 uid 和 gid。

image

那我们还得在 ECS 中进行操作。

chown -R 10005:10005 /mnt/*

因为我之前设置过的 uid 和 gid 是 10005,所以这里写的是 10005,大家可以自己顶一,然后NAS挂载在 /mnt 目录下,所以是 /mnt/*

总结

就这样我们完成了一个 WordPress 的 ServerLess 化,因为大家都是第一次接触所以教程写的很细步骤很多,自己踩的坑都写了一遍。

WordPress 的 ServerLess 化下一步应该是进行前后端分离通过 API 通信来减少动态请求减少函数的计算。

然后现在函数计算还不支持 Rewrite(伪静态),不过相关技术应该是可行的,大家可以给我的这条聆听点个赞:【功能建议】函数计算ServerLess添加对Rewrite(伪静态)的支持

再然后其实函数计算还需要一款按量计费的ServerLess化的关系型数据库,因为 TableStore 是支持按量的 NoSQL,同样这是聆听建议的链接:【功能建议】数据库体系中还需要一款能按量使用的关系型数据库,可以是 POLARDB ServerLess

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
6月前
|
人工智能 运维 安全
函数计算支持热门 MCP Server 一键部署
云上托管 MCP 搭建 AI Agent 将成为趋势。函数计算 FC 目前已经支持开源 MCP Server 一键托管,欢迎体验。
1051 114
|
6月前
|
Serverless Python
借助 serverless 将 MCP 服务部署到云端
本文介绍了如何将 MCP 服务通过 SSE 协议部署到云端,避免本地下载和启动的麻烦。首先,使用 Python 实现了一个基于 FastMCP 的网络搜索工具,并通过设置 `transport='sse'` 启用 SSE 协议。接着,编写客户端代码测试服务功能,确保其正常运行。随后,利用阿里云函数计算服务(FC 3.0)以 Serverless 方式部署该服务,包括创建函数、配置环境变量、添加依赖层以及部署代码。最后,提供了客户端测试方法和日志排查技巧,并展示了如何在不同工具(如 Cherry-Studio、Cline 和 Cursor)中配置云端 MCP 服务。
1088 10
借助 serverless 将 MCP 服务部署到云端
|
5月前
|
安全 搜索推荐 Serverless
HarmonyOS5云服务技术分享--Serverless抽奖模板部署
本文详细介绍了如何使用华为HarmonyOS的Serverless模板快速搭建抽奖活动,手把手教你完成从前期准备到部署上线的全流程。内容涵盖账号注册、云函数配置、参数调整、托管上线及个性化定制等关键步骤,并附带常见问题解答和避坑指南。即使是零基础用户,也能轻松上手,快速实现抽奖活动的开发与部署。适合希望高效构建互动应用的开发者参考学习。
|
6月前
|
缓存 安全 应用服务中间件
宝塔部署 WordPress 太繁琐 那就用 Websoft9 一键部署 WordPress
随着 WordPress 成为最受欢迎的建站平台之一,传统通过宝塔面板部署的方式因步骤繁琐、手动干预多而显得效率低下。本文介绍 Websoft9 一键部署方案,利用容器化技术快速搭建 WordPress,内置 Nginx、PHP-FPM、MariaDB 和 Redis,集成安全组件如 ModSecurity-WAF 和 Fail2ban,支持自动 SSL 和性能优化功能。相比宝塔面板,Websoft9 提供更简便、稳定且安全的部署体验,适合希望高效上线 WordPress 的用户。
|
11天前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
200 12
|
6月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
553 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
218 0
|
6天前
|
人工智能 运维 安全
聚焦 AI 应用基础设施,云栖大会 Serverless AI 全回顾
2025 年 9 月 26 日,为期三天的云栖大会在杭州云栖小镇圆满闭幕。随着大模型技术的飞速发展,我们正从云原生时代迈向一个全新的 AI 原生应用时代。为了解决企业在 AI 应用落地中面临的高成本、高复杂度和高风险等核心挑战,阿里云基于函数计算 FC 发布一系列重磅服务。本文将对云栖大会期间 Serverless+AI 基础设施相关内容进行全面总结。
|
6月前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
522 30
|
17天前
|
人工智能 Kubernetes 安全
重塑云上 AI 应用“运行时”,函数计算进化之路
回顾历史,电网的修建,深刻地改变了世界的经济地理和创新格局。今天,一个 AI 原生的云端运行时的进化,其意义也远不止于技术本身。这是一次设计哲学的升华:从“让应用适应平台”到“让平台主动理解和适应智能应用”的转变。当一个强大、易用、经济且安全的 AI 运行时成为像水电一样的基础设施时,它将极大地降低创新的门槛。一个独立的开发者、一个小型创业团队,将有能力去创造和部署世界级的 AI 应用。这才是技术平权的真谛,是激发全社会创新潜能的关键。

相关产品

  • 函数计算