十分钟上线-函数计算&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 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
13天前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
13天前
|
JavaScript 前端开发 Cloud Native
报名开启!2024 开源之夏丨Serverless Devs 课题已上线!
2024 年,Serverless Devs 再次加入中国科学院软件研究所开源软件供应链点亮计划支持下的系列高校开源活动——开源之夏 2024。
|
9月前
|
弹性计算 人工智能 运维
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线
7月31日,阿里云智能云原生应用平台负责人丁宇宣布,Serverless 应用引擎 SAE2.0 将于8月7日公测上线,开源版将于9月30日发布。本次升级围绕极简体验、标准开放、极致弹性三大优势展开,应用冷启动全面提效,支持缩容到 0,应用成本下降 40% 以上。
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线
|
9月前
|
人工智能 弹性计算 运维
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
66103 53
EMQ
|
NoSQL Serverless Linux
Serverless MQTT 服务即将正式上线、新增 2 个平台安装包
EMQX Cloud Serverless 正式版已于四月初正式上线。该版本通过多租户技术和按量计费的模式,为用户提供了极速的部署创建和有效的成本控制。
EMQ
211 0
Serverless MQTT 服务即将正式上线、新增 2 个平台安装包
|
Serverless
《Serverless 开发实战--十分钟上线一个 Web 应用》电子版地址
Serverless 开发实战--十分钟上线一个 Web 应用
419 0
《Serverless 开发实战--十分钟上线一个 Web 应用》电子版地址
|
弹性计算 运维 监控
阿里云Elasticsearch Serverless 正式上线,免费公测中!!!
11月3日,在2022年云栖大会上阿里云重磅推出Elasticsearch Serverless服务,为用户带来全方位Serverless服务化使用体验。在全观测场景下,实现了对资源的按需取用,从而为用户提供简单易用、弹性灵活、开箱即用的Elasticsearch产品体验,做到快速响应业务变化的同时,合理优化使用成本,助力企业降本增效。
2856 0
阿里云Elasticsearch Serverless 正式上线,免费公测中!!!
|
边缘计算 运维 监控
RDS MySQL Serverless 正式上线,免费公测中
今天,业界领先的阿里云数据库RDS MySQL Serverless正式开始上线公测。Serverless数据库能够使得数据库实例资源随客户业务负载动态弹降,将客户从复杂的业务资源评估和运维工作中解放出来。
1574 1
RDS MySQL Serverless 正式上线,免费公测中
|
Serverless 云计算 开发者
预约下载 | 《Serverless 开发速查手册》全新上线
《Serverless 开发速查手册》实用型电子书即将开放下载,本书由阿里云云原生 Serverless 团队全新制作,带你从 0 入门了解 Serverless 架构及应用场景。
预约下载 | 《Serverless 开发速查手册》全新上线
|
Serverless
重磅推出Serverless云开发新手加油包,让你上线无忧!
云开发平台推出免费体验获得新手加油包活动,体验最领先的Serverless云开发模式,立即领取无门槛代金券加油包。
48956 0
重磅推出Serverless云开发新手加油包,让你上线无忧!

热门文章

最新文章

相关产品

  • 函数计算