Ghost是一个基于Node.js开发的免费开源博客平台,用于简化博客的写作发布等流程。本文介绍如何在CentOS 7操作系统的ECS实例上部署Ghost博客。

前提条件

  • 已创建一台ECS实例。具体操作,请参见使用向导创建实例
    本文的示例步骤中,使用以下配置的ECS实例。实际操作时,建议您保持操作系统版本一致,避免因操作系统版本问题导致的命令执行报错。
    • 实例规格:ecs.c6.large
    • 操作系统:公共镜像CentOS 7.8 64位
    • 网络类型:专有网络VPC
    • IP地址:公网IP
  • 已在实例安全组的入方向添加安全组规则并放行22、80、443与2368端口。具体操作,请参见添加安全组规则

背景信息

搭建Ghost博客分为开发模式(development)和生产模式(production),建议您在第一次搭建Ghost博客时使用开发模式,方便对Ghost博客的调试。本文操作示例适用于初次使用阿里云进行建站的个人用户。

随着业务的扩展,您可以使用阿里云的产品平台,平滑地横向和纵向扩展服务容量,例如:
  • 扩展单个ECS实例的CPU和内存规格,增强服务器的处理能力。
  • 增加多台ECS实例,并利用阿里云负载均衡,在多个实例中进行负载的均衡分配。
  • 利用阿里云弹性伸缩,根据业务量自动增加或减少ECS实例的数量。
  • 利用阿里云对象存储OSS,存储静态网页和海量图片、视频等。

步骤一:部署Web环境

本节以安装Nginx为例介绍如何部署Web环境。

  1. 安装Nginx。
    yum -y install nginx
    安装完成后,您可以运行nginx -v命令查看Nginx的版本信息。
    说明 本示例操作中安装的Nginx版本为1.20.1。软件安装包不定期更新,请您以实际安装的Nginx版本信息为准。
  2. 设置Nginx服务器自动启动。
    systemctl enable nginx.service
  3. 启动Nginx。
    systemctl start nginx.service
  4. 查看Nginx服务状态。
    systemctl status nginx.service
    查看到Nginx服务状态为Active表示Nginx服务运行正常。active nginx
    说明 您也可以在本地Windows主机或其他任一具有公网访问能力的Windows主机中,打开浏览器访问ECS实例公网IP地址。当查看到Welcome to nginx!或者Welcome to CentOS页面信息时,表示Nginx成功部署。

步骤二:安装Ghost

  1. 更新Linux操作系统。
    用于确保操作系统处于最新状态。
    yum -y update
  2. 安装Node.js。
    安装Ghost前,需要先安装Ghost所需的Node.js。
    1. 安装提供额外软件包的EPEL源。
      yum -y install epel-release
    2. 安装Node.js和npm。
      yum -y install nodejs npm --enablerepo=epel
    3. 安装Node.js管理工具。
      npm install -g n
    4. 安装稳定版本的Node.js。
      本示例安装Node.js的版本为12.16.3
      n 12.16.3
      说明 当您的Node.js存在多个版本时,可以运行命令n,选择已安装的Node.js 12.16.3版本。
    5. 配置环境变量。
      1. 打开环境变量配置文件。
        vim ~/.bash_profile
      2. i进入编辑模式,在文件末尾添加下列信息。
        export N_PREFIX=/usr/local/bin/node
        export PATH=$N_PREFIX/bin:$PATH
        添加完成后,按Esc键,然后输入:wq并按Enter键,保存退出文件。
      3. 执行以下命令使环境变量的配置生效。
        source ~/.bash_profile
    6. 安装进程管理器,用于控制Node.js应用程序。
      进程管理器可以保持应用程序一直处于运行状态。
      npm install pm2 -g
    7. 依次运行以下命令,检查Node.js和npm的版本。
      node -v
      npm -v
      本示例中,版本信息如下图所示:node npm -v
  3. 安装Ghost。
    1. 创建Ghost安装目录。
      mkdir -p /var/www/ghost
    2. 依次运行以下命令,下载Ghost压缩包。
      1. 进入Ghost安装目录。
        cd /var/www/ghost
      2. 下载Ghost压缩包。
        wget https://ghost.org/zip/ghost-latest.zip
      3. 将压缩包重命名为ghost.zip
        mv ghost-latest.zip ghost.zip
    3. 解压Ghost压缩包。
      说明 如果您的ECS实例内还未安装解压缩命令unzip,请先运行yum -y install unzip命令完成安装。
      unzip ghost.zip
    4. 安装gcc和c++编译器。
      yum -y install gcc gcc-c++
    5. 使用npm安装Ghost。
      npm install -production
      说明 请您耐心等待Ghost安装完成,如果安装后提示存在漏洞,建议您运行npm audit fix命令自动修复漏洞。
    6. 运行以下命令启动Ghost,并检查是否安装成功。
      npm start
      启动成功的示例如下:
      [2020-04-13 04:00:01] INFO Ghost is running in development...
      [2020-04-13 04:00:01] INFO Listening on: 127.0.0.1:2368
      [2020-04-13 04:00:01] INFO Url configured as: http://localhost:2368/
      [2020-04-13 04:00:01] INFO Ctrl+C to shut down
      [2020-04-13 04:00:01] INFO Ghost boot 2.185s
      确认Ghost可以成功启动后,按Ctrl+C组合键退出Ghost。
    7. 可选:修改/var/www/ghost/core/shared/config/env目录下的config.development.json文件(Ghost开发模式的配置文件)。
      如果您已有域名,可以将域名解析至部署了Ghost的ECS实例后,参考本步骤配置Ghost博客的域名信息。如果您没有域名,可以跳过本步骤,后续通过ECS实例的公网IP地址测试访问Ghost博客。当您注册并解析域名后,可以再返回至本步骤完成Ghost博客的域名配置。域名相关操作说明,请参见域名相关操作指引
      1. 打开config.development.json文件。
        vi /var/www/ghost/core/shared/config/env/config.development.json
      2. i进入编辑模式,配置url参数为Ghost博客对应的域名信息。域名设置
      3. 配置完成后,按Esc键,然后输入:wq并按Enter键,保存退出文件。
  4. 配置Nginx作为Ghost的反向代理。
    1. 进入Nginx配置目录。
      cd /etc/nginx/conf.d/
    2. 新建并打开Ghost博客的Nginx配置文件。
      vim /etc/nginx/conf.d/ghost.conf
    3. i进入编辑模式,将以下内容输入到ghost.conf中,并把server_name参数值改成Ghost实际的域名。
      说明 如果您还没有绑定域名,则需要把server_name参数值改为localhost
      upstream ghost {
          server 127.0.0.1:2368;
      }
      server {
          listen      80;
          server_name example.com;
      
          access_log  /var/log/nginx/ghost.access.log;
          error_log   /var/log/nginx/ghost.error.log;
      
          proxy_buffers 16 64k;
          proxy_buffer_size 128k;
      
          location / {
              proxy_pass   http://127.0.0.1:2368;
              proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
              proxy_redirect off;
      
              proxy_set_header    Host            $host;
              proxy_set_header    X-Real-IP       $remote_addr;
              proxy_set_header    X-Forwarded-For $proxy_add_X_forwarded_for;
              proxy_set_header    X-Forwarded-Proto https;
          }
      }
    4. 配置完成后,按Esc键,然后输入:wq并按Enter键,保存退出文件。
    5. 重启Nginx服务。
      systemctl restart nginx.service
  5. 依次运行以下命令,进入Ghost所在目录,并启动Ghost。
    cd /var/www/ghost/
    npm start
  6. 测试访问Ghost博客。
    访问Ghost前台首页或后台管理页面的操作说明如下:
    • 前台首页
      在本地Windows主机或其他任一具有公网访问能力的Windows主机中,打开浏览器并输入ECS实例公网IP地址,访问Ghost前台首页。ghost前台首页
      说明 如果访问出现502,请检查是否是实例内的防火墙问题,您可以关闭防火墙。
    • 后台管理页面
      在本地Windows主机或其他任一具有公网访问能力的Windows主机中,打开浏览器并输入ECS实例公网IP地址/ghost,访问Ghost后台管理页面。后台页面
      首次访问Ghost后台管理页面时,您需要根据页面提示完成Ghost博客的相关配置,请您以实际页面的提示信息完成配置。

域名相关操作指引

如果您有建站需求,且还没有属于自己的域名,可以先购买域名。购买域名后,如果您的网站部署在中国内地(大陆)节点服务器上,则必须先完成域名备案,再把域名解析至部署网站的ECS实例上。相关操作指引如下:

  • 购买域名

    您可以给自己的网站设定一个单独的域名。您的网站来访用户可以使用易记的域名访问您的网站,而不需要使用复杂的IP地址。

    建议登录阿里云购买域名。更多信息,请参见注册通用域名

  • 域名备案

    对于域名指向中国内地(大陆)节点服务器上的网站,必须进行网站备案。在域名获得备案号之前,网站无法开通使用。如果您是首次备案,请参见首次备案流程,其他情况请参见ICP备案流程概述

  • 域名解析

    您需要在阿里云的云解析DNS中进行域名解析之后,网站的来访用户才能通过域名访问您的网站。具体操作请参见设置域名解析