轻松搭建基于 Serverless 的 ThinkPHP 应用
首先介绍下在本文出现的几个比较重要的概念:
函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考。
备注: 本文介绍的技巧需要 Fun 版本大于等于 3.7.0。
ThinkPHP 是什么?
ThinkPHP 是一个免费开源的,快速、简单的面向对象的轻量级 PHP 开发框架,是为了敏捷 WEB 应用开发和简化企业应用开发而诞生的。ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可协议发布,意味着你可以免费使用 ThinkPHP,甚至允许把你基于 ThinkPHP 开发的应用开源或商业产品发布/销售。
效果预览
本文涉及到的两个应用示例部署后的链接,点击预览效果:
- ThinkPHP 官方示例:http://13492727-1986114430573743.test.functioncompute.com
- ThinkPHP 博客示例:http://13500180-1986114430573743.test.functioncompute.com
- 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
可以在本地看到效果:
传统的开发方式是,本地开发完成后,就要进行部署工作了,通常我们部署一个 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 应用在本地开发完成后,一键部署到远端直接用于生产,并拥有了弹性伸缩、按量付费、免运维等特性。
如果您在迁移您的应用过程中遇到了问题,欢迎加入我们的 dingding 群 11721331 反馈。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
3个很棒的小众JavaScript库,你值得拥有!
云栖号:https://yqh.aliyun.com第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! JavaScript有很多库,每个人都已经对最重要和最受欢迎的库做过总结,但很快再次迷失。 在本文中,小芯将分享3个鲜为人知但非常强大,且很小的JavaScript库,这些库将使你的生活变得简单,也不会给你的web应用程序增加不必要的负担。 1、JS-cookie OfficialGitHub 在浏览器中使用cookies可能会非常费力。JS cookies让这件事变得简单多了,现在我们将学习基本知识。 通过CDN实施: <script src="https://cdn.jsdelivr.net/npm/js-cookie@beta/dist/js.cookie.min.js"></script> 设置一个名为“name”的cookie键,其值为“Max” Cookies.set(‘name’, ‘Max’) 获取密钥为“name”的cookie值 Cookies.get(‘name’) // 'Max' 创建...
- 下一篇
苹果新规,微信面临下架?一文看懂苹果与腾讯“相亲相爱相杀”
近期,苹果的新规又引起了人们的关注,苹果以邮件形式提醒开发者,自2020年4月30日起,App Store应用商店内所有第三方App都需完成iOS 13的适配工作,特别是那些尚未适配黑暗模式的APP。 而在这些APP中,最霸气的显然是微信了,自iOS 13黑暗模式上线以来,在其他App纷纷适配苹果的暗黑模式的时候,微信虽然也陆续更新了多个版本,但都没有适配黑暗模式。 如今,再次面对苹果新规,微信是否会妥协。如果过了规定期限,微信还是不进行适配,苹果会把微信下架吗? 微信无下架可能 为什么要适配黑暗模式,苹果介绍黑暗模式的好处,可以减少手机的电池压力,黑暗模式可以让大家在黑夜里更加舒适的玩手机。 而腾讯微信团队则表示: 为什么夜间模式?你的夜晚太珍贵,我们不忍心占用,更不愿意成为你半夜来看手机的原因。愿你每夜好眠。 这理由听起来挺有情怀的。 微信和苹果的交锋已经不是第一次了。 2017年,苹果和微信就公众号打赏问题产生了分歧,根据苹果App Store中3.1.1条款:上架商店的App不得包含“指引客户使用非 IAP机制进行购买的按钮、外部链接或其他行动号召用语”。腾讯就此事与苹果沟通未...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果