ghost不能跑在xampp上,因其是node.js应用而非php,需全局安装ghost-cli、独立node环境及mysql手动配置,apache仅可反向代理,不可直接托管。

Ghost 不能跑在 XAMPP 上,也绝不能放进 htdocs 目录用 Apache 直接访问——它根本不是 PHP 应用,Apache 压根不会执行它。你看到的 404、白屏或下载 index.html 文件,不是配置错了,是架构根本不匹配。
ghost install local 报错 “command not found” 或启动失败
这是最常卡住的第一步:你以为装了 XAMPP 就万事大吉,但 ghost 命令依赖全局安装的 ghost-cli,而 CLI 又强依赖系统级 node 和 npm。XAMPP 自带的环境完全不参与这个链路。
- XAMPP 控制面板里的 Shell 不会读取你的系统 PATH,
node -v在 CMD 里能运行,在 Shell 里报错是常态 - 别改
C:\xampp\shell.bat—— 升级 XAMPP 后会被覆盖,且易引发路径混乱 - 正确做法:用 Windows Terminal / PowerShell / CMD(非 XAMPP 自带 Shell)执行
npm install -g ghost-cli,再进项目目录跑ghost install local - 验证是否真可用:
which node(macOS/Linux)或where node(Windows),输出必须指向C:\Program Files\nodejs\或类似真实安装路径,而非 XAMPP 目录
想用 XAMPP 的 MySQL 存 Ghost 数据,但 ghost install local 总连 SQLite
ghost install local 是开发快捷模式,硬编码用 SQLite,跳过数据库交互环节。它不读 config.production.json,也不理你 XAMPP 里 MySQL 开没开。要切 MySQL,必须绕过一键流程。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 先确保 XAMPP 中 MySQL 已启动(控制面板点 Start),默认 root 密码为空;若设过密码,记下来
- 用浏览器打开
http://localhost/phpmyadmin,新建数据库,字符集选utf8mb4,库名如ghost_prod - 在 Ghost 项目根目录手动创建
config.production.json,填入 MySQL 连接参数,关键字段不能漏:
{
"database": {
"client": "mysql",
"connection": {
"host": "127.0.0.1",
"user": "root",
"password": "",
"database": "ghost_prod",
"charset": "utf8mb4"
}
}
}
- 删掉
content/data/ghost.db(避免 Ghost 启动时误读 SQLite) - 运行
ghost setup --no-setup-linux-user --no-stack --no-prompt(跳过用户/服务/交互检查),再ghost start
Apache 反向代理 Ghost 到 80 端口,但访问 localhost 显示 Apache 默认页
这说明 ProxyPass 规则根本没生效。Apache 默认监听 80 端口,Ghost 默认监听 2368 端口,两者本可共存,但代理配置错一个字母就会失效——不是 Ghost 没起来,是请求压根没转发过去。
- 先确认模块启用:编辑
C:\xampp\apache\conf\httpd.conf,取消以下四行注释(删掉开头#):
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule ssl_module modules/mod_ssl.so
- 重启 Apache 后,终端进
C:\xampp\apache\bin,运行httpd -M | findstr proxy,必须看到proxy_module (shared)和proxy_http_module (shared) - 别在
httpd.conf里写全局ProxyPass—— 容易污染主配置。改C:\xampp\apache\conf\extra\httpd-vhosts.conf,加完整虚拟主机块:
<virtualhost> ServerName ghost.local ProxyPreserveHost On ProxyPass / http://127.0.0.1:2368/ ProxyPassReverse / http://127.0.0.1:2368/ </virtualhost>
- 最后一步别漏:修改系统
C:\Windows\System32\drivers\etc\hosts,加一行127.0.0.1 ghost.local - 验证顺序:先
curl http://127.0.0.1:2368确认 Ghost 跑着;再curl http://ghost.local看是否返回相同内容
ghost start 成功但浏览器打不开,或提示 ERR_CONNECTION_REFUSED
Ghost 启动日志里写着 Running in development mode 或 Ghost is running... 并不等于它对外可访问。端口被占、防火墙拦截、或配置里写了 127.0.0.1 而不是 0.0.0.0,都会导致“能启不能连”。
- 检查 Ghost 是否监听了通配地址:看日志末尾有没有
Listening on http://127.0.0.1:2368/—— 如果是127.0.0.1,那只有本机命令行能 curl,浏览器通过localhost访问也可能失败(尤其某些 Windows DNS 解析异常) - 临时解决:编辑
config.development.json,把host字段从"127.0.0.1"改成"0.0.0.0" - 检查端口占用:
netstat -ano | findstr :2368(Windows),看 PID 是否属于node.exe;若有冲突,改 Ghost 端口:在 config 里设"port": 2369,并同步更新 ProxyPass 目标地址 - Windows 防火墙有时会静默拦截 Node.js 出站连接,尤其是首次运行。临时关掉防火墙测试一次,确认是不是它拦的
真正麻烦的从来不是配置项本身,而是每个环节都依赖前序环节的精确就位:Node.js 版本对得上、PATH 没被覆盖、MySQL 库存在且字符集正确、Apache 模块加载成功、hosts 文件改了、Ghost 的 host 和 port 与代理规则严丝合缝——漏掉任意一环,表现都是“打不开”,但原因天差地别。










