buffalo 默认端口为3000,开发时通过addr或port环境变量修改,生产运行时用--port参数或addr环境变量覆盖,硬编码需修改grifts/init.go中buffalo.new的port选项。

Buffalo 默认监听端口是 3000,改端口不靠 r.Run() 那套
Buffalo 是全栈框架,启动逻辑封装在 CLI 工具里,不是手写 http.ListenAndServe。直接改代码里的监听调用无效,因为 Buffalo 的 dev server(buffalo dev)和 prod server(buffalo build 后的二进制)都绕过你写的 main.go 中的 net/http 启动逻辑。
buffalo dev 时通过环境变量指定端口
开发阶段最常用的方式是设环境变量,Buffalo 会自动读取:
-
ADDR:格式为HOST:PORT,例如ADDR=:8080或ADDR=127.0.0.1:3001 -
PORT:仅端口号,Buffalo 会自动补成:PORT,例如PORT=8080
优先级:如果同时设了 ADDR 和 PORT,ADDR 生效。命令行示例:
ADDR=:8080 buffalo dev # 或 PORT=8080 buffalo dev
生产构建后运行时换端口:用 --port 参数或 ADDR
执行 buffalo build 生成的二进制默认监听 :3000,但支持运行时覆盖:
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- 用
--port:如./myapp --port 8080 - 仍可用
ADDR环境变量:ADDR=:8080 ./myapp -
--port优先级高于ADDR(仅对二进制生效)
注意:这些参数只影响 HTTP server,不改变 WebSocket 或静态文件服务的绑定行为——Buffalo 把它们都统一到同一个 listener 上。
想硬编码改端口?得动 grifts/init.go 和 actions/app.go
极少数场景需要彻底固化端口(比如嵌入式部署),就得改源码:
- 打开
grifts/init.go,找到buffalo.New调用,传入buffalo.Options{Port: 8080} - 检查
actions/app.go中app.Serve是否被手动调用;若存在,确保它没再覆盖Port字段 - 修改后必须重新
buffalo build,否则buffalo dev仍以环境变量为准
这个路径容易漏掉 grifts/init.go 里的配置,导致改了 app.go 却没生效——Buffalo 的初始化顺序是先 init.go 构建 app 实例,再交由 app.go 启动。










