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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
函数计算FC,每月15万CU 3个月
简介: 这篇文章是[十分钟上线-函数计算玩转 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

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
4月前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
2月前
|
人工智能 前端开发 搜索推荐
详解基于百炼平台及函数计算快速上线网页AI助手
通过阿里云百炼平台,企业可在10分钟内为其网站添加智能客服系统,提升用户体验并降低成本。流程包括:创建大模型应用、配置参数(如温度系数以控制回复的随机性)、发布应用获取API密钥;使用函数计算快速搭建示例网站,并通过简单的代码更改启用AI助手功能;还可导入私有知识库增强助手的能力。前端基于NLUX开发,支持定制化需求如样式调整和历史会话管理。服务端代码提供了调用大模型获取答案的接口。借助百炼平台,企业能迅速部署即时且个性化的在线服务,适应数字化转型的需求。
|
4月前
|
JavaScript 前端开发 Cloud Native
报名开启!2024 开源之夏丨Serverless Devs 课题已上线!
2024 年,Serverless Devs 再次加入中国科学院软件研究所开源软件供应链点亮计划支持下的系列高校开源活动——开源之夏 2024。
|
4月前
|
前端开发 Serverless Shell
Serverless 应用引擎操作报错合集之在阿里云函数计算中,laravel zip包使用示例的start.sh脚本启动时出现错误代码如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
人工智能 弹性计算 运维
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
70355 53
|
弹性计算 人工智能 运维
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线
7月31日,阿里云智能云原生应用平台负责人丁宇宣布,Serverless 应用引擎 SAE2.0 将于8月7日公测上线,开源版将于9月30日发布。本次升级围绕极简体验、标准开放、极致弹性三大优势展开,应用冷启动全面提效,支持缩容到 0,应用成本下降 40% 以上。
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线
EMQ
|
NoSQL Serverless Linux
Serverless MQTT 服务即将正式上线、新增 2 个平台安装包
EMQX Cloud Serverless 正式版已于四月初正式上线。该版本通过多租户技术和按量计费的模式,为用户提供了极速的部署创建和有效的成本控制。
EMQ
233 0
Serverless MQTT 服务即将正式上线、新增 2 个平台安装包
|
Serverless
《Serverless 开发实战--十分钟上线一个 Web 应用》电子版地址
Serverless 开发实战--十分钟上线一个 Web 应用
429 0
《Serverless 开发实战--十分钟上线一个 Web 应用》电子版地址
|
弹性计算 运维 监控
阿里云Elasticsearch Serverless 正式上线,免费公测中!!!
11月3日,在2022年云栖大会上阿里云重磅推出Elasticsearch Serverless服务,为用户带来全方位Serverless服务化使用体验。在全观测场景下,实现了对资源的按需取用,从而为用户提供简单易用、弹性灵活、开箱即用的Elasticsearch产品体验,做到快速响应业务变化的同时,合理优化使用成本,助力企业降本增效。
2927 0
阿里云Elasticsearch Serverless 正式上线,免费公测中!!!
|
边缘计算 运维 监控
RDS MySQL Serverless 正式上线,免费公测中
今天,业界领先的阿里云数据库RDS MySQL Serverless正式开始上线公测。Serverless数据库能够使得数据库实例资源随客户业务负载动态弹降,将客户从复杂的业务资源评估和运维工作中解放出来。
1625 1
RDS MySQL Serverless 正式上线,免费公测中

相关产品

  • 函数计算
  • 下一篇
    云函数