@ fjall/ 负载
AWS Lambda 适配器,用于有效载荷CMS. 这个软件包为Bayload的数据库和存储适配器提供倒置替换,优化后用于AWS上的无服务器部署.
安装
npm install @fjall/payload @payloadcms/storage-s3
特征
fjallPostgresAdapter- 装有 AWS 保密管理器集成的 PostgreSQL 适配器awsS3Storage- S3 媒体上传存储插件fjallDefaults- Lambda的感知性CORS/CSRF默认值isProduction编号 :isLambda- 环境检测助手
使用量
数据库适配器
// payload.config.ts
import { buildConfig } from "payload";
import { fjallPostgresAdapter, fjallDefaults } from "@fjall/payload";
import { migrations } from "./migrations";
export default buildConfig({
...fjallDefaults(),
db: await fjallPostgresAdapter({
migrationDir: "./src/migrations",
prodMigrations: migrations,
}),
// ... rest of config
});
适配器自动:
- 从 Lambda 的 AWS 保密管理器获取数据库证书
- 倒计时
DATABASE_URL地方发展 - 为 Aurora PostgreSQL 配置 SSL
- 使得Habload的迁移相互等待, 所以环境开始一起运行 每一个迁移一次。 每次运行都会在迁移时在自己的连接上挂起Postgres咨询锁(1718250604, 1),而等待15分钟的运行会因错误而失败,从而命名了锁
S3 存储插件
// plugins/index.ts
import { awsS3Storage } from "@fjall/payload";
import { Plugin } from "payload";
export const plugins: Plugin[] = [awsS3Storage()];
自动插件 :
- 用途
MEDIA_BUCKET_NAMEfjall基础设施设置的环境变量 - 处理上传的预先签名的 URL
- 返回本地文件系统进行开发
环境检测
import { isProduction, isLambda } from "@fjall/payload";
// Conditional logic based on environment
if (isProduction()) {
// Running in AWS with Fjall infrastructure
}
if (isLambda()) {
// Running in AWS Lambda runtime
}
有条件的静态目录
对于需要本地上传到 dev 但制作中S3的媒体收藏:
import { isProduction } from "@fjall/payload";
import path from "path";
export const Media: CollectionConfig = {
slug: "media",
upload: {
...(isProduction()
? {}
: {
staticDir: path.resolve(__dirname, "../../public/media"),
}),
},
};
环境变量
生产(兰布达)
由 Fjall 基础设施自动设定 :
| 变量 | 说明 |
|---|---|
DATABASE_HOST | 奥罗拉 PostgreSQL 终点 |
DATABASE_PORT | 数据库端口( 默认: 5432) |
DATABASE_NAME | 数据库名称 |
DATABASE_SSL | 启用 SSL ()true(中文(简体) ) |
MEDIA_BUCKET_NAME | S3 上传桶 |
从保密管理器获取的证书 :
DATABASE_USERNAMEDATABASE_PASSWORD
发展
| 变量 | 说明 |
|---|---|
DATABASE_URL | 完整的 PostgreSQL 连接字符串 |
设立和部署有效载荷项目
也没有 fjall create app 也没有 fjall deploy 为Lambda设置有效载荷项目. fjall create app --name <app> --pattern payload --non-interactive 写入 fjall/<app>/infrastructure.ts, (中文(简体) ), fjall/<app>/open-next.config.ts,旁边的 CDK 项目文件和应用程序的配置文件, 没有任何东西可以改变您的项目自己的文件 。 在没有 --non-interactive, (中文(简体) ), fjall create app 打开应用程序向导,该向导忽略 --pattern: 运行 fjall create 选择 模式 换句话说 一次手动配置项目,再在项目根部进行构建,并部署所生成的东西. 整个食谱在 有效载荷图案页。 。 。 .
在Lambda,一个部署在这条路的场地需要fjall 39.0.13或后期建造. 有效载荷模式赋予其服务器功能数据库用户名和密码,以及 PAYLOAD_SECRET,通过Fjall的秘密支持,并通过fjall 39.0.12的支持不能提供. 从代码读取,从39.0.8到39.0.12,功能的每个起步都会在其处理器运行前在Fjall的秘密解析器中停止,在39.0.8之前,一个起步可以跳过解析器,开始时没有秘密. 原因是AWS的参数和秘诀Lambda扩展的版本fjall 39.x pins, 1.0.103:在2026年10月15日于我们-东-2的arm64上测出,它以一个功能启动的前8秒以未准备好的拒绝来回答每个40个读取,从代码中读取,解答者将该拒绝视为最终拒绝. 从39.0.13起,解析器读取系统管理器和秘密管理器本身,从而不再停止一个功能可通达两个服务的有效载荷站点,以及 fjallPostgresAdapter 取已移交的解析器的值。 有效载荷站点尚未结束.
配置项目
在工程根工作, 保存的目录 package.json 编辑 fjall/ 文件夹。 下面的命令使用 npm.
- 安装此软件包和 S3 存储适配器 :
npm install @fjall/payload @payloadcms/storage-s3。 。 。 . - 单位
payload.config.ts,使用时fjallPostgresAdapter与prodMigrations扩展fjallDefaults()输入buildConfig,作为 数据库适配器 显示。 在第一个迁移存在之前,创建src/migrations/index.ts持有export const migrations = [];因此,导入解析度,然后生成第一个迁移npx payload migrate:create在第一个建筑之前. - 添加
awsS3Storage()到工程的插件,并保留staticDir媒体收藏中未制作的 S3 存储插件 财务报告和审定财务报表 有条件的静态目录 显示. - 守护运行期间的每一个数据库查询
next build,正如有效载荷模式页面显示的网站模板页面:agenerateStaticParams返回时[]何时isBuildTime()真实, 以及查询导出时的页面dynamic = "force-dynamic"。 。 。 . - 在为 AWS 构建前请注释
DATABASE_URL财务报告和审定财务报表NEXT_PUBLIC_SERVER_URL地点.env或者说.env.production摆放它们,在哪里.env.local或者说.env.production.local是的,建筑读取。 下册.j 副本.env财务报告和审定财务报表.env.production输入其独立的输出和 OpenNext 复制到服务器函数(Next.js 16.3.8 和@opennextjs/aws4.1.6, 读取),所以其中的每一个价值都与所部署的地点相符合. - 请检查access-date=中的日期值 (帮助)
npm ls next,然后寻找一个buildCommand输入config目标fjall/<app>/open-next.config.ts:fjall 39.x 写出没有文件,后来的 CLIs 写出buildCommand: "npm run build -- --webpack"。在下.js 16 上,配置需要该行,如果缺少该行,则添加该行: Next.js 16 默认使用涡轮包装来建起,而涡轮包装建筑则指由散列名称所形成的尖锐而不能在Lambda上解决,因此每个路由回答500个(vercel/next.js issue 87737,于2026-09-28日开放;用 Next.js 16.3.3 与下@opennextjs/aws4.1.0. (中文(简体) ). 在下行.js 15上,删除该行,如果有的话, OpenNext 运行npm run build: 下一个.js 15 已经用网络包构建并拒绝--webpack作为未知的选项(Next.js 15.4.11,已读).
建设和部署
fjall deploy 运行其建设步骤 fjall/<app>,它失败的应用程序 被设定为 fjall create app 摆出它。 项目根数 :
-
安装 OpenNext 构建器 :
npm install --save-dev @opennextjs/aws@^4.1.6。不要通过npx open-next: 未安装构建器, npx 获取open-next3.1.3 取而代之的是来自登记册,超出这一范围. -
将导入地图写入项目自己的有效载荷 CLI :
./node_modules/.bin/payload generate:importmap。 。 。 . -
构建 :
./node_modules/.bin/open-next build --config-path fjall/<app>/open-next.config.ts没有--config-path,打开后一段open-next.config.ts在项目根处. -
检查
.open-next/server-functions/default/node_modules/sharp/package.json财务报告和审定财务报表.open-next/image-optimization-function/node_modules/sharp/package.json都说0.35.5@img/sharp-linux-arm64每一个。 然后检查该建筑没有与涡轮包装运行:grep -rlE 'sharp-[0-9a-f]{8,}' .open-next/server-functions/default绝对不能打印。 它所打印的一个文件指由散列名所拼写出的一个涡轮包构建;设置构建命令并再构建. 于2026年10月15日与Next.js 16.3.8 和@opennextjs/aws4.1.6 在输入锐利的最小应用程序上,grep打印出涡轮包所建的服务器块,没有用于网页包;在Next.js15.4.10上的Webpack所建的Webload网站模板包也打印出任何内容.fjall 39.0.7 并后写出将尖口0.35.5放入两个功能的安装块. 一个早期CLI的应用脚手架 保留了它用脚手架的块 直到你替换它
sharpInstallConfig使用有效载荷模式页给出的状态声明. -
部署:
fjall deploy <app> --skip-build。 。 。 .
在每次部署改变项目代码或迁移之前,用步骤2至步骤4重建: --skip-build 随时随地部署 .open-next 别动.
许可证
专有——见 自由主义。 。 。 .