一元建站-基于函数计算 wordpress 构建 serverless 网站
前言
本文旨在通過(guò) 快速部署一個(gè) wordpress 網(wǎng)站到阿里云函數(shù)計(jì)算平臺(tái) 這個(gè)示例來(lái)展示 serverless web 新的開發(fā)模式, 包括 FUN 工具一鍵初始化 NAS, 同步網(wǎng)站到 NAS, 一鍵部署等能力, 展現(xiàn)函數(shù)計(jì)算的開發(fā)敏捷特性、自動(dòng)彈性伸縮能力、免運(yùn)維和完善的監(jiān)控設(shè)施。
相關(guān)參考文檔: https://yq.aliyun.com/articles/640912
1.1 DEMO 概述
- DEMO 示例效果入口: http://hz.mofangdegisn.cn
- 賬號(hào): fc-test-user
- 密碼: fc-test-pwd
- DEMO 示例工程地址: fc-wordpress
開通服務(wù)
免費(fèi)開通函數(shù)計(jì)算, 按量付費(fèi),函數(shù)計(jì)算有很大的免費(fèi)額度。
免費(fèi)開通文件存儲(chǔ)服務(wù)NAS, 按量付費(fèi)
1.2 解決方案
如上圖所示, 當(dāng)多個(gè)用戶通過(guò)對(duì)外提供的 url 訪問(wèn)web服務(wù)的時(shí)候時(shí)候,每秒的請(qǐng)求幾百上千都沒(méi)有關(guān)系, 函數(shù)計(jì)算平臺(tái)會(huì)自動(dòng)伸縮, 提供足夠的執(zhí)行實(shí)例來(lái)響應(yīng)用戶的請(qǐng)求, 同時(shí)函數(shù)計(jì)算提供了完善的監(jiān)控設(shè)施來(lái)監(jiān)控您的函數(shù)運(yùn)行情況。
1.3 Serverless 方案與傳統(tǒng)自建 web 方案對(duì)比
| 基于 VM 方案 | 使用 ecs.t5-lc1m1.small, 22.8元/月 | 服務(wù)器和數(shù)據(jù)庫(kù)在同一臺(tái)VM, 均無(wú)主備容災(zāi),同時(shí)該規(guī)格的主機(jī)本身性能弱 |
| 輕量應(yīng)用服務(wù)器 | 60元/月(1vCPU 1GB 1Mbps 20GB[ssd]) | 服務(wù)器和數(shù)據(jù)庫(kù)在同一臺(tái)VM, 均無(wú)主備容災(zāi),同時(shí)該規(guī)格的主機(jī)本身性能弱 |
| 函數(shù)計(jì)算 | sqlite3 版本約為 1元/月 mysql 版本大約 26元/月 | 高 |
函數(shù)計(jì)算完整費(fèi)用詳情:
- 每月前 100 萬(wàn)次函數(shù)調(diào)用免費(fèi), 每月前 400000(GB*秒) 費(fèi)用免費(fèi), 函數(shù)的內(nèi)存可以設(shè)置為 128M 或者 256M, 因此對(duì)于一個(gè)一個(gè)月訪問(wèn)量低于 100 萬(wàn)次的網(wǎng)站, 該項(xiàng)是免費(fèi)的
- 對(duì)于低成本的網(wǎng)站, 假設(shè)一個(gè)月的產(chǎn)生的公網(wǎng)流量為 1GB, 0.8元
- NAS, US$0.06/GB/Month, 網(wǎng)站大小為 50M, 即使按 1G 計(jì)算, 0.42元
- RDS mysql 最基本的單機(jī)版本, 25元/月
函數(shù)計(jì)算計(jì)費(fèi) | NAS 定價(jià)
如上所述, 在低成本網(wǎng)站領(lǐng)域, 函數(shù)計(jì)算具有十分明顯的成本優(yōu)勢(shì),同時(shí)還保持了彈性能力,以后業(yè)務(wù)規(guī)模做大以后并沒(méi)有技術(shù)切換成本(可能需要做的只是更換一個(gè)更強(qiáng)的關(guān)系型數(shù)據(jù)庫(kù)), 同時(shí)財(cái)務(wù)成本增長(zhǎng)配合預(yù)付費(fèi)也能保持平滑。低成本網(wǎng)站變成高可用高性能網(wǎng)站如絲般順滑, 高性能網(wǎng)站詳情可以參考文末 FAQ 中的 Q1 問(wèn)題。
函數(shù)計(jì)算運(yùn)行 PHP 框架原理
在具體操作部署之前, 先簡(jiǎn)單梳理一遍 函數(shù)計(jì)算運(yùn)行 PHP 框架原理
2.1 傳統(tǒng)服務(wù)器 PHP 運(yùn)行原理
-
原理示意圖
-
A simple nginx conf
從上面原理示意圖我們可以看出,Web 服務(wù)器根據(jù) conf 中 location將 PHP 腳本交給 php-fpm 去解析,然后將解析后的結(jié)果返回給 client 端
2.2 FC 驅(qū)動(dòng) PHP 工程原理
- 函數(shù)計(jì)算的執(zhí)行環(huán)境實(shí)例相當(dāng)于傳統(tǒng) web 服務(wù)的 Apache/Nginx
- 用戶函數(shù)相當(dāng)于實(shí)現(xiàn) Apache/Nginx 的 conf 中 location
- 用戶將 Web 網(wǎng)站部署在 NAS,然后掛載 NAS 到函數(shù)的執(zhí)行環(huán)境, 比如下面代碼中 ?/mnt/auto 目錄
- 對(duì)于 WordPress 入口函數(shù)代碼就是這么簡(jiǎn)單: index.php
其中函數(shù)計(jì)算為用戶提供了一個(gè) $GLOBALS['fcPhpCgiProxy'] 對(duì)象用來(lái)和 php-fpm 進(jìn)行交互,對(duì) PHP 工程中的 php 文件進(jìn)行解析,該對(duì)象提供了兩個(gè)重要的接口:- requestPhpCgi
如果您有興趣, 可以了解下函數(shù)計(jì)算 PHP Runtime:
- PHP 入口函數(shù)
- PHP 執(zhí)行環(huán)境
案例操作步驟
準(zhǔn)備條件
免費(fèi)開通函數(shù)計(jì)算, 按量付費(fèi),函數(shù)計(jì)算有很大的免費(fèi)額度。
免費(fèi)開通文件存儲(chǔ)服務(wù)NAS, 按量付費(fèi)
有一個(gè)域名, 比如 abc.com, 并將域名 CNAME 解析到 函數(shù)計(jì)算(FC) 對(duì)應(yīng)的 region
如您想在杭州的 region 部署 wordpres 網(wǎng)站, 則將 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 根據(jù)需要使用的數(shù)據(jù)庫(kù)進(jìn)入不同的目錄
- 復(fù)制 .env_example 文件為 .env, ?并且修改 .env 中的信息為自己的信息
如果使用 mysql 數(shù)據(jù)庫(kù), 參考章節(jié) 3.3.1
如果使用 sqlite3 數(shù)據(jù)庫(kù), 參考章節(jié) 3.3.2
3.3.1 使用 mysql 數(shù)據(jù)庫(kù)
- 進(jìn)入 目錄 fc-wp-mysql
fun nas init: 初始化 NAS, 基于您的 .env 中的信息獲取(已有滿足條件的nas)或創(chuàng)建一個(gè)同region可用的nas
如果你沒(méi)有修改 templata.yml 中的配置 service名字, 那么則可以進(jìn)入下一步; 如果有修改, 會(huì)在當(dāng)前目錄生成新的目錄 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目錄), ?將默認(rèn)目錄下的 .fun/nas/auto-default/fc-wp-mysql/wordpress 的wordpress目錄拷貝到 .fun/nas/auto-default/{serviceName} 下, 同時(shí)可以刪除目錄 .fun/nas/auto-default/fc-wp-mysql/wordpress
- 上傳 wordpress 網(wǎng)站到 NAS
fun nas sync: 將本地 NAS 中的內(nèi)容(.fun/nas/auto-default/fc-wp-mysql)上傳到 NAS 中的 fc-wp-mysql 目錄
fun nas ls nas:///mnt/auto/: 查看我們是否已經(jīng)正確將文件上傳到了 NAS
3.3.2 使用 sqlite3 數(shù)據(jù)庫(kù)
- 進(jìn)入 目錄 fc-wp-sqlite
fun nas init: 初始化 NAS, 基于您的 .env 中的信息獲取(已有滿足條件的nas)或創(chuàng)建一個(gè)同region可用的nas
如果你沒(méi)有修改 templata.yml 中的配置 service名字, 那么則可以進(jìn)入下一步; 如果有修改, 會(huì)在當(dāng)前目錄生成新的目錄 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目錄), ?將默認(rèn)目錄下的 .fun/nas/auto-default/fc-wp-sqlite/wordpress 的wordpress目錄拷貝到 .fun/nas/auto-default/{serviceName} 下, 同時(shí)可以刪除目錄 .fun/nas/auto-default/fc-wp-sqlite/wordpress
- 本地完成安裝過(guò)程, 初始化 sqlite3 數(shù)據(jù)庫(kù)
- 在目錄 .fun/nas/auto-default/fc-wp-sqlite/wordpress 中輸入命令:
- 修改 host 文件,添加 ?127.0.0.1 hz.mofangdegisn.cn
- linux/mac : vim /etc/hosts
- windows7: C:\Windows\System32\drivers\etc
其中 hz.mofangdegisn.cn 是您預(yù)先準(zhǔn)備的域名
- 通過(guò)瀏覽器輸入 hz.mofangdegisn.cn, 這個(gè)時(shí)候沒(méi)有mysql數(shù)據(jù)庫(kù)設(shè)置頁(yè)面,完成 wordpress 安裝過(guò)程
成功安裝以后, 這個(gè)時(shí)候, .fun/nas/auto-default/fc-wp-sqlite/wordpress/wp-content 下面應(yīng)該有一個(gè) database 的目錄, ls -a 查看, 應(yīng)該有 .ht.sqlite 這個(gè) sqlite3 數(shù)據(jù)庫(kù)文件
- 回退 host 文件的修改
注: 中間修改 host 的目的是初始化 sqlite3 數(shù)據(jù)庫(kù)的時(shí)候, base site url 是提前準(zhǔn)備的域名, 而不是 127.0.0.1
- 上傳 wordpress 網(wǎng)站到 NAS
fun nas sync: 將本地 NAS 中的內(nèi)容(.fun/nas/auto-default/fc-wp-sqlite)上傳到 NAS 中的 fc-wp-sqlite 目錄
fun nas ls nas:///mnt/auto/: 查看我們是否已經(jīng)正確將文件上傳到了 NAS
3.4 部署函數(shù)到FC平臺(tái)
接下來(lái)將函數(shù)部署到云平臺(tái):
- 修改 index.php 中的 $host 中的值
- 修改 template.yml LogConfig 中的 Project, 任意取一個(gè)不會(huì)重復(fù)的名字即可
- 修改 template.yml 自定義域名為自己提前準(zhǔn)備好的域名
- 執(zhí)行 fun deploy
登錄控制臺(tái) https://fc.console.aliyun.com,可以看到service 和 函數(shù)已經(jīng)創(chuàng)建成功, 并且 service 也已經(jīng)正確配置。
通過(guò)瀏覽器打開自己之前配置的域名, 比如本例中的 hz.mofangdegisn.cn
- mysql 版本數(shù)據(jù)庫(kù), 可以直接跟傳統(tǒng)的 wordpress 一樣,直接進(jìn)入安裝過(guò)程
- sqlite3 版本數(shù)據(jù)庫(kù), 由于之前已經(jīng)完成初始化,可以直接進(jìn)入網(wǎng)站首頁(yè)或網(wǎng)站后臺(tái)
FAQ
Q1: 函數(shù)計(jì)算能開發(fā)高性能高可用網(wǎng)站嗎?
A: 可以, 使用函數(shù)計(jì)算的單實(shí)例多并發(fā)功能和高性能數(shù)據(jù)庫(kù)
- 單實(shí)例多并發(fā)
- 選擇高性能關(guān)系型數(shù)據(jù)庫(kù),比如高可用的云數(shù)據(jù)庫(kù)POLARDB
有必要再加上這些優(yōu)化:
- 預(yù)留實(shí)例消除冷啟動(dòng) 預(yù)付費(fèi)優(yōu)化成本
- 極速型 NAS
- OSS 對(duì)象存儲(chǔ) CDN 來(lái)存儲(chǔ)和分發(fā)靜態(tài)資源
目前 PHP Runtime 并不支持單實(shí)例多并發(fā), 使用 Custom Runtime,可以將基于傳統(tǒng)模式 nginx php-fpm mysql 開發(fā)的網(wǎng)站直接簡(jiǎn)單無(wú)縫遷移到函數(shù)計(jì)算平臺(tái),示例工程 customruntime-php
使用OSS對(duì)Wordpress進(jìn)行圖片動(dòng)靜分離
Q2: 使用低成本 sqlite3 版本的網(wǎng)站, 冷啟動(dòng)第一次打開很慢怎么辦?
A: 用一個(gè) timer trigger 的函數(shù) keep warm
Q3: 使用低成本 sqlite3 版本的網(wǎng)站, 能支持多大的qps?
A: 由 sqlite3 數(shù)據(jù)庫(kù)性能決定, 這邊有一些壓測(cè)結(jié)果:
每次壓力增大時(shí)候, 都有些冷啟動(dòng),時(shí)間慢點(diǎn),但是支持從壓測(cè)結(jié)果來(lái)看支持 50 QPS 是沒(méi)有疑問(wèn)的, 是足夠支持一些中小網(wǎng)站的。
Q4: 使用其他語(yǔ)言基于函數(shù)計(jì)算開發(fā) serverless 網(wǎng)站可以嗎?
A: 可以, 比如 python: https://yq.aliyun.com/articles/603249 , 或者直接使用 custom runtime, 內(nèi)置了 java、python 和 node, Custom Runtime 用戶手冊(cè) , Custom Runtime 使用集錦
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)圈。”
總結(jié)
以上是生活随笔為你收集整理的一元建站-基于函数计算 wordpress 构建 serverless 网站的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从零开始入门 K8s | etcd 性能
- 下一篇: 函数计算: 让小程序开发进入 Serve