写点什么

一元建站:基于函数计算 + Wordpress 构建 Serverless 网站

  • 2020-01-26
  • 本文字数:3800 字

    阅读完需:约 12 分钟

一元建站:基于函数计算 + Wordpress 构建 Serverless 网站

前言

本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS, 一键部署等能力, 展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。


相关参考文档: https://yq.aliyun.com/articles/640912

1.1 DEMO 概述


开通服务


免费开通函数计算, 按量付费,函数计算有很大的免费额度。


免费开通文件存储服务NAS, 按量付费

1.2 解决方案


如上图所示, 当多个用户通过对外提供的 url 访问 web 服务的时候时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。

1.3 Serverless 方案与传统自建 web 方案对比

ITEM成本稳定性
基于 VM 方案使用 ecs.t5-lc1m1.small, 22.8元/月服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱
轻量应用服务器60元/月(1vCPU 1GB 1Mbps 20GB[ssd])服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱
函数计算sqlite3 版本约为 1元/月 mysql 版本大约 26元/月


函数计算完整费用详情:


  • 每月前 100 万次函数调用免费, 每月前 400000(GB*秒) 费用免费, 函数的内存可以设置为 128M 或者 256M, 因此对于一个一个月访问量低于 100 万次的网站, 该项是免费的

  • 对于低成本的网站, 假设一个月的产生的公网流量为 1GB, 0.8 元

  • NAS, US$0.06/GB/Month, 网站大小为 50M, 即使按 1G 计算, 0.42 元

  • RDS mysql 最基本的单机版本, 25 元/月


函数计算计费 | NAS 定价


如上所述, 在低成本网站领域, 函数计算具有十分明显的成本优势,同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本(可能需要做的只是更换一个更强的关系型数据库), 同时财务成本增长配合预付费也能保持平滑。低成本网站变成高可用高性能网站如丝般顺滑, 高性能网站详情可以参考文末 FAQ 中的 Q1 问题。

函数计算运行 PHP 框架原理

在具体操作部署之前, 先简单梳理一遍 函数计算运行 PHP 框架原理

2.1 传统服务器 PHP 运行原理

  • 原理示意图



  • A simple nginx conf



从上面原理示意图我们可以看出,Web 服务器根据 conf 中 location 将 PHP 脚本交给 php-fpm 去解析,然后将解析后的结果返回给 client 端

2.2 FC 驱动 PHP 工程原理


  • 函数计算的执行环境实例相当于传统 web 服务的 Apache/Nginx

  • 用户函数相当于实现 Apache/Nginx 的 conf 中 location

  • 用户将 Web 网站部署在 NAS,然后挂载 NAS 到函数的执行环境, 比如下面代码中 /mnt/auto 目录

  • 对于 WordPress 入口函数代码就是这么简单: index.php


其中函数计算为用户提供了一个 $GLOBALS['fcPhpCgiProxy'] 对象用来和 php-fpm 进行交互,对


PHP 工程中的 php 文件进行解析,该对象提供了两个重要的接口:


  • requestPhpCgi


  requestPhpCgi($request, $docRoot, $phpFile = "index.php", $fastCgiParams = [], $options = [])
复制代码


$request: 跟 php http invoke 入口的参数一致


$docRoot: Web 工程的根目录


$phpFile: 用于拼接 cgi 参数中的 SCRIPT_FILENAME 的默认参数


$fastCgiParams: 函数计算内部尽量根据 $request 给您构造 default cgi params, 但是如果您不是想要的,可以使用$fastCgiParams覆盖一些参数 (reference: cgi)


$options: array 类型,可选参数, debug_show_cgi_params 设为 true ,会打印每次请求 php 解析时候的 cgi 参数, 默认为 false ;readWriteTimeout 设置解析的时间, 默认为 5 秒


如果您有兴趣, 可以了解下函数计算 PHP Runtime:


案例操作步骤

准备条件

免费开通函数计算, 按量付费,函数计算有很大的免费额度。


免费开通文件存储服务NAS, 按量付费


有一个域名, 比如 abc.com, 并将域名 CNAME 解析到 函数计算(FC) 对应的 region


如您想在杭州的 region 部署 wordpres 网站, 则将 abc.com CNAME 解析到 12345.cn-hangzhou.fc.aliyuncs.com, 其中 12345 是您的 accountId

3.1 安装最新的 Fun 工具

  • 安装版本为 8.x 最新版或者 10.x 、12.x nodejs

  • 安装 funcraf

3.2 Clone 工程

git clone https://github.com/awesome-fc/fc-wordpress.git

3.3 根据需要使用的数据库进入不同的目录

  • 复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息


如果使用 mysql 数据库, 参考章节 3.3.1

如果使用 sqlite3 数据库, 参考章节 3.3.2

3.3.1 使用 mysql 数据库

  • 进入 目录 fc-wp-mysql


fun nas initfun nas info
复制代码


fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的 nas)或创建一个同 region 可用的 nas

如果你没有修改 templata.yml 中的配置 service 名字, 那么则可以进入下一步; 如果有修改, 会在当前目录生成新的目录 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目录), 将默认目录下的 .fun/nas/auto-default/fc-wp-mysql/wordpress 的 wordpress 目录拷贝到 .fun/nas/auto-default/{serviceName} 下, 同时可以删除目录 .fun/nas/auto-default/fc-wp-mysql/wordpress


  • 上传 wordpress 网站到 NAS


fun nas syncfun nas ls nas:///mnt/auto/
复制代码


fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/fc-wp-mysql)上传到 NAS 中的 fc-wp-mysql 目录

fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS

3.3.2 使用 sqlite3 数据库

  • 进入 目录 fc-wp-sqlite


fun nas initfun nas info
复制代码


fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的 nas)或创建一个同 region 可用的 nas

如果你没有修改 templata.yml 中的配置 service 名字, 那么则可以进入下一步; 如果有修改, 会在当前目录生成新的目录 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目录), 将默认目录下的 .fun/nas/auto-default/fc-wp-sqlite/wordpress 的 wordpress 目录拷贝到 .fun/nas/auto-default/{serviceName} 下, 同时可以删除目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress


  • 本地完成安装过程, 初始化 sqlite3 数据库


在目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress 中输入命令:


php -S 0.0.0.0:80
复制代码


修改 host 文件,添加 127.0.0.1 hz.mofangdegisn.cn


linux/mac : vim /etc/hosts

windows7: C:WindowsSystem32driversetc

其中 hz.mofangdegisn.cn 是您预先准备的域名


通过浏览器输入 hz.mofangdegisn.cn, 这个时候没有 mysql 数据库设置页面,完成 wordpress 安装过程


成功安装以后, 这个时候, .fun/nas/auto-default/fc-wp-sqlite/wordpress/wp-content 下面应该有一个 database 的目录, ls -a 查看, 应该有 .ht.sqlite 这个 sqlite3 数据库文件


  • 回退 host 文件的修改


注: 中间修改 host 的目的是初始化 sqlite3 数据库的时候, base site url 是提前准备的域名, 而不是 127.0.0.1


  • 上传 wordpress 网站到 NAS


fun nas syncfun nas ls nas:///mnt/auto/
复制代码


fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/fc-wp-sqlite)上传到 NAS 中的 fc-wp-sqlite 目录

fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS

3.4 部署函数到 FC 平台

接下来将函数部署到云平台:


  • 修改 index.php 中的 $host 中的值

  • 修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可

  • 修改 template.yml 自定义域名为自己提前准备好的域名

  • 执行 fun deploy


登录控制台 https://fc.console.aliyun.com,可以看到 service 和 函数已经创建成功, 并且 service 也已经正确配置。


通过浏览器打开自己之前配置的域名, 比如本例中的 hz.mofangdegisn.cn


  • mysql 版本数据库, 可以直接跟传统的 wordpress 一样,直接进入安装过程

  • sqlite3 版本数据库, 由于之前已经完成初始化,可以直接进入网站首页或网站后台

FAQ

Q1: 函数计算能开发高性能高可用网站吗?

A: 可以, 使用函数计算的单实例多并发功能和高性能数据库



有必要再加上这些优化:



目前 PHP Runtime 并不支持单实例多并发, 使用 Custom Runtime,可以将基于传统模式 nginx + php-fpm + mysql 开发的网站直接简单无缝迁移到函数计算平台,示例工程 customruntime-php

使用OSS对Wordpress进行图片动静分离

Q2: 使用低成本 sqlite3 版本的网站, 冷启动第一次打开很慢怎么办?

A: 用一个 timer trigger 的函数 keep warm

Q3: 使用低成本 sqlite3 版本的网站, 能支持多大的 qps?

A: 由 sqlite3 数据库性能决定, 这边有一些压测结果:




每次压力增大时候, 都有些冷启动,时间慢点,但是支持从压测结果来看支持 50 QPS 是没有疑问的, 是足够支持一些中小网站的。

Q4: 使用其他语言基于函数计算开发 serverless 网站可以吗?

A: 可以, 比如 python: https://yq.aliyun.com/articles/603249 , 或者直接使用 custom runtime, 内置了 java、python 和 node, Custom Runtime 用户手册 , Custom Runtime 使用集锦


本文转载自云栖社区。


原文链接


https://yq.aliyun.com/articles/721594?spm=a2c4e.11153959.teamhomeleft.45.30442eb13e1ijw


2020-01-26 11:306234

评论

发布
暂无评论
发现更多内容

软件测试/测试开发丨函数式编程学习笔记

测试人

Python 程序员 软件测试 函数式

技术分享| 融合通讯的架构介绍

anyRTC开发者

音视频 MCU mesh SFU 融合通讯

语音房源码搭建技术分享之降噪功能详解

山东布谷科技

软件开发 源码搭建 语音房源码 语音房

对线面试官-Redis(五 为什么这么快为什么能抗住高并发)

派大星

Java 面试题

EMAS热修复Sophix适配App加固的技术方案

移动研发平台EMAS

阿里云EMAS 移动热修复 app热修复 app加固

可信数据库大会,不见不散!

KaiwuDB

KaiwuDB 2023可信数据库发展大会

ChatGPT越来越火,大厂体验设计师纷纷“毕业”?

博文视点Broadview

大模型加速学科升级,飞桨赋能北邮“X+大模型”特色小学期

飞桨PaddlePaddle

人工智能 百度 paddle 百度飞桨

浪潮信息直播高能预告!令人感兴趣的高性能架构、CXL技术、数据库等硬件相关技术分享来了 | 第 83-85 期

OpenAnolis小助手

开源 高性能架构 龙蜥大讲堂 RDMA 浪潮信息

Net DB Web多级缓存的实现

不在线第一只蜗牛

HTTP net web api

谁是家居智能化时代“头号玩家”? 小度全屋智能将登陆中国建博会

新消费日报

Spring容器获取Bean的9种方式 | 京东云技术团队

京东科技开发者

spring Spring Boot bean 企业号 7 月 PK 榜

ReentrantLock源码解析 | 京东云技术团队

京东科技开发者

线程 企业号 7 月 PK 榜 并发问题

分布式事务的几种实现方式 | 京东云技术团队

京东科技开发者

事务 分布式, 企业号 7 月 PK 榜

早8人的效率工具六件套

树上有只程序猿

扫光动效在移动端应用实践

百度Geek说

动效 移动端 企业号 7 月 PK 榜

如何用Java校验SQL语句的合法性?有这5种解决方案

高端章鱼哥

Java sql

inBuilder今日分享丨系统集成系列之异构接入

inBuilder低代码平台

集成

时序数据库 TDengine 与 DBeaver 达成合作,生态系统再壮大

爱倒腾的程序员

涛思数据 tdengine 时序数据库

为了娃的暑期课,老父亲竟然用上了阿里云高大上的 Serverless FaaS!!!

WuKongCoder

云计算 阿里云 Serverless

HarmonyOS极客松“上分秘籍”! 高手们顶峰相见!

HarmonyOS开发者

HarmonyOS

把LangChain跑起来的3个方法 | 京东云技术团队

京东科技开发者

人工智能 LLM langchain 企业号 7 月 PK 榜

腾讯云DSQL-C MYSQL 版本测评

查拉图斯特拉说

MySQL sql 腾讯云

如何自动化测试你的接口?—— Rest Assured

不在线第一只蜗牛

自动化 自动化测试 API

国内首批!腾讯云EdgeOne通过信通院边缘计算最新评估

Geek_2d6073

融云观察:社交大佬发家史,模仿才是终极成功学密码?

融云 RongCloud

微信 网络 通信 社交 场景

用ChatGPT搞定K8s!

互联网工科生

k8s kubernetes 运维 ChatGPT

软件DevOps云化发展的趋势 【课程限时免费】

华为云PaaS服务小智

云计算 DevOps 云原生 华为云 华为开发者大会2023

火山引擎 DataLeap 构建Data Catalog系统的实践(一):背景与调研思路

字节跳动数据平台

一元建站:基于函数计算 + Wordpress 构建 Serverless 网站_软件工程_阿里云容器平台_InfoQ精选文章