前言
"今天吃什么"真正麻烦的地方,往往不是不会做饭,而是面对有限的食材时,不知道该从哪一道菜开始选。
YunYouJun/cook 做的事情很简单:先根据现有食材筛选,再从菜谱库里给出可选结果;如果没有明确想法,也可以直接随机生成一道菜。它并不负责替你做饭,而是把"决定吃什么"这一步从反复纠结变成一个可以快速完成的小流程。
本文先体验它的食材筛选、严格匹配、随机菜谱和移动端页面,再用 Docker 在本地部署一份。最后,如果希望手机或其他外部设备也能访问本机部署的页面,再借助内网穿透工具(本文以 cpolar 为例)增加公网访问入口。
整篇重点放在三个问题上:这个项目能做什么、本地怎么跑起来、需要外部访问时怎么继续配置。
1. YunYouJun/cook:先解决"怎么选"这一步
YunYouJun/cook 是一个开源的"今天吃什么"决策工具。它把菜谱筛选做成了一个 Web 页面:用户可以先选择手头已有的食材,再根据匹配结果查看可做的菜;如果没有明确方向,也可以使用随机功能直接获得一个候选结果。
这个项目最适合的并不是复杂的菜谱管理,而是日常做饭前那几分钟的快速决策。它把食材、菜谱和视频教程串在同一个入口里,减少的是"翻半天还是不知道吃什么"的时间。

YunYouJun/cook 项目的简洁界面,提供直观的美食决策体验。
几个比较实用的功能点
从实际使用角度看,这个项目主要有以下几类能力:
•Web 界面直接操作:不需要先学习复杂配置,打开页面后即可选择食材、查看菜谱和进入相关教程。
•免费且开源 :YunYouJun/cook 是一个免费 且开源 的项目,在GitHub上有着5.9K+的stars,代码公开,也可以自行部署或继续修改。
•支持 PWA :除了直接在浏览器中使用,cook 还支持 PWA(Progressive Web App)技术,可以添加到移动设备主屏幕,减少每次手动输入网址的步骤。
•围绕常见食材进行筛选:项目收录的菜谱更偏向日常家庭使用,适合根据现有食材快速缩小选择范围。
•支持社区贡献:如果需要补充菜谱或反馈问题,可以通过 Pull Request 或 Issue 参与项目维护。
2.cook 使用指南与体验
如果只是想先判断这个工具是否适合自己,可以直接使用在线版本,不需要先部署 Docker。下面按实际页面顺序看看食材筛选、严格匹配、随机菜谱和移动端显示。
打开 cook 的在线页面,首先进入选一下食材页面。根据家中现有食材勾选,例如"胡萝卜""鸡蛋"。系统会据此筛选出可制作的菜谱;若暂时没有偏好,也可直接跳过。

如果希望进一步缩小结果范围,可以启用严格匹配,仅显示与所选主材严格匹配的菜谱:

点击生成的菜谱卡片,可以跳转到对应的视频教程:

菜谱库十分丰富,目前收录多达598种:

如果没有明确食材方向,可以进入吃什么菜单,使用随机直接生成一个候选菜谱:

同样,点开菜谱即可观看对应的视频:

页面在手机端也可以正常显示:

在线版主要适合快速体验功能;如果后面希望自己保存、修改或长期使用,再考虑本地部署。
3.本地部署cook与运行
在线版适合直接使用,本地版更适合希望自己维护服务、固定访问入口,或者后续继续修改项目的人。
下面使用 Docker 启动 cook。这一部分不改变项目本身,只是在本机建立一个独立容器,并把容器的 80 端口映射到本机 3333。
在使用 Docker 部署前,请先安装 Docker。
首先,在cmd中执行如下命令:
shell
docker run -it -d --name cook -p 3333:80 yunyoujun/cook:latest

容器正常启动后,继续通过浏览器检查本地页面。
接着,让我们在浏览器中访问一下:
shell
http://localhost:3333/

页面能够正常打开,说明本地 Docker 部署已经完成。
4. 通过内网穿透实现公网访问(可选)
4.1 为什么需要公网入口
本地部署完成后,http://localhost:3333/ 只能直接在当前电脑访问。如果希望手机、平板或其他网络中的设备继续打开这个页面,就需要额外解决公网访问问题。
下面以 cpolar 为例建立 HTTP 隧道,把本机 3333 端口映射为公网地址。cook 的 Docker 配置不需要改变,后面的操作只增加网络访问入口。
4.2 什么是内网穿透
内网穿透的作用,是把局域网内的服务(比如本地运行的 Web 页面)通过一条加密隧道映射成公网地址,让外部设备不用改动路由器配置就能访问。这类工具除了下文演示用的 cpolar,还有 frp、Tailscale 等方案,可以按自己的情况选择。
说明:cpolar 的固定域名等功能需要付费套餐,本文只记录与本文相关的配置过程,不构成任何选购建议。
4.3 安装 cpolar
在 cpolar 官网下载对应操作系统的安装包,本文以 Windows 版为例。
下载得到的是一个压缩包,解压后运行其中的安装程序,按默认选项完成安装。安装完成后,打开 cmd 窗口输入如下命令确认安装:
shell
cpolar version

出现如上版本即代表安装成功!
安装完成并确认版本后,再进入 Web UI 配置具体隧道。
4.4 登录 cpolar 的 Web 管理界面
使用隧道功能前,需要先在 cpolar 官网注册一个账号(邮箱注册即可)。完成后,在浏览器中输入如下地址访问 Web 管理界面:
shell
http://127.0.0.1:9200

输入刚才注册好的cpolar账号登录即可进入后台页面:

4.5 为 cook 配置公网隧道
4.5.1 随机域名方式
随机域名更适合先验证公网访问是否正常。使用此方式时,系统大约每隔 24 小时 会自动更新一次域名地址,因此不适合作为长期固定入口。需要长期保存同一个地址时,再继续看后面的固定域名配置。
点击左侧菜单栏的隧道管理,展开进入隧道列表页面,页面下默认会有 2 个隧道:
- remoteDesktop隧道,指向3389端口,tcp协议
- website隧道,指向8080端口,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)

点击编辑website的隧道,修改成我们cook需要的信息:

接着来到在线隧道列表,可以看到名称为cook-3333隧道的两条记录信息,一条协议为http,另一条协议为https:

以https为例,访问测试:

可以看到,cook 的网页界面已经可以通过公网地址打开。此时可以先完成一次外部网络访问测试,确认隧道和本地 3333 端口的对应关系没有问题。随机域名约每 24 小时会更新一次,地址变化后需要重新从后台获取。
4.5.2 固定域名方式
如果这个 cook 页面准备长期使用,随机地址发生变化后就需要重新修改书签或分享链接。此时可以继续配置二级子域名,把访问入口固定下来(固定二级域名属于付费功能,是否使用请按自己的需要决定)。
下面继续按照原有步骤保留二级子域名。
首先,在 Web 管理界面左侧选择预留菜单,即可看到保留二级子域名项,填写其中的地区、名称、描述(可不填)项,然后点击保留按钮,操作步骤图如下:

列表中显示了一条已保留的二级子域名记录:
- 地区:显示为
China Top。 - 二级域名:显示为
cook。
注:二级域名是唯一的,每个账号都不相同,请以自己实际保留的二级域名为准
接着,进入侧边菜单栏的隧道管理下的隧道列表,可以看到名为cook-3333的隧道,点击编辑按钮进入编辑页面:

修改域名类型为二级子域名,然后填写前面配置好的子域名,点击更新按钮:

来到状态菜单下的在线隧道列表可以看到隧道名称为cook-3333的公网地址已经变更为二级子域名+固定域名主体及后缀的形式了:

这里以https协议做访问测试:

访问成功后,说明二级子域名已经绑定到当前 cook-3333 隧道。后续可以把这个固定地址加入浏览器书签,防止随机地址变化后再次修改入口。
总结
YunYouJun/cook 的功能并不复杂,但它解决的问题很具体:当手头有一些食材,却暂时不知道做什么时,通过筛选或随机给出一个更明确的候选结果。
如果只是偶尔使用,在线版已经足够;如果希望自己维护、继续修改,或者把它放在长期运行的电脑上,可以使用 Docker 启动本地版本。本文使用的本地访问地址仍然是 http://localhost:3333/,确认页面正常以后,本地这一层就算完成。
需要跨网络访问时,再借助内网穿透工具(如 cpolar)给 3333 端口增加公网入口。随机域名适合先验证连通性;确定需要长期保存同一个入口以后,再配置固定二级子域名。
所以这套方案可以拆成三个独立层次:cook 负责菜谱选择,Docker 负责本地运行,内网穿透负责外部网络访问。
把三层分开以后,哪一部分不需要就可以停在哪一步,也更容易判断出现问题时应该检查哪一层。