开源菜谱工具 cook 实践:按食材筛选菜谱、随机推荐,并用 Docker 部署到本地

前言

"今天吃什么"真正麻烦的地方,往往不是不会做饭,而是面对有限的食材时,不知道该从哪一道菜开始选。

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 负责本地运行,内网穿透负责外部网络访问。

把三层分开以后,哪一部分不需要就可以停在哪一步,也更容易判断出现问题时应该检查哪一层。

相关推荐
张洛闻Eren1 小时前
云原生k8s【第八课】: ETCD 备份与恢复
linux·运维·docker·kubernetes·k8s
zzzzzz3102 小时前
Claude Code:把 AI 放进终端,真正值得关注的是什么
人工智能·开源·命令行
毕竟是shy哥10 小时前
vs code连接远程服务器docker环境及配置免密登录
服务器·docker·vs code
IT大白鼠10 小时前
Ingress 与 Ingress-Controller:K8s 七层 HTTP 反向代理技术详解与实践
http·容器·kubernetes
java_logo11 小时前
Docker 部署 Rocky Linux:轻松搭建 RHEL 兼容企业级基础镜像平台
linux·docker·容器·rocky linux·基础镜像·轩辕镜像·rhel 兼容
cloudfantasy13 小时前
docker直接二进制安装,非编译。KylinV10SP3 aarch64有效
运维·docker
冬奇Lab13 小时前
一天一个开源项目(第210篇):herdr - AI 编程 Agent 的运行时底座
人工智能·开源·资讯
a11177614 小时前
Shirone 二次元博客主题 开源
前端·开源
M--Y16 小时前
Docker数据持久化与网络架构
网络·docker·架构