在本地电脑上运行Mealie这类开源食谱管理系统,最麻烦的往往是PHP运行环境的准备。Mealie基于Laravel框架开发,要求PHP版本不低于8.1,并且需要PDO、Mbstring、GD、Tokenizer等扩展支持。利用phpEnv这类集成环境工具,可以避免在Windows或macOS下逐个安装组件,快速完成Mealie的部署。

一、使用phpEnv准备基础环境
phpEnv是一款集成了Apache、Nginx、MySQL、PHP多版本切换的本地服务器环境软件。打开phpEnv后,先在软件主界面启动Nginx和MySQL服务。如果本机尚未安装PHP 8.1或以上版本,可以在phpEnv的PHP版本管理面板中一键下载并切换到php-8.1或php-8.2。
切换完成后,进入PHP扩展设置,确保以下扩展处于开启状态:pdo_mysql、gd、mbstring、openssl、tokenizer、xml。Mealie在启动时会检测这些依赖,缺少任意一个都会在页面抛出500错误。准备好环境后,就可以在phpEnv中新建一个站点用来承载Mealie。
二、在phpEnv中创建Mealie站点
在phpEnv的“网站”功能中点击添加站点,填写本地域名例如mealie.test,根目录指向你准备存放Mealie代码的文件夹,比如D:/phpenv/www/mealie。PHP版本选择刚才切换好的8.1以上版本,站点类型选为“PHP项目”。保存后,phpEnv会自动生成Nginx的虚拟主机配置并重启服务。
此时访问http://mealie.test如果看到空白或报错属于正常,因为代码尚未放入。我们需要将Mealie的发行包下载并解压到该根目录中。注意Mealie官方提供的是包含vendor目录的打包版本,不要直接拉取GitHub源码,否则还要本地执行Composer安装,对初学者不友好。
三、部署Mealie代码与配置
把Mealie压缩包内的全部文件复制到D:/phpenv/www/mealie目录下,确保index.php位于根目录。接着在根目录找到.env.example文件,复制为.env,使用记事本修改以下几项配置:
DB_HOST填写 127.0.0.1DB_PORT填写 3306DB_DATABASE填写 mealieDB_USERNAME填写 phpEnv 中 MySQL 默认用户 rootDB_PASSWORD填写本地MySQL密码
在phpEnv的MySQL管理面板中新建一个名为mealie的数据库,编码选择utf8mb4。配置完毕后,通过命令行进入站点目录执行数据库迁移,示例代码如下:
<?php
// 进入Mealie根目录后执行迁移命令
// 实际应在终端运行: php artisan migrate --force
// 若无法使用命令行,可临时在浏览器访问安装路由
// 以下为伪代码示意迁移逻辑
require 'vendor/autoload.php';
$app = require_once 'bootstrap/app.php';
$kernel = $app->make(IlluminateContractsConsoleKernel::class);
$kernel->call('migrate', ['--force' => true]);
echo $kernel->output();
?>
上述代码展示了在没有命令行条件下,通过引导Laravel内核调用迁移指令的思路。正常情况下,建议直接打开系统终端,切换到站点目录运行php artisan migrate --force。迁移成功会输出数据表创建信息。
四、完成安装与访问食谱系统
数据库迁移完成后,在浏览器打开http://mealie.test,Mealie会自动进入初始化向导。第一步设置管理员邮箱与密码,第二步选择是否允许公开注册。家庭使用建议关闭注册,仅自己管理菜谱。
登录后台后,你可以手动添加食谱,也可以粘贴外部美食博客链接让Mealie自动抓取原料与步骤。系统支持按标签、分类检索,还能生成购物清单。借助phpEnv,整套食谱管理系统完全运行在本地,数据隐私可控,重装系统前只需备份mealie数据库和上传目录即可。
五、常见故障与处理
若页面提示The stream or file could not be opened,一般是storage目录没有写权限。在phpEnv站点目录中右键storage文件夹,赋予“写入”权限,再刷新即可。另一个常见问题是访问首页出现500,多为.env中APP_KEY未生成,可在终端执行php artisan key:generate解决。
整体来看,phpEnv把繁琐的环境配置封装成图形界面,配合Mealie成熟的开源包,让非专业运维也能在十分钟内拥有专属食谱库。后续如需升级Mealie,只需覆盖代码文件并再次执行迁移命令,不会影响已有菜谱数据。