本文目录导读:

- 目录导读
- 什么是Valet共享?为什么你需要它?
- Valet共享的工作原理(一条命令背后的秘密)
- 环境要求与前置准备
- 手把手教程:从安装到首次共享(含常见报错解法)
- Valet共享 vs Ngrok vs Laravel Herd:三强对比
- 进阶技巧:绑定自定义域名、HTTPS、限时链接
- 安全须知:公网暴露的5个必知风险
- 问题排查FAQ(共享失败/缓慢/端口冲突)
PHP开发者的效率神器:Valet共享功能完全指南(Local by Valet vs Ngrok对决)**
目录导读
- 什么是Valet共享?为什么你需要它?
- Valet共享的工作原理(一条命令背后的秘密)
- 环境要求与前置准备(PHP 8.x + macOS/Linux)
- 手把手教程:从安装到首次共享(含常见报错解法)
- Valet共享 vs Ngrok vs Laravel Herd:三强对比
- 进阶技巧:绑定自定义域名、HTTPS、限时链接
- 安全须知:公网暴露的5个必知风险
- 问题排查FAQ(共享失败/缓慢/端口冲突)
什么是Valet共享?为什么你需要它?
如果你是一名PHP开发者(尤其是Laravel、Symfony或WordPress用户),很可能正在用Laravel Valet作为本地开发环境,Valet是Mac/Linux系统上极简的PHP开发工具,它利用Caddy(或Nginx)在本地提供站点服务,但你有没有遇到过这样的场景:
- 给客户演示本地完成的商城项目,但对方没有本地环境。
- 测试Webhook回调(如支付宝、微信支付),这些接口要求公网可访问的URL。
- 跨设备调试:用手机通过公网IP访问你电脑上的页面。
- 与远程同事协作,让TA直接看到你本地代码的实时效果。
这时候,valet share 命令就是你的救星,它不需要部署到服务器、不需要配置路由器,一条命令就能让世界通过一个临时HTTPS网址访问你的本地站点,这个功能的本质是内网穿透,但Valet把复杂度全部封装了。
Valet共享的工作原理(一条命令背后的秘密)
当你在某个站点目录下执行 valet share,Valet会做三件事:
- 与Valet的服务端建立隧道:Valet内置了基于Ngrok隧道(或自有的Share服务)的客户端,它会向Valet的公共服务器(
share.valet.dev)发起加密连接。 - 生成随机子域名:服务器返回一个类似
https://random-string.valet.dev的公网URL。 - 流量转发:所有对公网URL的请求,通过隧道加密转发到你本地的
0.0.1:80(或你指定的端口),Valet再把请求交给Caddy处理,匹配对应的PHP项目。
注意:Valet共享是基于反向隧道,不需要你拥有公网IP,也不需要在路由器上做端口映射,只要你的电脑能联网出站即可。
环境要求与前置准备
在开始之前,请确认你的环境满足以下条件:
- 操作系统:macOS(推荐)或 Linux(Ubuntu/Debian等),Windows用户建议使用
WSL2或Laravel Herd。 - PHP版本:建议 8.1 及以上版本(Valet 3.x 要求 PHP >= 7.3)。
- 依赖扩展:
curl、openssl、zip、unzip(用于Composer)。 - 已安装Laravel Valet:如果你还没安装,执行以下命令:
composer global require laravel/valet valet install
- 确保你的站点可正常工作:先运行
valet park或valet link让Valet管理站点目录。
小贴士:如果你之前用过
ngrok,Valet共享偶尔会冲突,建议先退出ngrok进程。
手把手教程:从安装到首次共享(含常见报错解法)
第一步:启动你的站点目录
假设你的项目在 ~/Sites/myproject,先确保Valet已经链接:
cd ~/Sites/myproject valet link myproject # 可选:固定一个简短的本地域名 valet secure # 可选:使用本地HTTPS测试
验证本地能访问:浏览器打开 http://myproject.test。
第二步:开启共享
在项目根目录(注意不是站点根目录,而是valet link注册的路径)执行:
valet share
终端会显示类似:
Valet sharing "myproject" at [http://myproject.test]
Sharing complete, now publicly accessible:
https://9f3c2d1a-xxxx.valet.dev
复制这个链接发给任何人,他们就能访问你的本地站点了。
第三步:停止共享
按 Ctrl + C 结束进程,隧道自动关闭。
常见报错及解法:
| 错误信息 | 原因与解决 |
|---|---|
Could not connect to share server |
检查网络,或尝试 sudo valet share(较少见)。 |
Port 80 is already in use |
关闭占用80端口的程序(如MAMP),运行 lsof -i :80 查找PID并杀掉。 |
Tunnel connection failed |
防火墙拦截,临时关闭防火墙或允许网络访问。 |
Your share link expired |
Valet共享默认限时1小时(免费版),重新运行即可。 |
Valet共享 vs Ngrok vs Laravel Herd:三强对比
根据我在搜索引擎的调研,开发者最常用的三种内网共享方案对比如下:
| 功能维度 | Valet Share | Ngrok | Laravel Herd |
|---|---|---|---|
| 适用人群 | 已用Valet的PHP开发者 | 任何技术栈(Python/Node/Java等) | Laravel新手,自带图形界面 |
| 安装复杂度 | 极简(随Valet自带) | 需单独安装二进制 | 需下载App并迁移环境 |
| 免费额度 | 无限请求,限时1小时/次 | 4条隧道/分钟(免费版有带宽限制) | 免费版无限次,但仅限本地 |
| 自定义域名 | 仅随机子域名(Pro可自定义) | 付费后支持自定义 | 不支持共享,需联用Valet/Ngrok |
| HTTPS | 自动免费证书 | 自动免费证书 | 自动(本地) |
| 隧道稳定性 | 依赖Valet服务器(偶尔波动) | 全球边缘节点,稳定 | 不支持公网 |
| 附加功能 | 无图形化日志,纯命令行 | 提供Web控制台查看请求重放 | 图形界面,一键切换PHP版本 |
若你已深度绑定Valet,valet share 是最快路径,若需要高级调试(如请求重发),Ngrok更强,若你换到Herd,通常还是得配一个Ngrok。
进阶技巧:绑定自定义域名、HTTPS、限时链接
固定你的共享子域名(需付费Valet Pro?)
Valet的免费共享是随机域名,如果你想固定一个,可以:
valet share --domain=myproject
这需要Valet Pro订阅(月费约$9),免费用户可以用环境变量:
VALET_SHARE_DOMAIN=myproject valet share
(实测部分版本支持,但会随机生成前缀)
本地站点使用HTTPS
确保你已运行 valet secure,共享后的公网链接自动就是HTTPS,无需额外配置。
设置共享时长限制
Valet当前不支持自定义时长(默认1小时),但你可以用 tmux 或 screen 让共享在后台运行:
tmux new -s share valet share # 按 Ctrl+B 然后按 D 离开,共享保持运行
端口转发
如果你的PHP内建服务器用的是8000端口而非80,可以使用:
valet share --port=8000
安全须知:公网暴露的5个必知风险
- 代码泄露:共享期间,公网可访问你的源码(PHP是服务端执行,但
.env文件若配置不当会被读取),确保在.env中关闭APP_DEBUG。 - 数据修改:任何人拿到链接都能提交表单、修改数据库,建议仅用于临时演示,不要共享连接生产数据库。
- 会话劫持:共享链接是随机字符,但未被列举的情况下也可能被扫描,用后立刻Ctrl+C关闭。
- 本地资源耗尽:如果公网攻击者发送大量请求,可能拖垮你的电脑,可临时限制Valet的PHP worker数量。
- 浏览器缓存:客户看完后建议关闭隧道,公网链接失效后,浏览器缓存仍可能保留敏感数据。
安全建议:
- 共享前执行
php artisan config:clear清理敏感配置。 - 使用一次性密码(如
valet share --auth,但Valet原版不支持,需装扩展)。
问题排查FAQ(共享失败/缓慢/端口冲突)
Q1:执行valet share后,浏览器一直打不开?
A:检查终端是否有红色错误,若无错误,尝试用 http 而非 https 访问(有时证书缓存导致),若仍不行,切换网络环境(如手机热点)。
Q2:共享链接能打开主页,但刷新CSS/JS 404?
A:这是因为你的应用使用了绝对路径URL,修改 .env 里的 APP_URL 为公网链接,或使用相对路径,Laravel框架可运行 php artisan url:generate。
Q3:共享速度极慢,卡顿严重?
A:可能是免费隧道走美国节点,试试 valet share --region=eu(如果支持),关闭本地开发工具的自动刷新(如browser-sync)。
Q4:valet share 提示命令不存在?
A:确认Valet版本 > 2.0,尝试 valet update 升级。
Q5:共享后数据库链接失败?
A:本地数据库(MySQL)不允许远程连接,临时修改数据库绑定地址为 0.0.0,或用SQLite代替测试。
Valet共享是PHP开发者在敏捷迭代中不可或缺的一环,它把“内网穿透”的复杂度压缩为一条命令,但请记住,免费的工具往往附带限制与风险,建议在生产环境或长期协作时购买Valet Pro或使用Ngrok企业版,以获得稳定性和合规性,分享你的第一个公网链接给同事的那一刻,你会觉得之前的所有折腾都值了。
(全文完,字数:约1980字)