阿里云函数计算 FC3 部署 Laravel10 实践指南

一、函数计算简介

1.1 什么是函数计算

函数计算(Function Compute,简称FC)是阿里云提供的事件驱动型全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码或镜像。函数计算为您准备好计算资源,可靠地运行任务,通过弹性伸缩应对流量峰谷,并提供日志查询、性能监控和报警等功能。

函数计算基于事件驱动的计算模型:您可以在指定函数中创建触发器,该触发器描述了一组规则,当某个事件满足这些规则时,事件源就会触发关联的函数。

1.2 函数计算的主要优势

  • 无服务器架构:无需管理服务器,专注于代码开发
  • 按需付费:只为实际运行的资源付费,空闲不计费
  • 自动弹性伸缩:根据请求量自动扩缩容,应对流量波动
  • 高可用性:自动容灾,确保服务稳定性
  • 简化运维:内置日志、监控和报警功能,降低运维成本

二、部署环境准备

2.1 开发环境

本教程基于以下环境进行部署:

  • PHP 8.1.13
  • Laravel 10
  • 阿里云函数计算 FC3

2.2 前置条件

  • 已有阿里云账号并开通函数计算服务
  • 本地已安装 PHP 8.1 及 Composer
  • 已创建可部署的 Laravel 10 项目

三、详细部署流程

3.1 创建函数计算服务

  1. 登录阿里云函数计算控制台
  2. 选择”服务及函数”,点击”创建服务”
  3. 填写服务名称和描述,其他配置保持默认

3.2 创建并配置函数

  1. 在新创建的服务中,点击”创建函数”

  2. 选择 Web函数 作为函数类型

  3. 运行环境选择 自定义运行时 -> PHP -> PHP 8.1

  4. 代码上传方式选择 通过文件夹上传代码,将本地可运行的 Laravel 项目上传
    函数创建基本配置
    代码配置选项

  5. 高级配置保持默认设置,建议启用日志功能以便问题排查

  6. 点击”创建”完成函数创建

3.3 验证函数部署

  1. 进入函数详情页面,找到”配置→触发器”选项卡
  2. 在触发器信息中可以看到函数的公网访问地址
  3. 使用浏览器访问该地址,验证函数是否正常运行
    触发器配置及访问地址

3.4 配置自定义域名(可选)

为了更好地管理您的应用,您可以配置自定义域名:

  1. 在函数计算控制台的”域名管理”中添加自定义域名
  2. 配置 HTTPS 证书,提升应用安全性
  3. 完成域名解析配置
    域名管理配置

四、常见问题及解决方案

4.1 PHP 共享库加载错误

问题现象

初次部署时,在函数计算环境中使用 php artisan serve --host=0.0.0.0 --port=8000 命令启动 Laravel 应用时,可能会遇到以下错误:

1
2
3
4
5
{
"RequestId": "1-680ef16b-15dbc934-4ea7a8a43130",
"Code": "CAExited",
"Message": "Function instance exited unexpectedly(code 127, message:key has expired) with start command 'php artisan serve --host=0.0.0.0 --port=8000'.\nLogs:\u001b[30;43m WARN \u001b[39;49m /opt/php8.1/bin/php: error while loading shared libraries: libonig.so.5: cannot open shared object file: No such file or directory."
}

根本原因分析

错误原因:PHP 运行时无法找到 libonig.so.5 共享库。这是因为阿里云函数计算的 PHP 8.1 环境中,动态链接库的搜索路径未正确配置,导致无法找到位于 /opt/php8.1/lib 目录下的共享库。

解决方案

在 WebIDE 中,可以通过手动添加库路径来临时解决问题,但这种方法无法持久化到函数运行环境。经过与阿里云技术支持沟通,确定了以下解决方案:

  1. 在项目根目录创建启动脚本 start.sh
1
2
3
4
5
6
7
8
9
#!/bin/bash
# 禁用错误立即退出
set +e
# 添加PHP共享库路径
echo /opt/php8.1/lib >> /etc/ld.so.conf
# 更新动态链接库缓存
ldconfig
# 启动Laravel服务
php artisan serve --host=0.0.0.0 --port=8000
  1. 确保脚本具有执行权限:

    1
    chmod +x start.sh
  2. 修改函数配置,将启动命令设置为 /code/start.sh

函数启动命令配置

说明:此方案通过在函数启动时动态配置系统库路径,解决了共享库加载问题,适用于所有基于 PHP 8.1 的 Laravel 应用部署场景。

4.2 其他常见问题

  1. Laravel 存储目录权限问题:确保 storagebootstrap/cache 目录有正确的写入权限

  2. 环境变量配置:可以在函数配置中设置环境变量,或使用 .env 文件进行配置

  3. 数据库连接问题:确保使用正确的数据库连接配置,可考虑使用阿里云数据库服务

五、最佳实践建议

  1. 资源配置优化:根据应用复杂度合理配置内存和执行超时时间

  2. 缓存利用:对静态资源和查询结果进行缓存,提高响应速度

  3. 冷启动优化:减少依赖项,优化启动脚本,降低冷启动时间

  4. 监控与告警:利用函数计算提供的监控功能,及时发现并解决问题

六、总结

通过本文的指导,您已经了解了如何在阿里云函数计算 FC3 上部署 Laravel 10 应用。函数计算提供了一种经济高效、弹性伸缩的方式来运行您的 Laravel 应用,适合各种规模的项目部署。

虽然在部署过程中可能会遇到一些问题,但通过适当的配置和优化,您可以充分利用函数计算的优势,构建高可用、低成本的 Web 应用。