轻松搭建基于 Serverless 的 ThinkPHP 应用
ThinkPHP 是什么?
ThinkPHP 是一个免费开源的,快速、简单的面向对象的轻量级 PHP 开发框架,是为了敏捷 WEB 应用开发和简化企业应用开发而诞生的。ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可协议发布,意味着你可以免费使用 ThinkPHP,甚至允许把你基于 ThinkPHP 开发的应用开源或商业产品发布/销售。
效果预览
本文涉及到的两个应用示例部署后的链接,点击预览效果:
- ThinkPHP 官方示例:https://fc-thinkphp-demo.functioncompute.com
- ThinkPHP 博客示例:https://fc-thinkphp-blog.functioncompute.com
- ThinkPHP 博客示例管理后台:https://fc-thinkphp-blog.functioncompute.com/admin
环境准备
首先按照 Fun 的安装文档里介绍的方法将 Fun 安装到本机。
PS: 本文介绍的方法,不需要安装 Docker,仅仅安装 Fun 即可,最简单的方式就是直接下载可执行的二进制文件。
安装完成后,可以执行 fun --version 检查 Fun 是否安装成功。
第一个示例:快速初始化并部署一个 ThinkPHP 示例应用
初始化一个 thinkphp 示例:
composer create-project topthink/think tp
将该示例在本地运行测试:
php think run
可以在本地看到效果:

传统的开发方式是,本地开发完成后,就要进行部署工作了,通常我们部署一个 PHP 应用可能需要如下几步:
- 购买一台物理机器,比如 ECS
- 在物理机器上绑定公网 ip、安装 php、nginx、php-fpm
- 配置 nginx、php-fpm 以及上传应用到该机器上
- 运行测试
其中最复杂的就要数第 2、3 步了,因为可能不同的环境的配置方法还不一样,会有比较多的坑。我们演示下如何将应用部署到函数计算上。
fun deploy
仅需要一个命令,Fun 会自动进入部署流程,在该流程中,用户仅仅需要按下一系列的回车即可。流程细节如下:
- Fun 检测到这不是一个 Fun 项目,会提示协助创建(直接回车或者输入 y 即可)

- Fun 项目自动创建成功,提示是否进行部署?可以直接回车,或者输入 y 进行确认

- 然后 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 应用在本地开发完成后,一键部署到远端直接用于生产,并拥有了弹性伸缩、按量付费、免运维等特性。
轻松搭建基于 Serverless 的 ThinkPHP 应用的更多相关文章
- 教你轻松构建基于 Serverless 架构的小程序
前言 自 2017 年第一批小程序上线以来,越来越多的移动端应用以小程序的形式呈现.小程序触手可及.用完即走的优点,大大降低了用户的使用负担,也使小程序得到了广泛的传播.在阿里巴巴,小程序也被广泛地应 ...
- 轻松构建基于 Serverless 架构的弹性高可用音视频处理系统
前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育.娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类 ...
- 轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
背景介绍 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数 ...
- 【玩转 WordPress】基于 Serverless 搭建个人博客图文教程,学生党首选!
以下内容来自「玩转腾讯云」用户原创文章,已获得授权. 01. 什么是 Serverless? 1. Serverless 官方定义 Serverless 中的 Server是服务器的意思,less 是 ...
- 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台
面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...
- 轻松搭建Windows8云平台开发环境
原文:轻松搭建Windows8云平台开发环境 Windows Store应用是基于Windows 8操作系统的新一代Windows应用程序,其开发平台以及运行模式和以往传统平台略有不同.为了帮助更多开 ...
- net.sz.framework 框架 轻松搭建服务---让你更专注逻辑功能---初探
前言 在之前的文章中,讲解过 threadmodel,socket tcp ,socket http,log,astart ,scripts: 都是分片讲解,从今天开始,将带大家,一窥 net.sz. ...
- KODExplorer可道云-轻松搭建属于自己/团队的私有云网盘服务
如今国内各大网盘关停的也快差不多,百度网盘限速严重.国外大牌的如 Dropbox 或 Google Drive又在长城之外,在各种VPN都被封禁的大背景下,科学上网也困难重重,麻烦到要死.那么,除了购 ...
- 从0到1搭建基于Kafka、Flume和Hive的海量数据分析系统(一)数据收集应用
大数据时代,一大技术特征是对海量数据采集.存储和分析的多组件解决方案.而其中对来自于传感器.APP的SDK和各类互联网应用的原生日志数据的采集存储则是基本中的基本.本系列文章将从0到1,概述一下搭建基 ...
- 轻松搭建CAS 5.x系列(2)-搭建HTTPS的SSO SERVER端
概要说明 CAS要求,必须使用HTTPS的服务,否则就只等实现登录,无法实现单点登录.科普下HTTPS,网站有HTTP和HTTPS两种协议.HTTP是浏览器到网站之间是明文传输,比如你输入帐号名和密码 ...
随机推荐
- Java 学习分享
建议语言入门可以先看看视频,学习网站可以是github,极客时间,infoQ等,然后去看书深入研究学习.学习最有效的方式一定是自己动手写代码,而不是看别人的代码,自己下载Intelli Idea多敲敲 ...
- java方法的内存及练习
方法的内存 一.方法调用的基本内存原理: Java内存分配 栈: 方法运行时使用的内存方法进栈运行,运行完毕就出栈 堆: newl出来的,都在堆内存中开辟了一个小空间 方法区: 存储可以运行的clas ...
- JS(数组)
一 数组的概念 问:之前学习的数据类型,只能存储一个值.如果我们想存储班级中所有学生的姓名,那么该如何存储呢?答:可以使用数组(Array).数组可以把一组相关的数据一起存放,并提供方便的访问(获取) ...
- 记录--再也不用手动改package.json的版本号
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本文的起因是有在代码仓库发包后,同事问我"为什么package.json 里的版本还是原来的,有没有更新?",这个时候 ...
- C# 人脸比对服务,自带模型,离线部署
软件说明 基于以下开源项目,做了再次封装 GitHub - ViewFaceCore/ViewFaceCore: C# 超简单的离线人脸识别库.( 基于 SeetaFace6 ) 可以一键开启服务: ...
- linux 安装mysql8.0.11
1.使用系统的root账户 2.切换到/use/local 目录下 3.下载mysql ?wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysq ...
- KingbaseESV8R6普通用户无权限执行vacuum
背景 数据库日志有如下提示: WARNING: skipping "pivot_t1" --- only table or database owner can vacuum it ...
- 初学STM32 CAN通信(三)
1. stm32 CAN通信标准库函数 //CAN通信初始化函数 uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct ...
- 什么是OOP(Object Oriented Programming)面向对象编程
1.认识面向对象首先要认识面向过程 面向过程编程,举个例子 比如有一天你要吃回锅肉,你会先去准备食材,然后一步一步把这道菜做出来,这就是面向过程. 还有一种方式你依然可以得到这道菜,你可以去饭店直接点 ...
- Python 列表list方法clear( )和直接list [ ]的区别
x.clear()是将内存地址清空, x=[ ]会新开辟一个内存空间.