讲师中心 微信公众号
AI工具推荐 视频效率加速

Horizon在FrankenPHP架构里怎么部署

云明君_7495

云明君_7495

发布时间:2026-10-07 14:21:16

|

991人浏览过

|

来源于php中文网

原创

Horizon 是独立于 FrankenPHP 的 Laravel 队列监控进程,需单独启动、守护并配置专用 Redis 连接(名为 horizon),不可与 FrankenPHP 共容器或共 Supervisor;其路由需手动启用,面板依赖正确 auth 授权和 HORIZON_ENABLED 环境变量。

horizon在frankenphp架构里怎么部署

Horizon 要跑在 PHP 进程里,不是 FrankenPHP 的一部分

FrankenPHP 管 HTTP 入口、静态文件、TLS 和 PHP 执行环境,但它不接管 Laravel 队列逻辑。Horizon 本质是 Laravel 的一个 Artisan 命令进程(php artisan horizon),必须单独启动、单独守护,和 FrankenPHP 是并列关系,不是子服务。

常见误解是以为配好 FrankenPHP 就能自动拉起 Horizon —— 实际上它完全没感知。你得像在 Nginx + PHP-FPM 环境里一样,为 Horizon 单独准备运行时、Redis 连通性、Supervisor 守护和权限策略。

  • FrankenPHP 启动后监听 :80 和 :443,只处理 HTTP 请求;Horizon 默认监听 Redis 的 horizon:* 键,完全不走 HTTP 端口
  • 两者共用同一份 .env 和 config/horizon.php,但进程隔离:FrankenPHP 是 Go 主进程,Horizon 是独立的 PHP CLI 进程
  • 如果你用 Docker 部署,别把 Horizon 塞进同一个容器——它会和 FrankenPHP 抢 CPU、日志混乱、重启策略冲突;推荐拆成两个 service:一个 web(FrankenPHP),一个 horizon(纯 PHP CLI)

Redis 连接必须双配置:FrankenPHP 用一套,Horizon 用另一套

Horizon 强制要求 Redis 驱动,且内部硬编码使用名为 horizon 的连接名(来自 config/database.php 的 redis.horizon)。而 FrankenPHP 自身不依赖这个连接名,它只管 PHP 运行时是否能执行 Redis::ping() —— 但 Horizon 启动失败时,报错往往藏在静默里,实际卡在连接名不匹配。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • 检查 config/database.php 中是否存在 'horizon' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), ... ] 块,不能只靠 default 或 cache
  • .env 中要显式定义 REDIS_HORIZON_HOST 等变量,并在配置中引用,避免和主 Redis 连接混用
  • 运行 php artisan tinker 后执行 config('database.redis.horizon.host') 和 Redis::connection('horizon')->ping(),两步都成功才算过关
  • FrankenPHP 容器内若用 localhost 指向 Redis,Horizon 容器必须用 Docker 网络别名(如 redis),否则 connection refused 是常态

Supervisor 守护 Horizon 进程,别用 FrankenPHP 的 auto-restart

FrankenPHP 的 restart: always 只对它自己的 HTTP 服务生效,对 Horizon 进程零作用。Horizon 是常驻 CLI 进程,一旦崩溃或被 OOM kill,必须靠 Supervisor 拉起,否则面板白屏、快照停更、失败任务堆积。

立即学习“PHP免费学习笔记(深入)”;

  • Supervisor 配置里 command 必须带 --daemon:php /app/artisan horizon --daemon,不加则进程启动即退出
  • 不要在 Supervisor 里同时跑 queue:work 和 horizon —— 两者都会消费 Redis 队列,导致任务重复执行或漏执行
  • Supervisor 的 autostart=true 和 autorestart=true 必须启用,且 startsecs=3(Horizon 启动较慢,设太短会被判失败)
  • 日志路径建议分开:stdout_logfile=/var/log/horizon.log,别和 FrankenPHP 的 access/error 日志混在一起,排查时容易串行

Horizon 面板路由和权限必须手动放开,FrankenPHP 不自动注入

FrankenPHP 不修改 Laravel 的服务提供者加载顺序,也不干预 Route::middleware() 行为。Horizon 默认只在 APP_ENV=local 下注册路由,生产环境必须显式放行,否则 /horizon 永远 404。

  • 确认 App\Providers\HorizonServiceProvider::class 在 config/app.php 的 providers 数组中未被注释
  • 在 AppServiceProvider::boot() 里写授权回调:Horizon::auth(fn ($request) => $request->user()?->can('viewHorizon')),别用 fn () => true 上线
  • config/horizon.php 中 'enabled' => env('HORIZON_ENABLED', true),并在 .env 里设 HORIZON_ENABLED=true
  • FrankenPHP 的 php_server 指令只处理 .php 文件和 FastCGI 协议,Horizon 面板是 Laravel 的普通路由,只要 PHP 环境正常、路由注册成功,它就能响应 —— 不需要额外 Caddy 重写规则
FrankenPHP 和 Horizon 的耦合点其实非常薄:只有共享 Redis 和共用一份 Laravel 配置。最容易被忽略的是 Horizon 的 Redis 连接名硬编码和 Supervisor 的 --daemon 参数 —— 这两个点没踩准,整个监控就失效,但错误日志里往往只字不提。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

10124

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

6001

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2075

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

3768

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

4454

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

3491

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4997

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3902

2023.11.13

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn