buffalo build 才是构建项目生产二进制包的命令,生成内嵌模板、静态资源和迁移sql的单文件(默认 ./bin/myapp);需先设 env=production、执行 buffalo db migrate,并可精简资源以减小体积。

buffalo install 命令不生成生产二进制包
直接运行 buffalo install 或 go install 安装的是 CLI 工具本身(即 buffalo 命令),不是你项目的生产可执行文件。很多人卡在这一步,以为装完 CLI 就能直接部署,结果发现没有 ./bin/myapp 可运行。
真正要生成生产二进制包得用 buffalo build
buffalo build 才是构建项目最终产物的命令,它会把 Go 代码、模板(templates/)、静态资源(assets/)、数据库迁移 SQL 全部打包进一个单文件二进制中。默认输出路径是 ./bin/myapp(myapp 是项目名)。
常见操作:
- 在项目根目录下执行
buffalo build,生成内嵌资源的二进制 - 加
--static参数(buffalo build --static)则只编译前端资产到public/,不打包进二进制——适合配合 Nginx 部署 - 加
-o ./dist/app可自定义输出路径和文件名 - 生产环境务必先设
ENV=production,否则buffalo build仍可能保留调试中间件或未压缩资源
注意 buffalo build 的隐式依赖和体积问题
生成的二进制默认包含所有 templates/ 和 assets/,实际体积常超 30MB。这对容器部署很不友好——标准 Go scratch 镜像期望控制在 10–15MB 内。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
如果你只需要 API 服务,建议提前精简:
- 删掉
templates/和assets/目录(buffalo new --api生成的也含这些冗余) - 注释掉
app.Use(r.PopTransaction)、app.ServeFiles等非必要中间件和路由 - 确认没调用
r.HTML,只用r.JSON或c.Render输出结构化数据 - 此时再
buffalo build,体积会明显下降;若仍偏大,可切回原生go build -ldflags="-s -w"手动构建
验证二进制是否可用:别跳过 ENV=production
直接运行 ./bin/myapp 很可能 panic 或暴露敏感信息,因为 Buffalo 默认按开发模式加载配置。
必须显式指定环境:
ENV=production ./bin/myapp- 或写进 systemd service 文件:
Environment="ENV=production" - 检查
database.yml是否已切换到 production section,避免连错数据库 - 错误页(404/500)在
buffalo build后自动生效,无需额外复制模板文件
最易被忽略的一点:build 前没跑 buffalo db migrate,会导致二进制启动时因 schema 缺失直接 crash——迁移必须在 build 之前完成,且 migration 文件需保留在 db/migrations/ 中(buffalo build 会读取它们并打包 SQL)。










