ghost_nodejs_cover

1. Node.js + Ghost 开发(本地)环境

本地操作系统:OSX 10.11.1

1.1 从 nvm 和 n 开始

由于 Node 版本更新速度较快,建议首先安装 Node 版本管理工具,目前常用的是 nvmn

但 n 需要已经安装过 Node 才可以使用,所以先使用 nvm,对于 OSX 系统,前置条件是安装 Xcode,之后再运行命令:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash

安装位置默认为:~/.nvm,我们执行一次 nvm 命令,这时 OSX 下可能会报错,提示:command not found,我们可以执行 source ~/.nvm/nvm.sh 来修复此问题。

  1. nvm ls-remote 列出目前可以安装的版本列表;
  2. nvm install 4.2.4 安装一个版本的 Node,4.2.4 是本文发出时最新的 LTS 版本。这里特别注意一点,如果总是下载时报错,请尝试替换 nvm 的源到国内的服务器上,比如执行 NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/dist
  3. nvm list 列出已安装的版本;
  4. nvm use 4.2.4 设置要使用的 Node 版本;
  5. 为了避免每次都要输上述命令,可以设置当前使用版本为 Node 默认启动的版本 nvm alias default node

在 Node 安装完毕后,还可以选用 n 来管理版本,n 在操作时更加方便。

我们通过 npm 以全局方式来安装 n,这里需要注意的是:国内的网络在使用 npm 进行安装时可能会出现速度很慢的情况,为了避免这类意外,可以换 npm 源到国内服务器,我这里使用淘宝的源来替代。

替换源的命令为:npm config set registry="https://registry.npm.taobao.org"

另外,淘宝源官方推荐的方法是用 cnpm 命令来替代 npm,如果你采用这种方式时遇到问题,请先检查是否执行了 npm config set strict-ssl false 来将 SSL 严格模式关闭。

其它的常见报错还包括权限问题,这时请尝试在命令前面加 sudo

npm 的问题了结后,通过以下步骤安装 n:

  1. npm install -g n 全局安装 n;
  2. n list 列出可以安装的 Node.js 版本列表;
  3. n 4.2.4 安装指定版本;
  4. n 在列表中选择一个版本来作为使用版本;

1.2 本地安装 Ghost

  1. 下载 https://ghost.org/download/
  2. 解压到你希望安装的位置;
  3. 在命令行中定位该位置,执行 npm install --production
  4. 要在开发环境下运行直接使用 npm start 命令
  5. 浏览其中打开 http://localhost:2368/,默认后台地址在 http://localhost:2368/ghost

Ghost 默认使用 sqlite 作为数据库,并且会自动安装它,如果安装 sqlite 时报错:no suitable image found,尝试执行以下命令:

  1. sudo rm -rf node_modules
  2. 之后再通过 npm install --production 进行安装

1.3 本地配置 Ghost

Ghost 配置文件位于安装位置根目录下的 config.js

ghost_config

其主要的配置项是 mail 和 url,有关配置文件详细说明请 参见此处,有关邮箱的配置请 参阅这里。目前 HFUN.ME 使用 mailgun 的邮件服务,供参考。

至此本地环境搭建完毕。

2. 生产环境搭建 Nginx + Node.js + Ghost + PM2

服务器操作系统:Ubuntu Server 14.04.3 LTS

2.1 安装 Nginx

我们这里选用 1.8 版本,但 apt 仓库中默认只有 1.4.6 版本的,所以我们需要先做一些事情:

  1. 添加 PPA(Personal Package Archive site:https://launchpad.net
    ),执行命令 add-apt-repository ppa:nginx/stable
  2. 如果提示未找到此命令,则先执行 apt-get install software-properties-common[python-software-properties
  3. 最后再 apt-get update apt-get install nginx

2.2 配置 Nginx

  1. 在 /etc/nginx/sites-available/ 位置下创建一个 ghost.conf 文件;
  2. 编辑该 ghost.conf 文件,添加以下内容:
    server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
    }
    }
    其中 example.com 换成你自己的域名;
  3. 在 sites-enabled 文件夹下创建链接文件 sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf
  4. 重启 Nginx sudo service nginx restart

可以参阅官方文档 Basic nginx config

2.3 安装 Node.js

  1. 同样从 nvm 开始,对于 Ubuntu 来说,需要先安装 build-essential 和 libssl-dev packages,安装命令 sudo apt-get install build-essential libssl-dev
  2. 下载并自动安装
    wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash`
  3. 执行 source ~/.profile
  4. 之后的操作同本地环境,不再赘述。

2.4 安装 Ghost

操作同本地环境,但是我们这里不要直接运行,即安装好之后不执行 npm start

2.5 安装 PM2

生产环境下我们使用 PM2 运行 Ghost,PM2 可以在程序异常崩溃时自动重启它,并且提供内建的负载均衡。 以全局方式安装 PM2,执行:npm install pm2 -g

2.6 配置 Ghost

同本地,注意生产环境下必须配置 url。

2.7 用 PM2 启动 Ghost

  • 执行命令 NODE_ENV=production pm2 start index.js --name "Ghost"
  • 停止:pm2 stop Ghost
  • 重启:pm2 restart Ghost
  • 更详细的介绍请参阅官方文档 Deploying Ghost

至此全部结束。

我这边 Ghost 本月初就已经跑起来,但本篇写的断断续续着实难受,再不发出来就赶上跨年咯。这种东西就该一气呵成,千万别每天写一点,特浪费时间。