本项目是一元建站-基于函数计算 + wordpress 构建 serverless 网站示例工程。
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, 按量付费
可选: 有一个域名(国内的需要备案, 海外的不需要), 比如 abc.com, 并将域名 CNAME 解析到 函数计算(FC) 对应的 region
如您想在杭州的 region 部署 wordpres 网站, 则将 abc.com CNAME 解析到 12345.cn-hangzhou.fc.aliyuncs.com, 其中 12345 是您的 accountId
如果没有域名也没有关系, fun 工具会给您生成一个临时域名
git clone https://github.com/awesome-fc/fc-wordpress.git
复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息
如果使用 mysql 数据库, 参考章节 3.3.1
如果使用 sqlite3 数据库, 参考章节 3.3.2
进入 目录 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
可选操作: 如果您没有自己的域名,可以在这里首先执行一次 fun deploy, 命令行结果输出中会有一个可用的临时域名, 如下图中的 12720569-1986114430573743.test.functioncompute.com, 记录这个域名。
fun deploy
上传 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
进入 目录 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
可选操作: 如果您没有自己的域名,可以在这里首先执行一次 fun deploy, 命令行结果输出中会有一个可用的临时域名, 如下图中的 12720569-1986114430573743.test.functioncompute.com, 记录这个域名。
fun deploy
本地完成安装过程, 初始化 sqlite3 数据库
php -S 0.0.0.0:80
127.0.0.1 hz.mofangdegisn.cn
- linux/mac : vim /etc/hosts
- windows7: C:\Windows\System32\drivers\etc
其中 hz.mofangdegisn.cn 是您预先准备的域名或者 Fun 为生成的临时域名
成功安装以后, 这个时候, .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
本地调试OK 后,我们接下来将函数部署到云平台:
修改 index.php 中的 $host 中的值, $host 修改为之前步骤中生成的临时域名, 如本例中的 12720569-1986114430573743.test.functioncompute.com
当然, 这里您也可以使用自己的域名, 修改 template.yml 中 DomainName: Auto , Auto 修改成您自己的域名, index.php 中的 $host 中的值也为您自己的域名
修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可, 有两处地方需要更改
再次执行 fun deploy, 完成最终的部署
2. 登录控制台 https://fc.console.aliyun.com,可以看到service 和 函数已经创建成功, 并且 service 也已经正确配置。
3. 通过浏览器打开 Fun 临时生成的域名, 比如本例中的 12720569-1986114430573743.test.functioncompute.com
mysql 版本数据库, 可以直接跟传统的 wordpress 一样,直接进入安装过程
sqlite3 版本数据库, 由于之前已经完成初始化,可以直接进入网站首页或网站后台
A: 可以, 使用函数计算的单实例多并发功能和高性能数据库
有必要再加上这些优化:
目前 PHP Runtime 并不支持单实例多并发, 使用 Custom Runtime,可以将基于传统模式 nginx + php-fpm + mysql 开发的网站直接简单无缝迁移到函数计算平台,示例工程 customruntime-php
A: 用一个 timer trigger 的函数 keep warm
A: 由 sqlite3 数据库性能决定, 这边有一些压测结果:
每次压力增大时候, 都有些冷启动,时间慢点,但是支持从压测结果来看支持 50 QPS 是没有疑问的, 是足够支持一些中小网站的。