开发者社区> rsong> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

十分钟上线-函数计算&Laravel的那些事儿

简介: 这篇文章是[十分钟上线-函数计算玩转 WordPress](https://yq.aliyun.com/articles/640912)的姊妹篇,本文中我们将github上一个star很高的larvel入门博客教程Learn-Laravel-5项目移植到在函数计算上, 展示函数计算环境驱动laravel的能力,实现 laravel web 项目 serverless 化。
+关注继续查看

前言

这个文章介绍方案过时, 直接参考自定义镜像方案

函数计算目前已经支持了自定义镜像, 感兴趣的同学直接使用镜像体验更流畅,使用 custom-container, 和传统的 php 使用方法一致, 通过 S 工具可以一键部署

start-laravel
start-thinkphp
start-zblog
start-wordpress
start-discuz

@Deprecated

注意: 可以直接参考最新的官方文档:迁移 larvel 到函数计算

这篇文章是十分钟上线-函数计算玩转 WordPress的姊妹篇,有关函数计算的优势,php runtime 运行php 框架原理等相关内容可以先预览十分钟上线-函数计算玩转 WordPress,本文假设您已经理解函数计算 php runtime, vpc, nas, 自定义域名等相关内容的基础上,我们通过将github上一个star很高的larvel入门博客教程Learn-Laravel-5项目移植到在函数计算上, 展示函数计算环境驱动laravel的能力,实现 laravel web 项目 serverless 化。

案例体验入口:

FC 运行larvel 流程

  • 下载 Learn-Laravel-5,准备好mysql数据库。

    • 修改.env, 主要是修改数据库连接相关内容
    DB_CONNECTION=mysql
    DB_HOST=rm-xxyyyy12583ck110swao.mysql.rds.aliyuncs.com
    DB_PORT=3306
    DB_DATABASE=fc-larvel
    DB_USERNAME=haha
    DB_PASSWORD=pwd123456
    • php artisan migrate,做数据库初始化工作
    • chmod -R 777 storagechmod -R 777 bootstrap/cache, 保证这两个目录可写
    • 执行命令php artisan key:generate,生成app_key
  • 将 Learn-Laravel-5 工程移到上述配置的 NAS 中, www 表示 Learn-Laravel-5 的工程的根目录。
|-- index.py
|-- www

index.py代码:

# -*- coding: utf-8 -*-
import logging  
import os

file = "/mnt/www/"

def mkdir(path):
  folder = os.path.exists(path)
  if not folder:                  
    os.makedirs(path)           
    
def lsDir():
  os.system("ls -ll /mnt/www/")

def handler(event, context):
  mkdir(file)  
  os.system("cp -r /code/www/* /mnt/www/")
  os.system("cp -a /code/www/.env /mnt/www/.env")
  print(lsDir())
  return 'ok'

基于上述代码创一个函数 move-larvel-nas , 执行函数,将 Learn-Laravel-5 工程包移动到 NAS 的/mnt/www/ 目录。

注: 在第一步初始化的时候,可以使用数据库的公网地址; 在函数计算的环境中,使用vpc,可以修改.env, 将其改为内网地址,更加安全
  • 编写函数,代码如下:
    laravel 是单入口框架,所有的url都是经过 public/index.php

    <?php
    use RingCentral\Psr7\Response;
    
    function startsWith($haystack, $needle) {
        $length = strlen($needle);
        return (substr($haystack, 0, $length) === $needle);
    }
    
    function handler($request, $context): Response{
        $uri    = $request->getAttribute("requestURI");
        
        $isPhpScript = false;
        $root_dir = '/mnt/www';
        $filename = $root_dir . explode("?", $uri)[0];
        $filename = rawurldecode($filename);
        
        $pathinfo  = pathinfo($filename);
        if(!isset($pathinfo['extension'])){
          $isPhpScript = true;
        }else{
          $extension = strtolower($pathinfo['extension']);
          if($extension == 'php'){
            $isPhpScript = true;
          }
        }
        
        $proxy    = $GLOBALS['fcPhpCgiProxy'];
        //php script
        if ($isPhpScript) {
            $host   = "rayzhang.mofangdegisn.cn";
            $resp   = $proxy->requestPhpCgi($request, $root_dir, "index.php",
                ['SERVER_NAME' => $host, 'SERVER_PORT' => '80', 'HTTP_HOST' => $host,
                'SCRIPT_FILENAME' => $root_dir . "/public/index.php",
                    'SCRIPT_NAME' => "/index.php"],
                ['debug_show_cgi_params' => true, 'readWriteTimeout' => 20000]
            );
            return $resp;
        } else {
            // static files, js, css, jpg ...
            $handle   = fopen($filename, "r");
            $contents = fread($handle, filesize($filename));
            fclose($handle);
            $headers = [
                'Content-Type'  => $proxy->getMimeType($filename),
                'Cache-Control' => "max-age=8640000",
                'Accept-Ranges' => 'bytes',
            ];
            return new Response(200, $headers, $contents);
        }
    }
  • 给函数入口配置自定义域名(操作过程请参考:绑定自定义域名示例), 具体配置假设如下:

image

注意: 绑定自定义域名之后,不用使用控制台来进行调试,就只能使用浏览器来触发函数,日志服务来进行调试。

总结

FC 可以做为 Web Backend,只需要编写一个函数实现传统 Web 服务器中的 conf 中的逻辑,就可以将一个完整的 Web 工程迁移到 FC ,从而从传统的 Web 网站运维,监控等繁琐的事务中解放出来。

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
开发者云《Serverless函数计算初体验》火热上线。体验函数计算场景领取定制版马克杯
火遍全网的体验挑战第二弹抢鲜首发,体验函数计算相关场景并通过答题挑战即可获得印有阿里云第一行代码的定制版马克杯 活动地址:https://developer.aliyun.com/adc/series/fc/
0 0
十分钟上线- CodeIgniter 项目迁移到函数计算
阿里云函数计算 Function Compute(FC),旨在帮助用户采用弹性伸缩、动态分配资源的方式,来执行业务函数。让用户无需购买部署服务器,无需考虑业务负载,就能快速搭建可处理高并发的后台服务。
0 0
十分钟上线-CodeIgniter项目迁移到函数计算
前言 阿里云函数计算 Function Compute(FC),旨在帮助用户采用弹性伸缩、动态分配资源的方式,来执行业务函数。让用户无需购买部署服务器,无需考虑业务负载,就能快速搭建可处理高并发的后台服务。
395 0
十分钟上线 - 函数计算构建支付宝小程序的后端
阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务。通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统。接下来我们使用FC,来快速实现一个图片转换服务, 并把这个图片转换服务作为支付宝小程序的后端。
1745 0
十分钟上线-基于函数计算开发 Restful web api & asp.net core web app
.NET Core是一个开源通用的开发框架,支持跨平台, 阿里云函数计算推出了 dotnetcore2.1 runtime, 使用 C# 编写 serverless 函数, 除了很好地支持通常意义上的函数外, 还可以基于函数计算开发 asp.
3539 0
五分钟上线——函数计算 Word 转 PDF 云服务
函数计算的按调用量收费,动态伸缩特性使其比较适合部署在线转化工具(如:图片裁剪,网页转图片,文字转音频)。这类转换工具通常考虑是 cpp 实现,最终编译成二进制的命令行工具或动态链接库。而函数计算支持多种语言运行时,采用 HTTP 协议进行远程调用,也非常适用于异构模式。
2349 0
十分钟上线-函数计算玩转wordpress
## 前言 这篇文章适合所有的php开发新手、老鸟以及想准备学习开发php的程序猿。本文以部署一个wordpress在函数计算环境中为例,向您讲解如何使用阿里云函数计算快速构建或移植基于php框架开发的web,通过本文,您将会了解以下内容: - [案例概览](#concept) - [传统服务器架构 VS Serverless架构](#trad-serverless) - [
1226 0
十分钟上线-函数计算玩转 WordPress
众所周知,PHP 是 Web 编程最流行的编程语言,如果有人告诉你,有 Serverless 的 PHP WEB 开发新模式,你是不是会感到好奇和兴奋?本文以部署 WordPress 工程在函数计算环境中为例,向您讲解如何使用阿里云函数计算快速构建或移植基于 PHP 框架开发的 Web, 体验 serverless 开发web 的新姿势。
5190 0
10分钟上线 - 函数计算实现Serverless图片处理服务
阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务。通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统。接下来我们FC,来快速实现一个图片处理服务。
7550 0
5分钟快速了解Serverless和云函数计算
5分钟快速了解Serverless和云函数计算
0 0
+关注
rsong
python 爱好者,目前主要研究serverless方向
文章
问答
来源圈子
更多
专注 Serverless、微服务、函数计算、Serverless 应用引擎、云原生技术
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
函数计算集团规模化落地实践(3).ppt
立即下载
函数计算事件驱动的serverless计算平台
立即下载
十分钟上线-使用函数计算构建支付宝小程序服务
立即下载