本文旨在經過 快速部署一個 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 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的技術圈。」