在手机备忘录里翻了三分钟,还是没有找到我妈要的那份红烧排骨做法之后,我决定动手把散落各地的菜谱彻底收编。最终落地的是两个工具的组合:YunYouJun cook 负责把私房菜谱变成清晰好用的网页应用,cpolar 负责给这台本机服务开一道公网入口,让我在超市、在爸妈家、在朋友厨房都能打开同一份菜谱。
这套方案的本质,是给自家菜谱建一个私有托管服务,再用隧道映射的方式把它安全地送到外面。它不需要把家庭配方传到平台服务器上,也不需要每年续费什么智能菜谱会员。你要做的,就是装一个 Node 环境、把菜谱数据填好、再装一个 cpolar。全程下来一小时以内,之后每天做饭前纠结的时间,可能比配置这个服务的时间还长。
写这篇记录,适合两类人:一类是和你我一样每天纠结“吃什么”的普通干饭人,想把自己的拿手菜和家传做法归拢成随时可查的资料;另一类是总被长辈问“上次那道菜咋做”的年轻人,想给家里人准备一个打开就能看的食谱页面。下面从选型逻辑开始讲,因为工具再好用,不清楚为什么选它,后面遇到问题也容易懵。
1. 餐桌上最不缺选择,缺的是能跟着走的自家菜谱库
1.1 痛点:每天“吃什么”的决策成本到底高在哪
很多人以为晚餐纠结是因为选择太少,其实恰恰相反,是选择太散。手机里躺着几十张截图菜谱,微信收藏夹塞满了公众号文章,备忘录里还有几段语音转文字的老妈秘方,真到饭点打开,哪个都觉得“差点意思”,最后要么点外卖,要么煮面条。
这种状态的本质问题不是没有菜谱,而是菜谱没有形成体系。你想找一道“半小时内能做完、冰箱里有五花肉、适合孩子吃”的菜,现有工具根本没法按这个维度筛。你只能一屏一屏地翻截图,翻完情绪已经被消耗完了,做饭的兴致也没了。
一个能真正解决餐桌选择困难的菜谱库,至少要满足三件事:第一,内容完全私有,自家配方不被平台规则绑架;第二,结构要清楚,每道菜有分类、有食材、有步骤,而不是一张没法检索的图片;第三,它必须能跟着你走,在家里电脑上能用,在手机流量下也能打开。
1.2 我把身边的方案都试了一圈,最后留下的理由
在决定用 YunYouJun cook 之前,我认真对比过几类常见做法,踩了些坑也总结出一些规律,列成表格方便你直观判断。
| 方案 | 优点 | 实际用过之后的问题 |
|---|---|---|
| 手机备忘录 / 系统笔记 | 随手记很方便,搜索也快 | 菜谱结构弱,步骤和食材混在一起,手机上排版基本没有可读性 |
| 浏览器收藏夹 | 不用额外装东西 | 收藏多了全是链接,原文失效就没了,离线更是完全告别 |
| 下厨房等菜谱App | 内容量大,别人做法多 | 数据库里没有我家口味,想存一份“我妈版回锅肉”非常别扭 |
| Notion / 在线表格 | 功能强,数据库能自定义 | 家人打开要先登录、要懂权限,长辈在手机上根本找不到入口 |
| YunYouJun cook 自托管 | 数据在自己手里,界面就是给菜谱设计的 | 需要花一小时部署,这算是最高的“门槛”了 |
对比下来你会发现,前面的方案要么是“记不住”,要么是“打不开”,只有自托管类项目把数据的掌控权和访问的便利性同时拿到了。YunYouJun cook 本身就是为菜谱管理设计的,你不用像用 Notion 那样先搭一套内容结构,它已经把菜谱该有的字段都准备好了。
1.3 YunYouJun cook 最对味的地方:私有、结构化、还带随机抽菜
我第一次打开这个项目的时候,第一反应是“这界面比我想象中干净”。它以卡片形式展示菜品,颜色和布局看着就挺有食欲。让我决定留下的,其实是这几点实际体验。
首先是数据完全私有。菜谱通常不是单纯的信息,里面藏着家庭口味偏好、独家配料比例,放到别人平台上总觉得不像自己的。YunYouJun cook 的数据就在项目本地,是一份结构化的菜谱文件,我随时可以编辑、备份、迁移,没有任何平台可以“下架”我的菜。
其次是响应式布局做得可以。项目本身是前端应用,手机浏览器打开后会自动适配宽度,卡片不会挤成一团,步骤列表也不会横向滚动。这一点对于“走到哪用到哪”非常关键,毕竟我大部分查询场景都在手机端。
最后是随机抽菜这个功能。它不是花哨的噱头,而是真能治选择困难:当你完全不知道吃什么,点一下随机,系统从你的菜谱库里挑一道,选项就在你收藏过的范围内,怎么抽都坏不到哪里去。有一说一,这个按钮比任何“今日推荐”都更适合家庭场景。
2. 先把 YunYouJun cook 跑起来:部署细节与私房菜谱整理
2.1 环境准备:Node.js 和 Git,一次装好
YunYouJun cook 是一个前端项目,跑起来需要 Node.js 环境,拉代码需要 Git。如果你之前没装过,这一步花五分钟就能搞定。
先去 Node.js 官网下载 LTS 版本的安装包,Windows 和 macOS 都是下一步式安装,没什么好说的。装完打开新的终端窗口,输入下面三条命令确认环境正常:
node -v npm -v git --version三条命令都能输出版本号,说明环境就绪了。我建议 Node 版本尽量用 18 以上,新项目对旧版本的支持越来越差,卡在依赖安装阶段没必要。Linux 用户如果用的是 apt 源里的老版本 Node,最好走官网二进制包或者 nvm 这类版本管理工具,别用系统源硬凑。
2.2 拉取项目并安装依赖,npm 慢的解决办法
环境就绪之后,把项目代码拉到本地。项目的仓库地址在官方项目主页能直接看到,我这里给一套通用流程:
git clone <项目仓库地址> yunyoujun-cook cd yunyoujun-cook npm installnpm install 是我见过最容易让人卡住的一步,尤其是国内网络环境下,几十个依赖包下载慢得让人怀疑人生。如果你也遇到这种情况,可以把 npm 源切到国内镜像,注意这只是换一个下载源,不影响项目本身的运行:
npm config set registry https://registry.npmmirror.com npm install提示:切换镜像源是个人电脑上的可选优化,并不是必需步骤。如果你当前网络拉取依赖挺快,完全不用动 npm 配置。
安装完成后,node_modules 目录会比较大,这很正常。前端项目的依赖就在本地,不需要系统级安装。
2.3 本地启动确认端口,看到页面才算第一步
依赖装完之后,直接启动开发服务:
npm run dev启动成功的终端输出会给出一个本地访问地址,一般是http://localhost:3000,也可能是其他端口,一切以你终端里显示的实际地址为准。用浏览器打开这个地址,看到菜谱页面就说明基础环境全部通了。
如果页面打不开,十有八九是端口被占用了。排查命令也很简单:
# Windows 下 netstat -ano | findstr :3000 # macOS / Linux 下 lsof -i :3000找到占用端口的老进程之后,要么把它停掉,要么去项目的配置文件里换一个端口。这里顺便提醒一句:项目版本不同,脚本名称也可能不同,常见的是npm run dev,但也有人用的npm run serve或npm run start。这一步以项目 README 里写的为准,不必照抄别人的命令。
2.4 把自家的私房菜谱写进数据文件:结构拆解和实际操作
本地页面跑通之后,下一步是往里填自己的菜。YunYouJun cook 的菜谱数据一般存放在项目的数据目录里,形式上通常是 JSON 或 JS 数组文件。打开之后你会发现里面已经有项目自带的一些菜品示例,这就是最好的模板。
我摘一个大概的数据结构给你参考,不同版本字段名称可能略有出入,但整体思路一致:
{ name: "红烧排骨", category: "荤菜", tags: ["家常", "下饭", "拿手菜"], ingredients: [ { name: "排骨", amount: "500克" }, { name: "冰糖", amount: "15克" }, { name: "生抽", amount: "两勺" } ], steps: [ "排骨冷水下锅焯水,撇去浮沫捞出", "热锅少油,放入冰糖小火炒出糖色", "下排骨翻匀,加入生抽老抽上色", "加开水没过排骨,转中小火炖40分钟", "最后大火收汁,撒葱花出锅" ] }你照着这个结构,把自己家那几道拿手菜一条条加进去,保存文件之后回到浏览器刷新,菜谱就会出现在页面上。如果某个字段名对不上,直接对照项目里已有的示例数据抄格式就行,这种项目设计上就是方便二次编辑的。
关于图片,我的建议是能不配图就先不配图,把文字和步骤录完,日常使用已经完全够。真要配图的话,把图片文件放进项目的静态资源目录,路径写对就行,但记得压缩一下,别让手机流量加载大图等半天。
注意:整理菜谱时不要想一口吃成胖子。先录五道常做、十道拿手、几道长辈的招牌菜,十分钟就能写完。积累到二十道以上,这个菜谱库就开始真的有用了。
3. cpolar 安装与隧道创建:把本机服务“送出家门”的完整流程
3.1 为什么需要 cpolar,和路由器端口转发比好在哪
服务跑起来了,但localhost:3000只有你自己电脑能访问。同一WiFi下,手机可以用局域网 IP 访问;一旦出了门,这个地址就失效了。要把菜谱带到外面去,常规思路是路由器端口转发,但这个思路在现在的家庭网络环境下越来越难走通:很多宽带根本没有公网 IP,就算有,你还要配置动态域名、改防火墙、设置转发规则,一套流程下来够写一篇长文,而且把端口直接暴露在公网上,安全性心里也没底。
cpolar 这类内网穿透工具解决的就是这个痛点。它在你本机和它的公网服务器之间建立一条专用数据通道,外部访客访问的是一个公网地址,流量顺着这条通道回到你本机的 3000 端口。你不需要公网 IP,不需要碰路由器设置,也不用把自己的电脑暴露在整个互联网的扫描之下。对“自己人看自己的菜谱”这种轻量访问场景,它比端口转发合适得多。
3.2 cpolar 安装:Windows / macOS / Linux 三种平台一次讲清
“cpolar 安装”是最近搜得比较多的词,这块我拆细一点。它是提供多平台安装包的,没有统一的一行命令装完三个系统的说法,各平台做法不同。
Windows 用户最省事:去 cpolar 官网下载 Windows 压缩包,解压到任意目录,建议放在一个不带中文的路径下。打开命令提示符,进入解压目录,运行:
cpolar version能看到版本号就说明能用。为了方便以后使用,把 cpolar 所在目录加进系统环境变量 PATH,之后就能在任意目录直接敲 cpolar 命令了。
macOS 用户如果装了 Homebrew,一条命令搞定:
brew install cpolar没装 Homebrew 的话,去官网下 macOS 安装包,把应用拖进 Applications 目录即可。之后在终端里确认版本。
Linux 用户通常是在服务器或树莓派上装,下载对应架构的压缩包解压后,把可执行文件放到 PATH 目录下:
tar -zxvf cpolar-linux-amd64.tar.gz sudo mv cpolar /usr/local/bin/ cpolar version提示:如果你打算长期运行,Linux 用户建议直接看官方文档里有没有提供 systemd 安装脚本,比自己手动管理进程方便。
3.3 注册账号、绑定 authtoken:这一步省不了
装完 cpolar 直接启动隧道是行不通的,它会要求你先认证。原理很简单:cpolar 的公网地址需要绑定到你的账号,服务器才会分配入口给你。
流程是这样的:先去 cpolar 官网注册一个账号,登录后进入后台,在认证信息页面拿到一串 authtoken。这是你账号的识别凭证,回到终端把它告诉客户端:
cpolar authtoken xxxxxxxxxxxxxxxxxxxx绑定之后,客户端会把认证信息保存在本机配置里,不需要每次输入。这里有两个小经验:一是 authtoken 后台通常只完整显示一次,建议复制到本地便签存一份;二是如果你的电脑有多个人用,authtoken 也算私密信息,别随手贴在工位上。
3.4 创建指向菜谱服务的 HTTP 隧道
认证通过之后,就可以创建隧道了。最直接的方式是指定本机端口,把 HTTP 流量映射出去:
cpolar http 3000注意 3000 是前面 YunYouJun cook 运行的端口,你要按实际端口改。运行之后,终端会输出一个公网访问地址,通常长这样:https://xxxxxxx.cpolar.cn。这时候你拿起手机,关掉 WiFi 用流量打开这个地址,如果能看到菜谱页面,恭喜你,整个核心链路已经通了。
如果终端提示隧道启动失败,不用慌,先确认两件事:cook 服务还在跑吗;端口号填对了吗。也可以用cpolar status看看当前隧道的健康状态。
注意:ctrl+c 关掉这个终端进程,隧道就断了。这属于临时隧道,适合测试联通性。真正要长期用,看下面第五节。
4. 公网访问实测:手机端体验与地址稳定性的取舍
4.1 手机流量访问实测:界面能看、操作顺手才是真的
隧道建立之后,我第一件事就是关 WiFi 用流量访问。说实话,从电脑浏览器切到手机屏幕,这里才是真正检验项目响应式水平的地方。
我实际用下来的感受:卡片列表不会变形,点击分类之后菜品切换流畅,随机抽菜的按钮在拇指覆盖范围内,操作没有任何“端到端”的生硬感。加载速度方面,菜谱库数据量不大,页面基本都是秒开,除非你给每道菜都塞了几兆的高清图。
这里有个值得说的场景:周末在超市,我打开手机里的菜谱库看一道“土豆炖牛肉”的配料表,确认要买哪几种调料,整个过程不用打电话问家里、不用备忘录里乱翻,这就是“走到哪用到哪”的真实价值。
4.2 免费随机地址会“飘”:实用边界的取舍
用了一阵之后你会遇到一个问题:免费版分配的公网地址是随机的,隧道重启或者电脑重开之后,地址可能就变了。这意味着你之前存的书签链接、发给家人的收藏链接,可能在某次重启后失效。
对于临时分享,随机地址完全够用。比如周末想给朋友看看你的拿手菜合集,开个隧道把链接发过去,用完就关,非常干净。但如果你想长期在手机桌面保留入口,随机地址的不稳定性就会烦人。
这时候有几个选择:第一个是接受地址变化,每次重启后把新地址发到家庭群,操作成本低但有点笨;第二个是看看 cpolar 后台是否提供固定地址套餐,本质是服务端给你保留一个不变的公网入口,属于付费功能,适合真正常年要用的人;第三个是你自己有域名的话,通过域名解析指向 cpolar 入口,也能实现长期稳定的效果。怎么选,取决于你对“稳定访问”的需求有多强烈。
4.3 把公网地址变成手机桌面上的“菜谱App”
地址问题解决之后,还有一个让体验提升一个档次的小技巧:在手机浏览器里打开菜谱页面,调出浏览器菜单,选择“添加到主屏幕”或“添加到桌面”。
操作完成后,手机桌面上会出现一个独立图标,点击直接进入菜谱库,没有浏览器地址栏,体验接近原生 App。虽然它本质上还是一个网页快捷方式,但对家里长辈来说,一个图标点开就是菜谱,这种直观程度比“打开浏览器输入网址”不知道高到哪里去了。
如果你有远程帮家人维护菜谱的需求,可以自己手机上留后台管理地址,桌面图标放家人手机上,各取所需。
5. 长期稳定使用:进程守护、访问安全和数据备份
5.1 让 cook 进程在后台稳定跑:从 dev server 到 pm2
之前用npm run dev启动的是开发服务器,它本身是给开发调试用的,长期开着不是最优解。更稳的做法是先构建生产版本,再用进程守护工具托管起来。
构建通常就是一条命令:
npm run build构建完成后,项目根目录下会生成一个dist静态资源目录。接下来有两种托管方式。一种用静态服务器包 serve:
npx serve -s dist -l 3000另一种用 pm2 做进程守护,好处是崩溃自动重启、开机可以自启:
npm install -g pm2 pm2 start npm --name cook -- run start pm2 save如果项目没有start脚本,就回到serve -s dist -l 3000这种方式。pm2 里面也可以用pm2 start serve --name cook -- -s dist -l 3000来托管静态服务。进程管理器的最大价值在于:就算你什么都没管,它也会一直在后台把服务拉起来,不用每次重启电脑都手动开终端。
5.2 让 cpolar 隧道也常驻:后台模式与开机自启
cpolar 也是同样的问题,临时隧道挂着终端一关就断。长期使用的思路有两个:一是 cpolar 本身支持配置命名隧道并以后台模式运行,你可以把菜谱隧道配置好之后用cpolar start <隧道名>这种形式启动;二是让 cpolar 随系统开机自启。
Linux 服务器上最标准的方式是写一个 systemd 服务。创建一个服务文件,内容大概是这样的套路:
[Unit] Description=cpolar cook tunnel After=network.target [Service] Type=simple ExecStart=/usr/local/bin/cpolar start cook Restart=on-failure [Install] WantedBy=multi-user.target然后把这服务启用开机自启:
systemctl enable cpolar-cook systemctl start cpolar-cookWindows 上可以把 cpolar 注册成计划任务,或者用服务包装工具把它变成系统服务,开机自动运行。macOS 用户则是 launchd 的 plist 文件,网上模板很多。思路都一样:别让隧道依赖你的手动作业。
5.3 公网暴露的边界感:访问密码、数据备份与分享习惯
服务暴露在公网之后,哪怕只是一个菜谱页面,也值得想一下访问边界。菜谱虽然不是银行密码,但家庭做法和个人口味偏好也算私人信息,我不太建议把链接公开扔到社交媒体上,这既是对隐私的保护,也是避免陌生流量消耗你的带宽。
如果你的 cpolar 套餐支持隧道访问控制,就顺手在后台把密码打开;如果不想依赖具体平台功能,也可以在前面套一层 Nginx,用 Basic Auth 挡住未授权访问。Nginx 下大概是这样:
server { listen 8080; server_name localhost; auth_basic "Private Cook"; auth_basic_user_file /etc/nginx/.cookpasswd; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; } }密码文件用 htpasswd 生成:
htpasswd -c /etc/nginx/.cookpasswd cook数据备份这块反而简单。YunYouJun cook 的菜谱数据就是项目目录里的数据文件,你只需要定期把整个项目目录备份一次。可以用网盘同步,也可以把目录放进私有 Git 仓库,每次改完菜谱提交一次。我第一次整理菜谱的时候没做备份,后来调整数据结构手滑改坏了一个文件,差点把辛苦录入的菜谱丢了,从那以后我养成了每次整理完就备份的习惯。
最后再分享一个使用上的小技巧:我现在手机主屏上直接放着菜谱快捷方式,里面存了家里二十多道常做的菜。妈妈打电话问红烧排骨先焯水还是后焯水,我打开页面照着念给她听;去超市忘了买什么配料,看一眼食材清单就走。这套由 YunYouJun cook 和 cpolar 搭起来的小系统,技术上不算高深,但它确实治好了我每天饭前的选择困难。如果你也一直被这个问题折磨,不妨也花一个晚上把它搭起来,让自家的菜谱真正走到哪、用到哪。