phpEnv 不支持安装或运行 listmonk,因其是独立 Go 二进制程序,不依赖 PHP;正确方式是单独部署或使用 Docker,需避免端口、数据库和文件路径冲突。

phpEnv 本身不支持安装或运行 listmonk。
listmonk 是用 Go 编写的独立二进制程序,不依赖 PHP 运行时,也不兼容 phpEnv 的环境管理逻辑。试图在 phpEnv 中“安装 listmonk”会失败,因为:
-
phpEnv只管理 PHP 版本和扩展,无法启动 Go 程序; -
listmonk自带 Web 服务(默认监听9000端口),不走 PHP-FPM 或 Apache/Nginx 的 PHP 处理链; - 它的数据库驱动(PostgreSQL)、SMTP 客户端、模板渲染等全部内置于二进制中,与 PHP 无关。
为什么有人误以为 phpEnv 能装 listmonk?
常见混淆点来自两个层面:
- 看到“邮件列表”就联想到传统 PHP 邮件系统(如 PHPList、MailWizz);
- 在本地开发环境里同时装了
phpEnv和listmonk,误把共存当成依赖关系。
listmonk 正确的本地部署路径(绕过 phpEnv)
你完全可以在同一台机器上运行 phpEnv(用于 PHP 项目)和 listmonk(独立服务),只需互不干扰端口和数据库即可:
立即学习“PHP免费学习笔记(深入)”;
- 下载对应平台的
listmonk二进制(Linux/macOS/Windows),别解压到phpEnv目录下; - 执行
./listmonk --new-config生成config.toml,把[db]段配成独立 PostgreSQL 实例(不能复用phpEnv自带的 SQLite 或 MySQL); - 用环境变量预设管理员账号再初始化:
LISTMONK_ADMIN_USER=admin LISTMONK_ADMIN_PASSWORD=xxx ./listmonk --install; - 启动时指定非冲突端口(如
ADDRESS = "127.0.0.1:9001"),避免和phpEnv的 Nginx/Apache 占用的80/443冲突。
Docker 方式更干净(推荐替代 phpEnv 场景)
如果你用 phpEnv 是为了隔离环境,那 docker compose 对 listmonk 更合适:
- 它自带 PostgreSQL 容器,无需你手动装 DB;
- 网络自动桥接,
listmonk服务只暴露9000端口,和你的 PHP 服务完全解耦; - 配置文件
config.toml放在宿主机,容器内只读挂载,修改即生效; - 升级只需换镜像标签,不用碰
phpEnv的任何路径或软链接。
硬要和 phpEnv 共享服务器?注意这三点
若你坚持在同一台 VPS 或开发机上共存两者,必须确认:
-
phpEnv启动的 Web 服务(如 Apache)不能监听9000端口,否则listmonk启动报错address already in use; - PostgreSQL 必须是独立实例(不是
phpEnv附带的轻量版),listmonk不支持 MySQL 或 SQLite; - 上传目录(
UPLOADS_PATH)不能设成phpEnv的 webroot 下,否则可能被直接 HTTP 访问到原始附件。
真正麻烦的从来不是“怎么装”,而是“误判技术边界”。listmonk 和 phpEnv 属于不同抽象层——一个跑在操作系统进程级,一个管 PHP 解释器版本。强行拉通,只会让配置散落、端口打架、数据库权限混乱。



















