輕鬆搭建基於 Serverless 的 ThinkPHP 應用

函數計算.jpg

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

函數計算(Function Compute): 函數計算是一個事件驅動的服務,經過函數計算,用戶無需管理服務器等運行狀況,只需編寫代碼並上傳。函數計算準備計算資源,並以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。函數計算更多信息 參考。 Fun: Fun 是一個用於支持 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日誌服務等資源。它經過一個資源配置文件(template.yml),協助您進行開發、構建、部署操做。Fun 的更多文檔 參考mysql

備註: 本文介紹的技巧須要 Fun 版本大於等於 3.6.3。nginx

ThinkPHP 是什麼?

ThinkPHP 是一個免費開源的,快速、簡單的面向對象的輕量級 PHP 開發框架,是爲了敏捷 WEB 應用開發和簡化企業應用開發而誕生的。ThinkPHP 從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡代碼的同時,更注重易用性。遵循 Apache2 開源許可協議發佈,意味着你能夠無償使用 ThinkPHP,甚至容許把你基於 ThinkPHP 開發的應用開源或商業產品發佈/銷售。git

效果預覽

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

  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 安裝到本機。sql

PS: 本文介紹的方法,不須要安裝 Docker,僅僅安裝 Fun 便可,最簡單的方式就是直接下載可執行的二進制文件。thinkphp

安裝完成後,能夠執行 fun --version 檢查 Fun 是否安裝成功。shell

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

初始化一個 thinkphp 示例:數據庫

composer create-project topthink/think tp

將該示例在本地運行測試:緩存

php think run

能夠在本地看到效果:

傳統的開發方式是,本地開發完成後,就要進行部署工做了,一般咱們部署一個 PHP 應用可能須要以下幾步:

  1. 購買一臺物理機器,好比 ECS
  2. 在物理機器上綁定公網 ip、安裝 php、nginx、php-fpm
  3. 配置 nginx、php-fpm 以及上傳應用到該機器上
  4. 運行測試

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

fun deploy

僅須要一個命令,Fun 會自動進入部署流程,在該流程中,用戶僅僅須要按下一系列的回車便可。流程細節以下:

  1. Fun 檢測到這不是一個 Fun 項目,會提示協助建立(直接回車或者輸入 y 便可)
  2. Fun 項目自動建立成功,提示是否進行部署?能夠直接回車,或者輸入 y 進行確認
  3. 而後 Fun 會直接將應用部署到線上了

部署完成後,咱們能夠根據部署成功的日誌看到,函數計算爲咱們生成了臨時域名 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 能夠直接看到效果。

本地測試沒問題後,就要進行部署了。部署前,咱們須要知道,因爲函數計算運行時代碼目錄自己是不能夠修改的,而 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 打開該應用的管理後臺:

總結

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

若是您在遷移您的應用過程當中遇到了問題,歡迎加入咱們的 dingding 羣 11721331 反饋。

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

相關文章
相關標籤/搜索