CF Lumen 教程,使用 Cloud Foundry 从零部署 Lumen API
本文中的“CF”指 Cloud Foundry,一个很流行的开源 PaaS 平台,如果你说的 CF 是 Cloudflare,也可以直接跳到文末查看补充说明。
Lumen 是什么?为什么用 Cloud Foundry?
Lumen 是 Laravel 官方推出的 PHP 微框架,它保留了 Laravel 的优雅语法,但更轻量,非常适合开发 API、微服务和中间件。

Cloud Foundry(CF) 是一个应用托管平台,开发者只需要通过 cf push 命令,就能把应用部署到云端,不用花太多时间折腾服务器、Nginx、PHP-FPM 这些环境。
CF + Lumen 是一种很适合做快速 API 开发的组合。
准备工作
开始之前,你需要准备以下环境:
- 一个 Cloud Foundry 账号,以及平台提供的 API 地址。
- 本地安装
cf命令行工具。 - 本地安装 PHP 7.4 或更高版本。
- 安装 Composer。
确认 cf 能正常使用:
cf --version
如果还没登录,可以先登录:
cf login -a https://api.your-cf.example.com
创建 Lumen 项目
使用 Composer 创建 Lumen 项目:
composer create-project --prefer-dist laravel/lumen lumen-demo
进入项目目录:
cd lumen-demo
复制环境配置:
cp .env.example .env
生成一个 APP_KEY,用于 Lumen 的加密功能:
php -r "echo bin2hex(random_bytes(16));"
把生成的字符串填入 .env 文件:
APP_NAME=LumenDemo APP_ENV=production APP_DEBUG=false APP_KEY=你生成的随机字符串
先本地跑起来测试一下:
php -S 0.0.0.0:8080 -t public
访问 http://localhost:8080,如果能看到 Lumen 版本信息,说明项目创建成功。
添加一个简单的 API 路由
打开 routes/web.php,添加一个测试接口:
<?php
/** @var \Laravel\Lumen\Routing\Router $router */
$router->get('/', function () use ($router) {
return $router->app->version();
});
$router->get('/api/ping', function () {
return response()->json([
'status' => 'ok',
'message' => 'pong',
'time' => time(),
]);
});
再测试一下:
php -S 0.0.0.0:8080 -t public curl http://localhost:8080/api/ping
如果返回 JSON 数据,说明路由没问题。
准备 Cloud Foundry 部署配置
在项目根目录创建 manifest.yml 文件:
applications:
- name: lumen-demo
memory: 128M
disk_quota: 256M
instances: 1
buildpack: php_buildpack
path: .
command: heroku-php-apache2 public/
env:
APP_ENV: production
APP_DEBUG: false
APP_KEY: 你生成的随机字符串
这里的重点:
buildpack使用的是 Cloud Foundry 的 PHP 构建包。command里的heroku-php-apache2是 PHP 构建包提供的 Web 服务器启动命令。public/是 Lumen 应用的 Web 根目录,这个很关键,否则访问会 404。
如果你的 Cloud Foundry 平台支持 Nginx,也可以改成:
command: heroku-php-nginx public/
不同平台的 PHP 构建包版本可能略有差异,以平台文档为准。
推送部署到 Cloud Foundry
先确认当前所在的 org 和 space:
cf target -o 你的组织 -s 你的空间
如果没有 space,可以创建:
cf create-space lumen-demo cf target -s lumen-demo
然后直接推送:
cf push
Cloud Foundry 会读取 manifest.yml,上传代码,安装 PHP 依赖,然后启动应用。
部署完成后,控制台会输出应用地址,
urls: ["lumen-demo.apps.your-cf.example.com"]
访问测试:
curl https://lumen-demo.apps.your-cf.example.com/api/ping
如果返回:
{
"status": "ok",
"message": "pong",
"time": 1690000000
}
说明已经部署成功。
查看日志和排查问题
如果部署有问题,可以先看日志:
cf logs lumen-demo --recent
常见的坑:
-
访问 正常,访问其他路径 404
多半是 Web 根目录没指向public,检查 manifest 里的启动命令。 -
PHP 扩展缺失
可以在项目composer.json里声明需要的扩展,或者参考 Cloud Foundry PHP buildpack 的配置方式安装扩展。 -
环境变量没生效
检查manifest.yml里的env是否写对,也可以执行:cf env lumen-demo
查看当前应用的环境变量。
扩缩容与版本更新
Cloud Foundry 扩容非常方便:
cf scale lumen-demo -i 2 -m 256M
修改代码后,重新执行:
cf push
Cloud Foundry 会使用滚动方式更新应用实例,尽量保证服务不中断。
补充:如果你说的 CF 是 Cloudflare
很多人也把 Cloudflare 简称为 CF。
Lumen 应用部署到服务器或 Cloud Foundry 后,同样可以接入 Cloudflare:
- 在 Cloudflare DNS 中添加一个记录,指向你的应用域名。
- 开启 Proxy 代理(橙色云图标)。
- SSL/TLS 模式选择
Full (Strict)。 - Lumen 跑在 Nginx 后面,可以在 Nginx 中配置:
set_real_ip_from 173.245.48.0/20; real_ip_header CF-Connecting-IP;
这样应用就能拿到用户真实 IP。
- 对于
/api/这种动态接口,不建议直接缓存;如果要缓存静态资源,可以单独配置 Cache Rules 或 Page Rules。
Lumen 轻量,Cloud Foundry 部署方便,两者结合非常适合作 API 服务,只要把本地 Lumen 项目准备好,写一个 manifest.yml,然后执行 cf push,就能完成上线,遇到问题多看 cf logs,部署一次以后,你会觉得整个过程非常简单。
<< 上一篇
