十分钟上线-CodeIgniter项目迁移到函数计算

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 前言 阿里云函数计算 Function Compute(FC),旨在帮助用户采用弹性伸缩、动态分配资源的方式,来执行业务函数。让用户无需购买部署服务器,无需考虑业务负载,就能快速搭建可处理高并发的后台服务。

前言

阿里云函数计算 Function Compute(FC),旨在帮助用户采用弹性伸缩、动态分配资源的方式,来执行业务函数。让用户无需购买部署服务器,无需考虑业务负载,就能快速搭建可处理高并发的后台服务。
本文介绍HTTP触发器快速迁移CodeIgniter应用到函数计算。函数计算运行 PHP 框架原理可以参考一下《十分钟上线-函数计算玩转 WordPress》

案例概览

在本教程中,我们讲解如何利用函数计算一步一步来构建 Web 的 Server 端,该案例是把一个 CodeIgniter 部署到函数计算,本文旨在展示函数计算做 Web Backend 能力,具体表现为以下几点:

  • 完善的 PHP 系统迁移到 FC 的成本不高
  • FC 打通了专有网络 VPC 功能,用户的函数可以配置访问专有网络的云资源,比如本案例中:nas

案例体验入口:

案例开发配置步骤

1. CodeIgniter项目同步到nas上

在本地创建一个函数的根目录,在该目录下创建template.yml文件,内容如下:

ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  Wkhtmltopdf:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Role: 'XXXX'
      LogConfig:
        Project: XXX
        Logstore: XXX
      VpcConfig:XXX
        VpcId: 
        VSwitchIds:
          - XXX
        SecurityGroupId: XXXX
      NasConfig:
        UserId: 10003
        GroupId: 10003
        MountPoints:
          - ServerAddr: 'XXXX'
            MountDir: /mnt/www
    CodeIgniter:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: index.handler
        Runtime: php7.2
        CodeUri: './index.php'
      Events:
         httpTrigger:
             Type: HTTP
             Properties:
               AuthType: ANONYMOUS
               Methods:
                  - GET

当然您这边也可以使用fun工具提供的NasConfig: Auto配置,可以自动生成nas相关配置,具体步骤可以参考:https://yq.aliyun.com/articles/712693

fun工具进入之前创建的函数根目录下后执行,fun nas info 查看 nas 的相关信息

20191114171242

我们把CodeIgniter项目放在刚刚执行fun nas info命令查看到的本地nas目录下。

20191114171543

最后使用 fun nas sync 将本地 nas 资源同步到 nas 服务:

20191114172113

使用fun工具把本地资源同步到nas上具体步骤可以参考:https://yq.aliyun.com/articles/712700

2. 创建函数入口文件

在函数根目录下创建一个index.php文件,文件内容如下:

<?php
#自定义的域名,绑定了自定义域名的,可以换成自己自定义的。
$MY_HOST    = "support.mofangdegisn.cn";
#web目录,CodeIgniter框架默认是根目录
$WWW_DIR = '/mnt/www/CodeIgniter';

function handler($request, $context){

    #如果不使用函数计算后台提供的域名,这句可以注释掉。
    if(strpos($request->getAttribute("requestURI"),"/2016-08-15/proxy") !== false) $request = clearFcHost($request,$context);#兼容 fc后台的url地址

    $uri  = $request->getAttribute("requestURI");
    $file = explode("?", $uri)[0];
    if($file=='/') $uri='/';#
    $file = $GLOBALS['WWW_DIR'].$file;

    if(file_exists($file) and $uri!='/'){
        if(strpos($uri,".php")) return php_run(basename($file), $request, $context);#php_run
        return static_run($uri);#static_run
    }

    $request = $request->withAttribute("requestURI", "?s=".$uri);
    return php_run('index.php', $request, $context);# php_run CodeIgniter框架入口 index.php

}

function php_run($name,$request, $context)
{
    return $GLOBALS['fcPhpCgiProxy']->requestPhpCgi($request, $GLOBALS['WWW_DIR'], $name,['SERVER_NAME' => $GLOBALS['MY_HOST'], 'SERVER_PORT' => '80', 'HTTP_HOST' => $GLOBALS['MY_HOST']],['debug_show_cgi_params' => false, 'readWriteTimeout' => 15000]);
}
use RingCentral\Psr7\Response;
function static_run($uri): Response{
    $file_dir = $GLOBALS['WWW_DIR'].$uri; #完整文件路径
    $file_dir = explode("?", $file_dir)[0]; #去掉动态路径
    if(is_dir($file_dir)) $file_dir .= '/index.html';# 可以这里定义目录的默认索引页
    $handle   = fopen($file_dir, "r");
    $contents = fread($handle, filesize($file_dir));
    fclose($handle);
    return new Response(200, ['Content-Type'  => $GLOBALS['fcPhpCgiProxy']->getMimeType($file_dir),'Cache-Control' => "max-age=8640000",'Accept-Ranges' => 'bytes'], $contents);
}

function clearFcHost($request,$context){
    $uri  = $request->getAttribute("requestURI");
    $uri  = str_replace("/2016-08-15/proxy/".$context['service']['name']."/".$context['function']['name'],"",$uri);
    $request = $request->withAttribute("requestURI", $uri);
    return $request;
}

#错误处理
function error($code) {
    #if($resp->getStatusCode() !=200) return error($resp->getStatusCode());
    return 'Codelgniter框架测试~~';
}

执行fun deploy部署函数,部署成功如图!
20191114172623

最后给服务函数绑定自定义域名详情

总结

函数计算有如下优势:

  • 无需采购和管理服务器等基础设施
  • 专注业务逻辑的开发
  • 提供日志查询、性能监控、报警等功能快速排查故障
  • 以事件驱动的方式触发应用响应用户请求
  • 毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力
  • 按需付费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景
  • 除了上面所列的优势,FC 可以做为 Web Backend,只需要编写一个函数实现传统 Web 服务器中的 conf 中的逻辑,就可以将一个完整的 Web 工程迁移到 FC ,从而从传统的 Web 网站运维,监控等繁琐的事务中解放出来。

最后欢迎大家通过扫码加入我们用户群中,搭建过程中有问题或者有其他问题可以在群里提出来。

函数计算官网客户群(11721331)。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3月前
|
人工智能 运维 物联网
云大使 X 函数计算 FC 专属活动上线!享返佣,一键打造 AI 应用
如今,AI 技术已经成为推动业务创新和增长的重要力量。但对于许多企业和开发者来说,如何高效、便捷地部署和管理 AI 应用仍然是一个挑战。阿里云函数计算 FC 以其免运维的特点,大大降低了 AI 应用部署的复杂性。用户无需担心底层资源的管理和运维问题,可以专注于应用的创新和开发,并且用户可以通过一键部署功能,迅速将 AI 大模型部署到云端,实现快速上线和迭代。函数计算目前推出了多种规格的云资源优惠套餐,用户可以根据实际需求灵活选择。
|
1月前
|
运维 Serverless 测试技术
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
66 10
|
1月前
|
人工智能 运维 文字识别
新书上线 |《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》免费下载
新书上线 |《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》免费下载
|
2月前
|
人工智能 运维 文字识别
新书上线 |《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》免费下载
《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》电子书正式上线!多种精选 AI 部署方案带你深入了解 Serverless+AI 最新趋势、AI 应用的架构设计与详细的部署教程等。函数计算 AI 技术解决方案助您一键上云,高效部署。
|
3月前
|
存储 人工智能 Cloud Native
函数计算×百炼新春活动正式上线!三步赢取蛇年精美好礼
本次场景利用函数计算 FC 构建 Web 服务,由其提供函数计算资源以及工作流能力,您无需管理服务器等基础设施,函数计算 FC 能够根据需求自动扩展,按需计算,结合百炼模型服务实现了从文案、声音、字幕、图像生成到视频合成的一站式自动化流程,大幅简化使用 AI 创作的流程,降低了技术要求,使创作者能够更高效地生产出高质量的内容,快速响应市场需求,同时保证了作品的专业水准和创意表达。
132 24
|
1月前
|
存储 人工智能 Cloud Native
函数计算×百炼新春活动正式上线!三步赢取蛇年精美好礼
函数计算×百炼新春活动正式上线!三步赢取蛇年精美好礼
|
2月前
|
人工智能 运维 文字识别
新书上线 |《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》免费下载
新书上线 |《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》免费下载
|
4月前
|
运维 Serverless 测试技术
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
本方案基于通义大模型的通义灵码,提供代码生成、补全、优化及单元测试生成等能力,提升编码效率和质量。结合云效和函数计算 FC 进行代码管理、持续集成、部署发布,加速项目交付,为开发者提供智能编码、CI/CD、部署上线体验,加快产品迭代速度。
|
8月前
|
前端开发 Serverless 应用服务中间件
Serverless痛点解决问题之将传统 LAMP/LNMP 项目直接 FaaS 化如何解决
Serverless痛点解决问题之将传统 LAMP/LNMP 项目直接 FaaS 化如何解决
77 0
|
15天前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
169 29

相关产品

  • 函数计算
  • 下一篇
    oss创建bucket