今天花费了一整天在这上面,终于成功了喵!趁着还没遗忘先整理一下正确的升级姿势供参考喵~

系统准备

注意!坑最大的竟然在这里喵!如果你的系统缺少一些组件会导致整个流程非常折腾喵……以下使用 Ubuntu 18.04 系统作为基准喵~

  • 安装必要软件包 apt install sudo build-essential curl (一些VPS登录就是 root 但是偏偏没 sudo 包……
  • 创建 Ghost 安装/维护账户:
sudo adduser {username}
sudo usermod -aG sudo {username}
sudo su {username}
  • 安装 NVM ,这一步很关键,因为 Ghost 的奇葩设计导致它只能在特定版本运行……
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

升迁流程

  • 使用 NVM 安装 node 6.9.x 版本,nvm install v6.9.5 (Ghost 0.x 只能在该版本下运行

  • 启动 Ghost 0.x node index.js

  • 进入后台管理页面,在 Lab 里导出(Export) 全站 json ,在 Design 里下载主题 Theme

    当然你如果用的官方主题并且只是修改过 Disqus 的话,主题完全可以不用下载,直接去官网下载最新主题并插入修改的代码即可。

  • 做完备份后 Ctrl + C 停掉 Ghost 0.x 版本

  • 新建一个 ghost-xxx 目录,准备安装 Ghost 1.x 版本

    这里才是重点问题所在,Ghost 只能按照 0.x -> 1.x -> 2.x 的顺序升级,而 1.x 和 2.x 依赖的 node 版本竟然不一致(扶额

nvm install lts/carbon
npm i -g [email protected]
cd ghost-xxx
ghost install --v1 # --db=sqlite3 #如果使用 sqlite 数据库
vim config.production.json
  • 在开启的 vim 中仔细修改 config, 否则各种作死起不来……而且不兼容之前的 config.js 配置……我的配置供参考(密码密钥什么的是没有的喵~ :
{
  "url": "https://kouga.us",
  "server": {
    "socket": {
      "path": "./content/注意如果用 Linux socket,则路径必须在 content 下面否则权限错误",
      "permissions": "0666"
    }
  },
  "database": {
    "client": "sqlite3",
    "connection": {
      "filename": "./content/??????"
    }
  },
  "mail": {
    "transport": "SMTP",
    "options": {
      "service": "???",
      "auth": {
        "user": "[email protected]???.???",
        "pass": "????????????????????????????????"
      }
    }
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "升级的时候要注意这个绝对路径!"
  },
  "bootstrap-socket": {
    "port": ???,
    "host": "localhost"
  }
}
  • 使用 ghost run 尝试运行,如果成功,直接去站点后台 /ghost 路径完成初始化向导

  • 初始化完成后,直接在管理页点 Lab -> Import File -> Import ,等待完成

    这一步可能会出现大量警告,注意看警告都是哪些 Post,可能要用 vs code 一类能编辑大文件的工具来修正对应的 json 错误……(扶额),但是其中关于 duplicate content/theme 可以忽略,因为本来就导不进来

  • 导入完成后去 Posts 里看看文章是否正常,如果 OK 则再次进入 Lab 进行一次导出(避免后续升级失败再来一次 v0.x -> v1.x 数据转换……

  • 做完导出后 Ctrl + C 停掉 Ghost 1.x 版本,准备升迁到 Ghost 2.x

nvm install lts/dubnium
npm i -g g[email protected] # yesterday once more
cd ghost-xxx
ghost update # 心惊胆颤的等它完成
ghost run
  • 在新启动的 Ghost 2.x 后台 /ghost/ 下登录,看看 Post 是否还在,主站现在可能是个 500 状态,因为主题还没安装;
  • 进入 Design 重新上传并激活主题
  • 进入 Lab 关掉旧API兼容等等不安全开关
  • 一切就绪后可以 nvm uninstall {version} 清理一下前面安装的多余 node 版本,并且 ghost brust 清理一下 yarn cache.

好,重新开始写作喵!