本文旨在经过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展现 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS, 一键部署等能力, 展示函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。php
相关参考文档: https://yq.aliyun.com/articles/640912html
DEMO 示例效果入口: http://hz.mofangdegisn.cnjava
开通服务node
免费开通函数计算, 按量付费,函数计算有很大的免费额度。python
免费开通文件存储服务NAS, 按量付费mysql
如上图所示, 当多个用户经过对外提供的 url 访问web服务的时候时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行状况。linux
ITEM | 成本 | 稳定性 |
---|---|---|
基于 VM 方案 | 使用 ecs.t5-lc1m1.small, 22.8元/月 | 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机自己性能弱 |
轻量应用服务器 | 60元/月(1vCPU 1GB 1Mbps 20GB[ssd]) | 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机自己性能弱 |
函数计算 | sqlite3 版本约为 1元/月 mysql 版本大约 26元/月 | 高 |
函数计算完整费用详情:nginx
如上所述, 在低成本网站领域, 函数计算具备十分明显的成本优点,同时还保持了弹性能力,之后业务规模作大之后并无技术切换成本(可能须要作的只是更换一个更强的关系型数据库), 同时财务成本增加配合预付费也能保持平滑。低成本网站变成高可用高性能网站如丝般顺滑, 高性能网站详情能够参考文末 FAQ 中的 Q1 问题。github
在具体操做部署以前, 先简单梳理一遍 函数计算运行 PHP 框架原理
从上面原理示意图咱们能够看出,Web 服务器根据 conf 中 location将 PHP 脚本交给 php-fpm 去解析,而后将解析后的结果返回给 client 端
/mnt/auto
目录其中函数计算为用户提供了一个 $GLOBALS['fcPhpCgiProxy']
对象用来和 php-fpm 进行交互,对 PHP 工程中的 php 文件进行解析,该对象提供了两个重要的接口:
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](https://en.wikipedia.org/wiki/Common_Gateway_Interface)) - `$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
git clone https://github.com/awesome-fc/fc-wordpress.git
若是使用 mysql 数据库, 参考章节 3.3.1
若是使用 sqlite3 数据库, 参考章节 3.3.2
fun nas init fun 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
fun nas sync fun 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
fun nas init fun 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 数据库
php -S 0.0.0.0:80
127.0.0.1 hz.mofangdegisn.cn
- linux/mac : vim /etc/hosts
- windows7: C:WindowsSystem32driversetc
其中 hz.mofangdegisn.cn 是您预先准备的域名
成功安装之后, 这个时候, .fun/nas/auto-default/fc-wp-sqlite/wordpress/wp-content 下面应该有一个 database 的目录, ls -a 查看, 应该有 .ht.sqlite 这个 sqlite3 数据库文件
注: 中间修改 host 的目的是初始化 sqlite3 数据库的时候, base site url 是提早准备的域名, 而不是 127.0.0.1
fun nas sync fun 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
接下来将函数部署到云平台:
fun deploy
登陆控制台 https://fc.console.aliyun.com,能够看到service 和 函数已经建立成功, 而且 service 也已经正确配置。
经过浏览器打开本身以前配置的域名, 好比本例中的 hz.mofangdegisn.cn
A: 能够, 使用函数计算的单实例多并发功能和高性能数据库
有必要再加上这些优化:
目前 PHP Runtime 并不支持单实例多并发, 使用 Custom Runtime,能够将基于传统模式 nginx + php-fpm + mysql 开发的网站直接简单无缝迁移到函数计算平台,示例工程 customruntime-php
使用OSS对Wordpress进行图片动静分离
A: 用一个 timer trigger 的函数 keep warm
A: 由 sqlite3 数据库性能决定, 这边有一些压测结果:
每次压力增大时候, 都有些冷启动,时间慢点,可是支持从压测结果来看支持 50 QPS 是没有疑问的, 是足够支持一些中小网站的。
A: 能够, 好比 python: https://yq.aliyun.com/articles/603249 , 或者直接使用 custom runtime, 内置了 java、python 和 node, Custom Runtime 用户手册 , Custom Runtime 使用集锦
“ 阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,作最懂云原生开发者的技术圈。”