命令行工具
lerd-env/lerd avatar
lerd-env/lerd

Lerd:用 Podman 把 Herd 式 PHP 开发环境搬到 Linux 和 macOS

项目速览:适用于 Linux 和 macOS 的开源、类似 Herd 的本地 PHP 开发环境。自动 .test 域、每个项目 PHP/Node 隔离、单命令 TLS。 Podman 原生,无根。

1,288 个 Star78 个 ForkGoMIT

秒懂

它是什么?
Lerd 是一个开源的本地 PHP 开发环境,面向 Linux 和 macOS,用 rootless Podman 容器运行 Nginx、PHP-FPM 和各类服务。它提供自动 .test 域名、每项目 PHP/Node 版本隔离和一条命令的 HTTPS,适合不想碰 Docker 和 sudo 的 PHP 开发者。
适合谁用?
Lerd 适合在 Linux 或 macOS 上做 PHP 开发、讨厌 Docker 或 sudo、希望每个项目独立 PHP/Node 版本的开发者,尤其是 Laravel、Symfony 或 WordPress 用户。不适合已经深度依赖 Docker Compose 或需要 Windows 原生支持的人,因为 WSL2 支持仍是 beta。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题

Linux 上的 PHP 开发者长期缺少一个像 Laravel Herd 那样开箱即用的本地环境。Herd 是商业软件,主要支持 macOS,Linux 用户只能自己拼装 Nginx、PHP-FPM、dnsmasq 和各类数据库,还要处理权限和系统污染。Lerd 的目标就是填补这个空档:用 Podman 容器把整个运行时隔离起来,不需要 Docker,不需要 sudo,也不会在系统里散落配置文件。它面向的是 Laravel、Symfony、WordPress、Drupal、Magento 这些框架的日常开发,核心承诺是一条 lerd link 命令就能让项目跑在 project.test 域名上,并且带 HTTPS。

Podman 原生的架构选择

Lerd 选择 Podman 而不是 Docker,这是一个有意的设计决定。Podman 支持 rootless 模式,普通用户就能管理容器,不需要守护进程,也不需要 sudo。Lerd 的 README 明确说它运行 Nginx、PHP-FPM 和服务作为 rootless Podman 容器。这意味着所有进程都在用户空间内运行,系统层面没有需要 root 的组件。DNS 解析部分也绕开了传统方案:它宣称不需要 dnsmasq,不需要修改系统 resolver,也不需要 sudo。具体怎么实现没有在 README 里展开,但你可以通过 dns:disable 或 dns:repair 命令来切换或修复。这种架构的好处是干净,坏处是你必须依赖 Podman 的 rootless 能力,而某些 Linux 发行版的内核默认可能没开启 user namespace 支持。

域名、TLS 和站点分组

Lerd 的核心工作流是 lerd link,给项目分配一个 .test 域名,并自动签发 HTTPS 证书,证书会在过期前重新签发。它还支持站点分组,让一个主站点拥有基础域名,其他站点作为它的子域名,每个子站点可以有独立或共享的数据库。更实用的是 host-proxy 站点,你可以把 Node、Python 或 Go 的 dev server 跑在宿主机上,由 lerd 的 nginx 代理到 .test 域名,并且同样获得 HTTPS。git worktree 是一等公民:当你执行 git worktree add 时,lerd 会自动检测分支并创建对应的子域名,每个 worktree 可以有自己的 PHP 和 Node 版本,甚至可以隔离数据库。lwd 命令 lerd worktree wait 会阻塞直到 worktree 准备好。对于团队协作或并行开发多个分支,这能省下大量手动配置时间。

每项目运行时隔离

PHP 版本从 8.1 到 8.5,外加一个冻结的 7.4 和 8.0 旧版层,用于老项目。切换版本只需点击一下,每个项目独立。Node.js 也有类似隔离,支持 Node 22 或 24,通过内置的 fnm 或你已有的 nvm 管理,也可以选择 bun 作为 JS 运行时。自定义 PHP 扩展和 Alpine 包可以声明一次,然后应用到 lerd 构建的每个镜像上。这解决了多个项目需要不同 PHP 版本时的冲突问题。不过,这种隔离的代价是每个项目都要构建或拉取镜像,磁盘占用和首次启动时间会明显高于直接在宿主机装一个全局 PHP。如果你只有一个项目,这种隔离可能显得多余。

框架自动配置的代价

Lerd 宣称无需每个框架的手动设置,当你 link 一个项目时,它会自动配置 worker、环境变量和 nginx vhost。关键是它直接修改项目里的环境文件,比如 Laravel 的 .env、WordPress 的 wp-config.php、Magento 的 env.php 或 Drupal 的 settings.php。这意味着 lerd 会写入你的项目文件,而不是在一个独立的配置层里做映射。对很多开发者来说,这很方便,但也可能引发问题:如果你的团队对 .env 有严格的版本控制或模板管理,lerd 的自动写入可能覆盖手工改动。README 没有说明是否有冲突检测或备份机制,这是一个需要你自己验证的盲点。

调试和性能工具

Lerd 内置了一个调试窗口,能拦截 dump() 和 dd() 调用,把输出流到 Web UI、TUI、MCP 和 lerd dump tail 命令。它还能捕获 SQL 查询,检测 N+1 和慢查询,并显示邮件、视图、事件、队列任务和 HTTP 请求,但仅限 Laravel 和 Symfony。SPX profiler 可以一键开启,每个 PHP-FPM 请求都会生成火焰图,在仪表盘的 Profiler 视图里查看,无需重启 FPM 或改代码。还有请求时间分析,记录每个站点的典型响应时间、p95、吞吐量和错误率,并列出最慢的路由。这些工具集成度很高,但要注意它们对框架有依赖,Laravel 和 Symfony 之外的框架可能无法获得全部功能。

Web UI、TUI 和离线文档

Lerd 自带一个 Web UI,可以管理站点和服务,有实时组件、全局 Cmd+K 命令面板,支持十四种语言,还能从另一台机器访问,但需要凭据,涉及宿主机的操作默认不开放,需要你显式授权。也可以从仪表盘直接创建新项目,选择框架商店里的模板,然后运行 composer 和 JS 构建。终端用户可以用 lerd tui,一个 btop 风格的界面,实时状态、站点详情、域名和版本编辑、shell 切入、日志跟踪。文档以离线形式打包在二进制里,在仪表盘里可搜索,lerd man 可以在终端阅读。对于在没有网络的环境下工作,这个设计很实用。

服务、数据库和 IDE 集成

数据库和服务通过一键添加,包括 MySQL、PostgreSQL、Redis、Meilisearch、RustFS、Mailpit、Reverb 和 OpenSearch。默认构建栈内置,附加服务来自商店,商店更新不需要升级 lerd。你可以创建、删除、快照、导出和导入数据库。宿主机上的 psql、mysql、pg_dump 等工具可以直接连接 lerd 的引擎,不需要在容器里安装客户端,也不需要记住端口。IDE 集成方面,JetBrains 用户会获得一个自动配置的数据源,指向项目自己的 lerd 数据库,端口是实际监听的端口,并且会在数据库变化时刷新。这个机制减少了 IDE 配置的摩擦,但只提到 JetBrains,VS Code 用户需要自己配置。

编辑结论

Lerd 适合在 Linux 或 macOS 上做 PHP 开发、讨厌 Docker 或 sudo、希望每个项目独立 PHP/Node 版本的开发者,尤其是 Laravel、Symfony 或 WordPress 用户。不适合已经深度依赖 Docker Compose 或需要 Windows 原生支持的人,因为 WSL2 支持仍是 beta。采用前先验证三件事:你的内核是否支持 rootless Podman(检查 /proc/sys/kernel/unprivileged_userns_clone),你的项目框架是否在框架商店里有定义,以及你能否接受 lerd 写入 .env 或 wp-config.php 这类文件的行为。Lerd 的更新节奏很快,v1.33.1 到 v1.33.0 只隔一天,但 MIT 许可证和 Go 单二进制发布让升级成本较低。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记