Ghost 部署博客 - 阿里云

Ghost 部署博客 - 阿里云
Photo by Danny Shives / Unsplash

Ghost 介绍

👉 Ghost 是当下非常流行的博客平台,提供订阅版和开源版本,功能强大,使用方便,之所以选用源码安装,是为了可以直接改代码。

  1. 强大的编辑功能。支持富文本、markdown、unsplash、youtube、codePen 等多种资源的嵌入
  2. 主题市场。提供了标准的体验和视觉良好的多种主题,免费版就很好看了。
  3. 插件系统,如对接支付。
  4. 开源可用,方便开发者进行定制和二开。

Ghost 非常适合用作个人站点、新闻网站或者企业的发布平台等,我的当前站点 https://www.meepo.me 就是基于它搭建的。

🤩 而且它是使用 NodeJS 开发,对我来说非常友好,即方便做定制,也能学习它的代码、工程架构。

安装

Ghost 官方提供了多种安装方式,👉 安装入口

提供了:

  1. 本地的开发部署。很方便在本机运行
  2. Docker 部署。官方提供镜像,配置也是很方便
  3. 源码安装。适合做功能定制
  4. 云服务安装。操作简单,无需自己提供服务器,每月固定支出 VPS 云服务的费用即可。
    1. Ghost Pro
    2. Digital Ocean
    3. Linode

服务器前置配置

最近阿里云推出了 99元/年 的 2c2g 的服务器,性价比非常高,第二年还能以 99 元/年的费用续费一次。

  • 我的服务器配置是阿里云 2c2g 版本的 Ubuntu 。
  • 域名也是在阿里云购买。
  • 做好域名映射 A 记录,到服务器 IP 地址。
  • 阿里云提供了免费的 SSL ,每次申请可以使用一年,下载申请到的 SSL Nginx 证书文件,后续提供给 Nginx 使用。
  • 打开阿里云安全组的 80 和 443 端口的访问。

Docker 配置

安装 Docker

1、安装 Docker Engine . 参考 Docker Engine 官方文档

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \\
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \\
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装最新版本

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证是否安装成功。hello-world 是 docker 的一个测试镜像,如果运行成功,说明 Docker Engine 安装成功

sudo docker run hello-world

2、安装 Docker Compose

sudo apt-get update
sudo apt-get install docker-compose-plugin

检查是否安装成功

创建一个 docker-compose.yml 文件,如下:

version: "3.1"

services:
  ghost:
    image: ghost:latest
    restart: always
    # 依赖 DB 的提前安装运行完毕
    depends_on:
      - db
    ports:
      - 8080:2368
    environment:
      # see <https://ghost.org/docs/config/#configuration-options>
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: ghost_mysql_password
      database__connection__database: ghost
      # this url value is just an example, and is likely wrong for your environment!
      # 指定的宿主机暴露的地址,在生产环境,要填写线上的部署的域名地址
      url: <http://localhost:8080>
      # contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
      #NODE_ENV: development
    volumes:
      - /root/ghost/content:/var/lib/ghost/content

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ghost_mysql_password

引用官方镜像 ghost:latest ,设置好 volumes 挂载点到服务器指定目录

运行 Docker

docker compose up -d

Nginx 配置

创建一个 nginx 配置文件 www.captainjack.top.conf 配置如下:

server {
  listen 80;
  server_name www.captainjack.top;
  rewrite ^(.*)$ <https://$host$1>; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
}

server {
  listen 443 ssl;
  server_name www.captainjack.top;
  ssl_certificate /root/ghost/certs/www.captainjack.top.pem;
  ssl_certificate_key /root/ghost/certs/www.captainjack.top.key;
  ssl_session_timeout 5m;
  #表示使用的加密套件的类型
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass <http://localhost:8080>;
  }
}

测试 Nginx 配置文件是否正确

sudo nginx -t

重启 Nginx 使配置生效

sudo nginx -s reload

完成上述配置后,Ghost 就部署到了你的服务器,并且能通过公网访问到,接下来可以对 Ghost 进行配置了 🎉

通过 https://xxx.com 可以进入博客首页,通过 https://xxx.com/ghost 可以进入系统的管理后台