# fc-wordpress
**Repository Path**: webnono/fc-wordpress
## Basic Information
- **Project Name**: fc-wordpress
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-04-01
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 简介
本项目是[一元建站-基于函数计算 + wordpress 构建 serverless 网站](https://yq.aliyun.com/articles/721594)示例工程。
# 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元/月
[函数计算计费](https://help.aliyun.com/document_detail/137980.html) | [NAS 定价](https://www.alibabacloud.com/zh/product/nas/pricing?spm=a2796.10410706.1184211.1.225e1af83WbMA1)
如上所述, 在低成本网站领域, 函数计算具有十分明显的成本优势,同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本(可能需要做的只是更换一个更强的关系型数据库), 同时财务成本增长配合预付费也能保持平滑。低成本网站变成高可用高性能网站如丝般顺滑。
# 案例操作步骤
## 准备条件
[免费开通函数计算](https://statistics.functioncompute.com/?title=ServerlessWordpress&theme=ServerlessWeb&author=rsong&src=article&url=http://fc.console.aliyun.com), 按量付费,函数计算有很大的免费额度。
[免费开通文件存储服务NAS](https://nas.console.aliyun.com/), 按量付费
**可选:** 有一个域名(国内的需要备案, 海外的不需要), 比如 abc.com, 并将域名 CNAME 解析到 函数计算(FC) 对应的 region
> 如您想在杭州的 region 部署 wordpres 网站, 则将 abc.com CNAME 解析到 12345.cn-hangzhou.fc.aliyuncs.com, 其中 12345 是您的 accountId
>
> 如果没有域名也没有关系, fun 工具会给您生成一个临时域名
## 3.1 安装最新的 Fun 工具
- 安装版本为8.x 最新版或者10.x 、12.x [nodejs](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions-enterprise-linux-fedora-and-snap-packages)
- 安装 [funcraf](https://github.com/alibaba/funcraft/blob/master/docs/usage/installation-zh.md)
## 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
```bash
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, 记录这个域名。
```bash
fun deploy
```

- 上传 wordpress 网站到 NAS
```bash
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
```bash
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, 记录这个域名。
```bash
fun deploy
```

- 本地完成安装过程, 初始化 sqlite3 数据库
- 在目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress 中输入命令:
```bash
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 是您预先准备的域名或者 Fun 为生成的临时域名
- 通过浏览器输入 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
```bash
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平台
本地调试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](https://fc.console.aliyun.com/),可以看到service 和 函数已经创建成功, 并且 service 也已经正确配置。
3. 通过浏览器打开 Fun 临时生成的域名, 比如本例中的 12720569-1986114430573743.test.functioncompute.com
- mysql 版本数据库, 可以直接跟传统的 wordpress 一样,直接进入安装过程
- sqlite3 版本数据库, 由于之前已经完成初始化,可以直接进入网站首页或网站后台
# FAQ
### Q1: 函数计算能开发高性能高可用网站吗?
A: 可以, 使用函数计算的单实例多并发功能和高性能数据库
- [单实例多并发](https://help.aliyun.com/document_detail/144586.html)
- 选择高性能关系型数据库,比如高可用的[云数据库POLARDB](https://help.aliyun.com/product/58609.html)
有必要再加上这些优化:
- [预留实例消除冷启动](https://help.aliyun.com/document_detail/140338.html) + [预付费优化成本](https://help.aliyun.com/document_detail/138831.html)
- [极速型 NAS](https://www.aliyun.com/product/nas)
- OSS 对象存储 + CDN 来存储和分发静态资源
> 目前 PHP Runtime 并不支持单实例多并发, 使用 Custom Runtime,可以将基于传统模式 nginx + php-fpm + mysql 开发的网站直接简单无缝迁移到函数计算平台,示例工程 [customruntime-php](https://github.com/awesome-fc/customruntime-php)
> [使用OSS对Wordpress进行图片动静分离](https://yq.aliyun.com/articles/2996)
### Q2: 使用低成本 sqlite3 版本的网站, 冷启动第一次打开很慢怎么办?
A: 用一个 timer trigger 的函数 keep warm
### Q3: 使用低成本 sqlite3 版本的网站, 能支持多大的 qps?
A: 由 sqlite3 数据库性能决定, 这边有一些压测结果:


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