最新 Ghost 博客搭建教程

关于 Ghost 1.0

大约四年前,我们在 Kickstarter 上推出了一个还处在原型阶段的 Ghost,这个小小的原型寄托了我们的一个想法,那就是创建 Web 上的下一代伟大的开源博客平台。

在初期阶段,我们真的只是专注于让所有功能能够运转起来。Ghost 是 Node.js 平台上为数不多的一个应用,当然,一定会伴随着陡峭的学习曲线。我们在 2013 年 9 月发布了第一个版本 Ghost 0.3,从那时起,接下来我们总共发布了 99 个版本,一直到 Ghost 0.11.9

今天 Ghost 迎来了第 100 个版本,巧合的是,这个版本是 Ghost 1.0.0

这个版本包含了 2600 多个 commit,涉及到功能特性、重构、改进和修复 bug, 这让整个代码基础更加健壮和可靠。

2017 年 7 月 27 日,Ghost 宣布发布 v1.0.2 作为最新稳定版,这次大更新(据称) 彻底推翻了之前的东西,重新造了一个全新的 Ghost 博客系统,安装方法也和之前的完全不同,所以我单独写篇文章指导大家如何安装 Ghost 1.0.x。

Ghost 1.0 的最新特性可以在官方博客看到,在此不多展开。

安装过程

Ghost 1.0 采取 Ghost-Cli 的方法进行安装,官方的宣称是能够达到一键建站的效果,但是实际实验过后发现还存在很多 bug,官方教程的安装会出现一些问题,在此一并修正。

基础工作

首先要做的肯定是更新系统啦,Ghost 官方只在 Ubuntu 16.04 LTS 上进行测试,实际上 Debian 系列肯定也是可以的啦,本教程所用系统 Debian 9,所用机器为 VULTR 东京机房,机器的配置足够,关键价格也便宜,用来建站是再合适不过的了。

  • 首先使用 root 用户登录,更新系统并安装必要组件:
apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y
apt-get install apt-transport-https lsb-release ca-certificates unzip git wget curl sudo sqlite3 -y
  • 添加 Swap (可选):

Ghost 要求的最小安装内存是 1G ,如果内存不足很有可能安装失败,所以我们要加一些 Swap:

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 让 Swap 后台启动
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 调整 Swap 参数
vim /etc/sysctl.conf
## 加入下面两行
vm.swappiness = 0
vm.vfs_cache_pressure = 50

安装 Node.js 8.x

curl -sL https://deb.nodesource.com/setup_8.x | bash -
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt update && apt install nodejs yarn -y
sudo npm i npm -g

安装 Ghost-CLI

Ghost-CLI 不支持在 root 用户下执行安装

也不要使用 ghost 用户安装

  • 添加运行用户:
adduser dcc

然后系统会提示你输入两次密码,其他的一律回车即可

  • 接着给予用户 sudo 权限:
usermod -aG sudo dcc
su - dcc
  • 然后安装 Ghost-CLI
  • npm 安装
sudo npm i -g [email protected]
  • yarn 安装
sudo yarn global add [email protected]
  • cnpm 安装
sudo npm i -g cnpm --registry=https://registry.npm.taobao.org
sudo cnpm i -g [email protected]
  • 针对国内的机器可选执行换源操作:
yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global

执行安装

  • 假设你的博客要放在 /var/www/ghost 目录,那么我们就创建一个并赋予权限:
sudo mkdir -p /var/www/ghost && sudo chmod -R 755 /var/www/ghost && sudo chown -R dcc.dcc /var/www/ghost && cd /var/www/ghost

由于博客比较小,懒得配置个 MySQL 了,所以使用 SQLite3 作为数据库,然后配置所有的环境和依赖。

  • 直接执行这个命令即可
ghost install --db=sqlite3

安装会有如下提示步骤:

✔ Checking system Node.js version
✔ Checking located in user
✔ Checking current folder permissions
✔ Checking operating system compatibility
✔ Checking memory availability
✔ Checking for latest Ghost version
✔ Setting up install directory
✔ Downloading and installing Ghost v1.xx.x
✔ Finishing install process
? Enter your blog URL: https://dcc.cat(这边输入你的博客域名)
✔ Configuring Ghost
✔ Setting up instance
Running sudo command: useradd --system --user-group ghost
Running sudo command: chown -R ghost:ghost /var/www/ghost/content
✔ Setting up "ghost" system user
? Do you wish to set up Nginx? Yes(建议输入 Y)
✔ Creating nginx config file at /var/www/ghost/system/files/dcc.cat.conf
Running sudo command: ln -sf /var/www/ghost/system/files/dcc.cat.conf /etc/nginx/sites-available/dcc.cat.conf
Running sudo command: ln -sf /etc/nginx/sites-available/dcc.cat.conf /etc/nginx/sites-enabled/dcc.cat.conf
Running sudo command: nginx -s reload
✔ Setting up Nginx
? Do you wish to set up SSL? No(建议输入 N,这边签证书失败率很高)
ℹ Setting up SSL [skipped]
? Do you wish to set up Systemd? Yes(建议输入 Y)
✔ Creating systemd service file at /var/www/ghost/system/files/ghost_dcc-cat.service
Running sudo command: ln -sf /var/www/ghost/system/files/ghost_dcc-cat.service /lib/systemd/system/ghost_dcc-cat.service
Running sudo command: systemctl daemon-reload
✔ Setting up Systemd
Running sudo command: /var/www/ghost/current/node_modules/.bin/knex-migrator-migrate --init --mgpath /var/www/ghost/current
✔ Running database migrations
? Do you want to start Ghost? Yes(建议输入 Y)
Running sudo command: systemctl is-active ghost_dcc-cat
✔ Ensuring user is not located in as ghost user
✔ Checking if located in user is directory owner
✔ Checking current folder permissions
Running sudo command: systemctl is-active ghost_dcc-cat
✔ Validating config
✔ Checking folder permissions
✔ Checking file permissions
✔ Checking content folder ownership
✔ Checking memory availability
Running sudo command: systemctl start ghost_dcc-cat
✔ Starting Ghost
Running sudo command: systemctl is-enabled ghost_dcc-cat
Running sudo command: systemctl enable ghost_dcc-cat --quiet
✔ Starting Ghost                                                                                           
You can access your blog at https://dcc.cat

Ghost 和 Nginx 配置:

Ghost 本来是自带 Nginx 配置和 SSL 的,但是经过测试失败率太高,所以手动进行配置。
Ghost 默认安装的配置比较简单,这边进行一些组件强化和性能优化。

server {
    server_name domain.com;
    listen 443 ssl http2;
    keepalive_timeout 300;
    ssl_certificate_key /etc/nginx/ssl/domain.key;
    ssl_certificate /etc/nginx/ssl/domain.crt;
    ssl_session_cache shared:SSL:10m;  
    ssl_session_timeout 24h;           
    ssl_buffer_size 1400;              
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/trust.crt;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';
    add_header X-Cache $upstream_cache_status;
 
    location / {
        proxy_cache STATIC;
        proxy_cache_valid 200 30m;
        proxy_cache_valid 404 1m;
        proxy_pass http://ghost_upstream;
        proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
        proxy_ignore_headers Set-Cookie;
        proxy_hide_header Set-Cookie;
        proxy_hide_header X-powered-by;
        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;
        proxy_set_header Host $http_host;
        expires 10m;
    }

    location /content/images {
        alias /path/to/ghost/content/images;
        access_log off;
        expires max;
    }

    location /assets {
        alias /path/to/ghost/themes/uno-master/assets;
        access_log off;
        expires max;
    }

    location /public {
        alias /path/to/ghost/built/public;
        access_log off;
        expires max;
    }

    location /ghost/scripts {
        alias /path/to/ghost/core/built/scripts;
        access_log off;
        expires max;
    }

    location ~ ^/(?:ghost|signout) { 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://ghost_upstream;
        add_header Cache-Control "no-cache, private, no-store,
        must-revalidate, max-stale=0, post-check=0, pre-check=0";
        proxy_set_header X-Forwarded-Proto https;
    }
}
  • 输入完毕以后,按 ESC :wq 保存并退出。
  • 最后重启 Nginx,打开 https://xxx.com/ghost/ 结束安装。
nginx -t
service nginx restart
Last modification:May 9th, 2018 at 09:32 pm

Leave a Comment