如何在阿里云函数计算中的ServerLess部署WordPress

ServerLess在阿里云上是函数计算(FunctionCompute)是一个事件驱动的全托管计算服务。具有维护成本低,可用性高,按需付费等特点。

我们来介绍如何在阿里云的ServerLess产品中部署WordPress。博客这种计算量小的场景是比较适合放在ServerLess中的,当然WordPress的插件库又很丰富,如果用了不同的插件以实现不同的场景功能,那么适不适合放还得评估一下。


函数计算代替了像Apache、Nginx之类的传统Web服务软件本身,用户函数代替了Web服务软件的.conf配置文件,NAS则作为存储文件并提供写入。


需要准备的产品

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

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

3、 云数据库RDS

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

每个产品都开设在同一个地域同一个VPC下,方便内网联通。

具体步骤

一、配置NAS

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

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


3、存储类型建议用SSD性能型,因为NAS的读写性能比云盘低的,NAS在同一地域内互通,可选同一地域的任意可用区


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


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

二、配置函数计算

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

2、创建新的函数服务,注意选择和NAS同一个地域


3、开启高级配置,开通公网访问


4、需要配置专有网络,方便整合其他云产品。


5、配置NAS的用户(uid)和用户组(gid),选择之前创建过的NAS挂载点,本地目录选择挂载在/mnt/www


6、日志配置,选择空白项目和空白仓库好了,日志服务是有一定免费的额度的。

三、相关服务间的授权

1、相关服务间的调用需要进行授权

选择新建角色,在系统模板授权中勾选服务所需要的系统授权,然后如图中搜索AliyunECSNetworkInterfaceManagementAccess权限,并选择。


2、然后会跳转到角色快捷创建的页面,同意授权即可。


3、返回后即授权成功。


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

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

意思就是说目前函数计算只支持创建在的专有网络虚拟交换机。 在专有网络哪里创建一个allowedzones:xxxxx可用区的虚拟交换器然后重新创建函数计算即可。



四、运行函数的编写设置

1、新建函数


2、创建一个空白函数


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


4、运行环境选择php7.2,


5、代码配置这块,选择在线编辑,贴入下面代码即可。

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"; // 此处填写你的域名

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

6、授权一开始我们就创建过,可以直接下一步,也可修改。


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


8、配置自定义域名


9、然后点击创建域名

10、填写域名名称。然后路由设置中,路径填写:/*,函数选择之前创建的触发器的函数。

11、会提示你下面的:

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并配置

1、上传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


2、访问绑定的域名,这里是:http://pressless.mf8.biz


3、这里是通过ECS自建的MySQL数据库,开通和配置好ECS的安全组后可以通过内网地址连接的。如果是通过云数据库RDS的话,那么需要添加 白名单0.0.0.0/0。


六、安装和升级

1、安装WP插件或升级WP了需要填写FTP的话,就会要求之前我们创建函数服务的时候有填写过uid和gid。

在ECS中进行操作。

chown -R 10005:10005 /mnt/*

之前设置过的uid和gid是10005,所以这里写的是10005,NAS挂载在/mnt目录下,所以是/mnt/

总结

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

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

猜你喜欢

微信QQ空间QQ好友新浪微博联系客服