listmonk 是用 go 编写的独立应用,无需 phpenv;它仅依赖 postgresql 12+、操作系统环境及 smtp 凭据,与 php 完全无关,混淆源于同机共存或错误教程误导。

phpenv 和 listmonk 没有直接关系——listmonk 是用 Go 写的,不依赖 PHP;你不需要、也不应该用 phpenv 来安装或运行它。
如果你看到“phpenv 安装 listmonk”这类说法,大概率是混淆了工具链,或者误把 PHP 环境当成了通用后端依赖管理器。
下面说清楚三个关键点:什么该做、什么不该做、为什么容易搞错。
listmonk 根本不需要 phpenv
listmonk 的二进制文件自带运行时,只依赖:
- PostgreSQL 12+(必须,不是可选)
- 一个能跑 Go 二进制的 Linux/macOS/Windows 环境(无需 Go SDK)
- SMTP 凭据(用于发信,和 PHP 零关系)
它没有 composer.json,不读 php.ini,不调 php-fpm,也不会识别 .php-version。给它配 phpenv 就像给电饭锅装蓝牙模块——物理上能接,但完全没用。
为什么有人会想用 phpenv 装 listmonk?
常见混淆场景:
- 在同台服务器上既跑 PHP 项目(如 WordPress 订阅表单后端),又跑
listmonk,误以为“都要管版本,所以统一用 phpenv” - 看到
listmonk提供 Webhook 或 API,而自己用 PHP 写对接逻辑,就把“PHP 对接”误解为“PHP 运行 listmonk” - 搜索“listmonk docker php”之类关键词,被错误整合教程带偏(比如把 Nginx + PHP-FPM + listmonk 前端反代当成一体部署)
如果你真要共存 PHP 和 listmonk,正确姿势是隔离而非混合
同一台机器上同时存在 PHP 项目和 listmonk 很常见,但它们该各走各的路:
-
listmonk直接运行二进制或 Docker:./listmonk或docker compose up -d - PHP 项目用
phpenv管理自身版本,例如phpenv local 8.3.13,仅作用于该目录下的php命令 - Web 流量分发靠反向代理(Nginx/Apache):PHP 项目走
/wp-admin,listmonk管理后台走/admin,端口和路径完全解耦 - 数据库彻底分开:PostgreSQL 给
listmonk,MySQL/MariaDB 给 PHP 项目(不推荐共用 PostgreSQL schema)
强行让 phpenv 干涉 listmonk 启动过程,只会导致 command not found 或静默失败——因为 phpenv 的 shim 机制只劫持 php、phpize 等命令,对 ./listmonk 完全透明。
真正需要警惕的“伪集成”陷阱
有些教程会建议:
- 在
listmonk的config.toml里填php_path = "/home/user/.phpenv/versions/8.3.13/bin/php"——这个配置项根本不存在,listmonk源码里搜不到php_path - 用
phpenv shell 8.3.13后再执行./listmonk --install——这不会改变任何行为,只是徒增环境变量干扰 - 把
listmonk源码放进 PHP 项目的vendor/目录 ——Go 项目无法被 Composer 加载,go.mod和composer.lock互不兼容
这些操作看似“整合”,实则破坏可复现性。最轻量可靠的组合,就是让 listmonk 自己占一个端口(如 :9000),PHP 项目占另一个(如 :8000),中间用 Nginx 做路由——简单、清晰、出问题能快速定位到哪一层。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











