一元建站-基于函数计算 + wordpress 构建 serverless 网站

news/2024/5/9 9:17:09/文章来源:https://blog.csdn.net/weixin_44627014/article/details/103581289

前言

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

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

1.1 DEMO 概述

  • DEMO 示例效果入口: http://hz.mofangdegisn.cn
    • 账号: fc-test-user
    • 密码: fc-test-pwd
  • DEMO 示例工程地址: fc-wordpress

开通服务

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

免费开通文件存储服务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 运行原理

  • 原理示意图
    2.png_www.wityx.com

  • A simple nginx conf
    3.png_www.wityx.com

从上面原理示意图我们可以看出,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:

  • PHP 入口函数
  • PHP 执行环境

案例操作步骤

准备条件

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

免费开通文件存储服务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 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

  • 上传 wordpress 网站到 NAS
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

3.3.2 使用 sqlite3 数据库

  • 进入 目录 fc-wp-sqlite
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 数据库
    • 在目录 .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:\Windows\System32\drivers\etc

      其中 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 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

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: 可以, 使用函数计算的单实例多并发功能和高性能数据库

  • 单实例多并发
  • 选择高性能关系型数据库,比如高可用的云数据库POLARDB

有必要再加上这些优化:

  • 预留实例消除冷启动 + 预付费优化成本
  • 极速型 NAS
  • OSS 对象存储 + CDN 来存储和分发静态资源

目前 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 使用集锦

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_878473.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

link rel=alternate网站换肤功能最佳实现

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p8512 本文可全文转载,个人网站无需授权,只要保留原作者、出处以及文中链接即可,任何网站均可摘要聚合,商用请联系授权。 一、大多数开发人员的实现 大多数前端开发…

nodejs 网站架构

有兴趣的可以下载

_004_EclipseOperation_Eclipse将一段代码抽取封装

来自https://www.jb51.net/softjc/581893.html,感谢作者的无私分享。 1、使用Eclipse打开已有的项目代码或者新建一个测试项目代码。将需要抽取封装方法的代码块选中,右击选择Refactor,再选择Extract Method,快捷键(A…

_006_EclipseOperation_创建eclipse新的workspace并设置workspace共享配置

声明:该博文引自http://www.cnblogs.com/whycxb/p/4848695.html 一:创建新的workspace 1、File——Switch Workspace——Other 2、修改workspace路径和名称 3、修改后如下: 4、点击OK按钮后,eclipse自动重启 同时,相…

记一次小网站渗透过程

一、序言 记录某一次无意点开的一个小网站的渗透过程,幸运的是搭建平台是phpstudy,cms是beecms,beecms有通用漏洞,然后去网上找了资料,成功getshell并获取服务器权限。 二、渗透过程 无意点开一个网站,发…

_031_EclipseOperation_Eclipse修改导航栏的颜色

以上是个人随性配置,某些项的设置不懂,结果如下:

网站跨站点单点登录

昨天和几位朋友探讨到了这个话题,发现虽然单点登录,或者叫做独立的passport登录虽然已经有了很多实现方法,但是能真正了解并实现的人却并不太多,所以些下此文,希望从原理到实现,能让大家了解的多一些 至于什…

如何添加网站的浏览器 ico 图标

什么是网站 ICO 图标? 打开微软、百度等网站后看到浏览器的标题栏、地址栏,多浏览器的标签上都显示了一个小图标,如 ,这里说的就是这个东东。 如何制作 ICO 图标? 这里使用最简单的办法。因为 ico 格式图片比较特殊&a…

一键SSH宝塔/Shell原生安装LNMP(Centos7.5 + Nginx + MySQL +PHP)+thinkphp/Wordpress搭建网站(附源码)

可以使用宝塔工具搭建,也可以使用我下面的教程进行搭建。 一、宝塔工具搭建具体操作: ssh登录centos服务器,下载安装宝塔工具centos版本,一键安装LNMP环境。大概需要10-20分钟吧;安装完成后进入应用市场,选…

怎么做好企业网站关键词优化

一、关键词的选择 1、企业品牌词 品牌关键词非常重要,可以说如果不重视品牌词部署,会影响到网络营销效果。品牌关键词是一个网站的名称,具备唯一性,方便用户记忆。加上消费者对品牌的认知度是非常高,具备品牌的网站能…

【网站推荐】Event Registry‘s News

【网站推荐】Event Registrys News 公众号: ChallengeHub 1、简介 利用AI的力量将新闻内容转化为解释性的分析报告。Event Registry是世界领先的新闻情报平台,使组织能够跟踪世界事件并分析其影响。 Event Registrys News 官方网站:https:/…

在线教育专业建站工具 EduWind ,源码下载,源码分享网整理

在线教育专业建站工具 EduWind ,源码下载, Eduwind是由北京水木信步网络科技有限公司开发的网校服务,公司位于清华科技园。目前,EduWind的产品系列包括以下两大版本: EduWind网校开源软件; EduWind网校Saa…

web php+mysql 网站优化方向

1.PHPMySql的存储缺点 在大部分的PHP的网站开发当中,我们往往采用的数据存储方式是phpmysql,因此就会产生如下图所示的请求方式: 以上的架构对一般对于访问量不大的网站没有任何问题,例如:个人博客网站,小公司的企业网…

谷歌浏览器“无法添加来自此网站的应用、扩展程序和应用脚本”的最简单办法

网上其他的办法都试了 有点坑 最简单的解决办法就是打开开发者模式 关了再开,再拖入crx就好了 具体位置:选项——更多工具——拓展程序 或者直接在浏览器里输入chrome://extensions/

大型网站的可伸缩性架构如何设计?

1. 网站架构的伸缩性设计 1.1. 不同功能进行物理分离实现伸缩 纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性。 横向分离(业务分割后分离):将不同的业务模块分离…

千万级用户的大型网站,应该如何设计其高并发架构?

目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用分布式缓存抗下读…

react+redux+ant+axios+iframe实现网站门户

一个框架壳子,技术栈reactreduxantaxiosiframe,实现侧边栏与导航栏还有头部,对打开的页签进行缓存,使用iframe与各个子系统页面相连。 对打开的页签进行缓存即使刷新页面的tag也不会丢失,界面如下: 这个实现的功能是侧…

某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万。

http://www.mianwww.com/html/2012/11/17432.html PS: 据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试题的理想环境。 存储结构 首先,我们用一张用户积分表user_score来…

linux服务器做301跳转,网站seo怎么实现301跳转,linux服务器设置301重定向方法!

原标题:网站seo怎么实现301跳转,linux服务器设置301重定向方法! 在SEO优化中,这些已经存在可能已被收录的页面链接,既不能贸然的删除又不能放任不管,由于这跟网站的权重是挂钩的,以是这个时辰301定向就派上用场了。301…

WEB阶段6:过滤器监听器全局字符修改案例用户权限过滤案例装饰者模式过滤敏感词汇统计当前网站在线人数

过滤器&监听器&全局字符修改案例&用户权限过滤案例&装饰者模式过滤敏感词汇&统计当前网站在线人数 回顾 JSP的页面脚本元素 组成部分语法格式JSP代码片段<% Java代码 %>JSP声明<%! 声明全局变量 %>JSP脚本表达式<% 变量值 %>注释<…