天天看點

輕松搭建基于 Serverless 的 ThinkPHP 應用

輕松搭建基于 Serverless 的 ThinkPHP 應用

首先介紹下在本文出現的幾個比較重要的概念:

函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。函數計算更多資訊 參考

Fun: Fun 是一個用于支援 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、建構、部署操作。Fun 的更多文檔

備注: 本文介紹的技巧需要 Fun 版本大于等于 3.6.3。

輕松搭建基于 Serverless 的 ThinkPHP 應用

ThinkPHP 是什麼?

ThinkPHP

是一個免費開源的,快速、簡單的面向對象的輕量級 PHP 開發架構,是為了靈活 WEB 應用開發和簡化企業應用開發而誕生的。ThinkPHP 從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡代碼的同時,更注重易用性。遵循 Apache2 開源許可協定釋出,意味着你可以免費使用 ThinkPHP,甚至允許把你基于 ThinkPHP 開發的應用開源或商業産品釋出/銷售。

效果預覽

本文涉及到的兩個應用示例部署後的連結,點選預覽效果:

  1. ThinkPHP 官方示例: http://13492727-1986114430573743.test.functioncompute.com
  2. ThinkPHP 部落格示例: http://13500180-1986114430573743.test.functioncompute.com
  3. ThinkPHP 部落格示例管理背景: http://13500180-1986114430573743.test.functioncompute.com/admin

環境準備

首先按照 Fun 的

安裝文檔

裡介紹的方法将 Fun 安裝到本機。

PS: 本文介紹的方法,不需要安裝 Docker,僅僅安裝 Fun 即可,最簡單的方式就是直接下載下傳可執行的二進制檔案。

安裝完成後,可以執行 fun --version 檢查 Fun 是否安裝成功。

第一個示例:快速初始化并部署一個 ThinkPHP 示例應用

初始化一個 thinkphp 示例:

composer create-project topthink/think tp           

将該示例在本地運作測試:

php think run           

可以在本地看到效果:

輕松搭建基于 Serverless 的 ThinkPHP 應用

傳統的開發方式是,本地開發完成後,就要進行部署工作了,通常我們部署一個 PHP 應用可能需要如下幾步:

  1. 購買一台實體機器,比如 ECS
  2. 在實體機器上綁定公網 ip、安裝 php、nginx、php-fpm
  3. 配置 nginx、php-fpm 以及上傳應用到該機器上
  4. 運作測試

其中最複雜的就要數第 2、3 步了,因為可能不同的環境的配置方法還不一樣,會有比較多的坑。我們示範下如何将應用部署到函數計算上。

fun deploy           

僅需要一個指令,Fun 會自動進入部署流程,在該流程中,使用者僅僅需要按下一系列的回車即可。流程細節如下:

  1. Fun 檢測到這不是一個 Fun 項目,會提示協助建立(直接回車或者輸入 y 即可)
    輕松搭建基于 Serverless 的 ThinkPHP 應用
  2. Fun 項目自動建立成功,提示是否進行部署?可以直接回車,或者輸入 y 進行确認
    輕松搭建基于 Serverless 的 ThinkPHP 應用
  3. 然後 Fun 會直接将應用部署到線上了
    輕松搭建基于 Serverless 的 ThinkPHP 應用

部署完成後,我們可以根據部署成功的日志看到,函數計算為我們生成了臨時域名

13492727-1986114430573743.test.functioncompute.com

,我們可以通過這個臨時域名直接通路我們剛剛部署的應用。

備注:臨時域名僅僅用作示範以及開發,是有時效的,如果用作生産,請綁定已經備案的域名。

第二個示例:快速遷移一個已有的 ThinkPHP 應用

這裡我們拿一個開源的 ThinkPHP 部落格做示例:

https://github.com/wolf-leo/Wolf-Blog

首先我們需要将 blog 克隆下來:

git clone https://github.com/wolf-leo/Wolf-Blog.git           

使用 composer 安裝依賴:

composer install           

在要使用的 mysql 資料庫上建立一個名為

blog_test

的 database。然後編輯

config/database.php

檔案,修改其中的資料庫位址、使用者名、密碼資訊。

// ... ...
return [
    // ... ...
    // 伺服器位址
    'hostname' => '192.168.17.104',
    // 資料庫名 測試資料庫名稱 不用修改 否則預設安裝會出錯
    'database' => 'blog_test',
    // 使用者名  需要修改的地方
    'username' => 'root',
    // 密碼     需要修改的地方
    'password' => 'root',
    // ... ...
];           

修改完成後,就可以本地啟動檢視效果了:

$ php think run

ThinkPHP Development server is started On <http://127.0.0.1:8000/>
You can exit with `CTRL-C`
Document root is: /examples/php/Wolf-Blog/public           

然後打開

http://localhost:8000

可以直接看到效果。

輕松搭建基于 Serverless 的 ThinkPHP 應用

本地測試沒問題後,就要進行部署了。部署前,我們需要知道,由于函數計算運作時代碼目錄本身是不可以修改的,而 ThinkPHP 會在代碼目錄下的 Runtime 這個目錄寫一些緩存檔案,我們需要将這個緩存檔案放到 /tmp 下面。在我們的例子中就是将 thinkphp/library/think/App.php 這個檔案的第 174 行做如下修改:

- $this->runtimePath = $this->rootPath . 'runtime' . DIRECTORY_SEPARATOR;
+ $this->runtimePath = DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR;           

修改完成後可以直接使用以下指令進行部署:

fun deploy           

經曆與第一個示例一樣的步驟後,我們可以得到一個可以通路的臨時域名進行測試:

13500180-1986114430573743.test.functioncompute.com

。打開該臨時域名,可以預覽到與本地運作一樣的效果。

還可以通路

13500180-1986114430573743.test.functioncompute.com/admin

打開該應用的管理背景:

輕松搭建基于 Serverless 的 ThinkPHP 應用

總結

本文主要介紹了如何将 ThinkPHP 應用部署到函數計算。相比較與傳統的部署方法,不僅沒有更複雜,還省略了購買機器、安裝配置 Nginx、安裝配置 php-fpm 等步驟。可以實作,将傳統的 ThinkPHP 應用在本地開發完成後,一鍵部署到遠端直接用于生産,并擁有了彈性伸縮、按量付費、免運維等特性。

如果您在遷移您的應用過程中遇到了問題,歡迎加入我們的 dingding 群 11721331 回報。

阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”