Administrator
Published on 2025-08-18 / 247 Visits
0
0

【硬核干货】Ghost6.0终极安装指南:从吃灰VPS到完美博客,只差这一个视频!

前言

“各位小伙伴想不想要一个专自己的简单,高级,个性化的博客呢?但又觉得WordPress太复杂,第三方平台广告太多还不受自己控制?

那你来对地方了。我是ping,今天这期视频,我就手把手教你,如何从零开始,用一个最简单、最专业的方式,在你自己服务器上搭建一个Ghost博客。

Ghost是一个开源博客平台,它极致简洁,速度快得飞起,而且天生就为付费订阅和新闻通讯设计,是真正为写作者打造的工具。

各位小伙伴不用担心过程会很复杂,因为up准备的是手把手教程。你只需要跟着我做,全程都会详细讲解参数配置,各个坑已经探好了,没啥基础也可以部署好,理解好各个配置项,听完之后你就可以成为一个合格的Ghost站主了。

视频真的非常详情,所以时长较长,已经完成分段,特别是对Ghost的使用说明!!,各位小伙伴可以选择分段观看。

教程

教程小段

安装教程

docker 安装教程

docker-compose.yml 配置项说明

配置文件参数说明

发布教程

nginx 配置文件说明

cdn 配置说明

ssl证书申请

使用教程

后台使用演示及说明

cdn 配置演示及说明

主题使用演示及说明

smtp配置演示及说明

语言使用自定义演示及说明

自建页面使用演示及说明

mailgun 及导入导出说明

ghost安装教程

服务器配置说明:

配置项

参数

cpu

1C

内存

1G

系统

Ubuntu 24.04 任意linux系统

安装流程

模块

模块

环境

说明

Ghost

docker

直接使用docker安装可以避免环境依赖,快速安装

node.js

docker

mysql

docker

nginx

linux

公网IP服务器代理发布

安装docker

见本站docker安装教程:https://halo.blog360.sbs/archives/dockeran-zhuang-jiao-cheng

启动容器

配置docker-compose.yml文件

version: "3.1"
​
services:
  ghost:
    image: ghost:latest
    restart: always
    ports:
      - 80:2368
    environment:
      # 配置sqlite3 数据库
      #database__client: sqlite3
      #database__connection__filename: /var/lib/ghost/content/data/ghost.db
      # 配置mysql 数据库
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: admin@11.com
      database__connection__database: ghost
      # this url value is just an example, and is likely wrong for your environment!
      # 指定的宿主机暴露的地址,在生产环境,要填写线上的部署的域名地址
      url: https://test.blog360.sbs
    volumes:
      - /opt/ghost/content:/var/lib/ghost/content
      - /opt/ghost/config.production.json:/var/lib/ghost/config.production.json
      #- /opt/ghost/versions:/var/lib/ghost/versions
  # 配置mysql 数据库
  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: admin@11.com
    volumes:
      - /opt/ghost/mysql/conf:/etc/mysql/conf.d  # 配置目录
      - /opt/ghost/mysql/data:/var/lib/mysql     # 数据目录
​

配置config.production.json文件,执行 docker cp ghost(容器名称或者id):/var/lib/ghost/config.production.json /opt/ghost/config.production.json 拷贝到宿主机的文件

{
  "url": "http://localhost:2368",
  "server": {
    "port": 2368,
    "host": "::"
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "security": {
    "staffDeviceVerification": true
  },
  # smtp配置
  "mail": {
    "transport": "SMTP",
    "options": {
      "host": "smtp.163.com",
      "port": 465,
      "secure": true,
      "auth": {
        "user": "testblog360@163.com",
        "pass": "smtp密钥"
      },
      "tls": {
          # tls 若为587则开放
        "rejectUnauthorized": false
      }
    },
    "from": "\"ping\" <testblog360@163.com>"
  },
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  },
 # cdn portal.js 和sodoSearch.js配置 可以配置国内cdn或者本机代理
   "portal": {
    "url": "/public/js/portal.min.js"
  },
  "sodoSearch": {
    "url": "/public/js/sodo-search.min.js"
  },
  "timezone": "Asia/Shanghai",
  "locale": "zh"
​
}
​

最后执行docker-compose up -d 执行构建容器

发布教程

配置nginx代理发布公网

server {
    ​client_max_body_size 20M;
    listen 80;
    server_name test.blog360.sbs;
 
​
​
# 主请求代理
  location / {
    proxy_pass http://172.30.0.2:80;
​
    # 关键头信息传递 (解决混合内容问题)
        proxy_set_header Host $http_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 $scheme;  # 告知Discourse使用HTTPS
​
        # WebSocket支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
​
        # 缓存优化
        proxy_cache_bypass $http_upgrade;
​
        # 修复静态资源路径
        sub_filter_once off;
        sub_filter_types text/html text/css application/javascript;
  }
​
​
​
​
​
  # 拦截所有版本的portal.min.js
     location ~ ^/public/js/(.*\.js)$ {
        alias /opt/ghost/$1;
        add_header Cache-Control "public, max-age=31536000";
        access_log off;
        expires 1y;
    }
​
​
}
​

配置软连接,重启nginx

ln -s /etc/nginx/sites-enabled/test.blog360.sbs /etc/nginx/sites-available/test.blog360.sbs

nginx -t 
# 查看校验结果
nginx -s reload

配置下载cdn js文件

# 下载文件 (替换版本号)
curl -o /opt/ghost/portal.min.js https://cdn.jsdelivr.net/ghost/portal@2.51.0/umd/portal.min.js
curl -o /opt/ghost/sodo-search.min.js https://cdn.jsdelivr.net/ghost/sodo-search@1.8.0/umd/sodo-search.min.js

如果环境不允许,直接从这下载:

portal.min.js sodo-search.min.js


申请免费证书(ssl证书可选)

安装Certbot工具

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
​
# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

申请ssl证书(nginx)

sudo certbot --nginx -d your-domain.com
  • 替换 your-domain.com 为你的域名

配置及使用教程

官网配置说明地址:https://docs.ghost.org/faq

默认后台页面及管理员初始化

默认管理员地址为:http://yourdomain.com/ghost 例如:https://test.blog360.sbs/ghost,首次打开页面将会初始化管理员账户密码和邮箱

cdn js文件配置加载提速

ghost 默认使用使用了portal sodo-search 两个js的cdn加速,但是由于国内访问非常缓慢,所以我们需要自行优化,我们可以使用以下两种方式

1.使用国内cdn加速,例如阿里、腾讯、七牛云 ...

2.使用服务器本身代理发布(推荐,上面已经配置的方法)

smtp 配置

ghost 本身已经使用了Nodemailer默认的发件邮箱为noreply@yourdomain.com 按照官方的说法 但是这个直邮服务似乎不太好使,我测试的话QQ邮箱网易邮箱是支持的,但是谷歌邮箱不支持,可以根据自己的需求判断是否需要自行怕配置,上面的教程就是配置了smtp,有以下两个步骤需要配置

  1. config.production.json 配置smtp信息

# smtp配置
  "mail": {
    "transport": "SMTP",
    "options": {
      "host": "smtp.163.com",
      "port": 465,
      "secure": true,
      "auth": {
        "user": "testblog360@163.com",
        "pass": "smtp密钥"
      },
      "tls": {
          # tls 若为587则开放
        "rejectUnauthorized": false
      }
    },
    "from": "\"你的发件人名称\" <testblog360@163.com>"
  },
  1. 在后台配置发件邮箱(否则将会使用默认 noreply@yourdomain.com),比较深,见截图:

主题设置

如何为我们的ghost 去选择主题呢,有两种方式:

  1. 前往官方主题库,这里有各种场景的免费和收费主题,其实后台页面也可以浏览,但是官方页面比较清晰

  2. 去网上搜索找自己喜欢的主题zip包。(我使用主题https://github.com/code-gal/Ghost-Theme-Blumid?ref=nigzu.com

主题使用

如何使用主题呢?非常简单,去页面导入主题,或者直接上传服务器,重启,一般为~/content/themes(docker容器映射路径) 按照我的来一般在/opt/ghost/content/themes。建议直接导入,启用及生效:

语言设置

ghost默认是英文,咱用起来还是有道费劲的,那么我们应该如何去设置语言呢,我们是无法设置后台的语言的,但是我们可以去设置主题(前台)的语言,在下面:

有人就问了,这不是可以设置语言吗?nonono,这里是设置主题语言的,而且并不是可以设置全部的,但是我们可以自定义,什么意思呢?我们看看官网的说明:

如何使用设置和自定义(主题不支持)语言

我们可以看到,我们设置的语言是主题的语言,那么我们应该如何使用语言呢?

使用语言:

查看服务器上的主题文件,一般为~/content/themes(docker容器映射路径) 按照我的来一般在/opt/ghost/content/themes

这里就是我们的主题,进入主题的/主题/locales/ 路径,查看支持的语言

然后我们就可以在后台Publication Language 设置对应的语言

自定义语言:

也是在主题目录,拷贝一份en.json文件,丢给ai,和他说,参照该文件,给我生成一份中文的配置文件,一般配置文件如下:

配置完成后,在后台设置语言即可

自定义页面

我们应该如何来自定义自己的页面呢,自定义页面有两种

自建页面

就是自建创建的页面,填充的内容,然后加路由展示。

自定义标签页面

自定义的标签内容,再添加一个路由页面

Mailgun 配置(邮箱配置)

为啥有一个smtp了,还需要有个邮箱配置呢?对于ghost 它有两种邮件,一种是登录所需要的验证邮件,另外一种是会员订阅邮件,对于第二种而言,需要邮件支持事务,smtp不支持,我这边没有设置,需要去Mailgun 申请一个key,比较麻烦。至于为啥,可以看看官方文档:


Comment