给文字一处归宿:从零部署 Ghost 独立博客

给认真写下的文字一个安静的归处。从服务器到域名,从 Docker 到 Caddy,一步步搭建属于自己的 Ghost 独立博客。

给文字一处归宿:从零部署 Ghost 独立博客

认真写下的文字,不该只在一阵热闹后被风吹散。

它应该有一个安静的地方,可以被保存、被翻阅,也在某个时刻,被真正需要它的人看见。

Ghost 可以帮你搭建这样一片属于自己的创作空间。你可以在这里记录学习,写下思考,整理经验,展示作品。时间久了,它不只是一个网站,而会慢慢长成你的内容花园。

这里有你的名字、你的风格、你的故事,也有你被看见的可能。

Ghost 是一个开源的内容发布平台,适合用来搭建个人作品主页和独立创作空间。它拥有简洁的写作体验,支持文章发布、邮件订阅、会员系统、付费内容、数据分析和主题自定义。

使用ghost搭建的优秀网站
The Whippet: A newsletter for the terminally curious
An eclectic mix of science, history and weirdness with 0% politics.

麦金利.瓦伦丁的内容网站


所以,让我们开始部署吧

你需要准备的有以下东西:一台非大陆的服务器(最好是香港的),一个cloud flare账号,一个域名。

cloudflare网站:https://dash.cloudflare.com

这是域名注册网站:https://www.spaceship.com/zh

云服务器我比较推荐伤心的云:https://sadidc.com

服务器配置最低一核一G(一个月9.9),但我推荐2G2核好一点。操作系统选择ubuntu22.04.5,目前比较主流的方案。


服务器购买

打开伤心的云官网,选择服务器购买,选择自己喜欢的配置,前往配置,主机名和密码会给你随机分配,当然你也可以自定义,在操作系统里选择ubuntu,版本选择22.04,前往结账,然后在财务管理账单里找到账单并支付就可以了。

服务器管理界面,在产品与服务界面就可以查看你的服务器基本信息了。

风险提示:伤心云是属于小商家,会存在宿主机性能差以及超售等问题。追求稳定性的可以去腾讯云,阿里云,,cc,rn,ccs等等大厂。但这价格实在太香了,性价比还是可以的。买来体验玩玩还是可以的。

阿里云新人有300元免费额度金的ECS云服务器,一个月轻量云,以及一年68的2核2G的轻量云服务器。腾讯也有新人优惠,大家可以去看一波


域名购买与cloudflare托管域名

登录spceship官网后,搜索自己喜欢的域名,点击购买就可以(支持人民币付款)。域名的价格跟后缀都有关系,一般来说越好听和越受信任的域名越贵。不要购买.cn域名,这是中国域名,需要实名认证。其他可以不用 ,更省时间。购买域名成功后。即可以进入域名管理器管理域名

然后登录cloudflare官网,在域名→概述界面,点击新添加域名,选择连接域,把你的域名添加上去 ,选择0美元免费计划,然后选择继续激活,这个时候,它会让你设置DNS记录。如图

记住这两个地址,然后进入spaceship,点击库,往下拉找到域名域名管理器进入,点击你的域名,找到名称服务器,把上面的两个地址给成cloudflare给你的地址

返回cloudflare,点击我已更新我的服务器,这个时候cloudflare会去验证,验证需要一段时间。验证成功后,在cloudflare点击你的域名,点击DNS记录,添加两条记录。第一条,选择A,name填@,ip填服务器ip。第二条,选择CNAME ,name填www,目标填你的域名,如图


远程连接服务器

在完成域名购买托管和服务器购买后,你还需要下载一个远程连接SSH工具去连接服务器,虽然服务器服务商一般提供网页控制,但还是不如专业的SSH工具。我个人比较推荐finnalshell或者ishellpro。

下面我将用ishllpro来演示,ishllpro下载地址https://ishell.cc/zh-CN,进入ishellpro应用后,选择右上角新建主机。你只需要填三个关键信息:ip,用户名,密码。这三个你在购买服务器就会提供给你了,比如你在伤心的云购买后,即可以在自己的产品那里查看,如图,其他服务器商家大差不差

ishllpro界面里面,主机名字填自己喜欢的,ip,用户,密码填服务商给的。

保存主机后,点击快速连接就可以进入远程控制界面了。如图


部署ghost

一、服务器环境

首先更新一下软件列表,输入指令按回车

apt update && apt upgrade -y

升级系统软件过程中,可能会出现是否保留原配置文件的提示。一般选择保留当前配置即可。

二、安装 Docker 和 Docker Compose

安装必要依赖:

apt install -y ca-certificates curl

创建 Docker 的密钥目录:

install -m 0755 -d /etc/apt/keyrings

下载 Docker 官方 GPG 密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

设置密钥文件权限:

chmod a+r /etc/apt/keyrings/docker.asc

添加 Docker 官方软件源:

cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

重新更新软件列表:

apt update

安装 Docker 和 Docker Compose 插件:

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

检查 Docker 是否安装成功:

docker --version

检查 Docker Compose 是否安装成功:

docker compose version

三、部署 Caddy 和反向代理服务

1,创建一个属于caddy的目录,并进入这个目录

mkdir -p /opt/stacks/caddy
cd /opt/stacks/caddy

先创建一个公共网络

docker network create web

编辑文件,如果没有就会新建文件并打

nano compose.yaml

services:
  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - web

volumes:
  caddy_data:
  caddy_config:

networks:
  web:
    external: true
    name: web

把上面这段复制进去,ctrl+O保存,回车确定
ctrl+X退出

在同一个caddy目录,创建Caddyfile文件

nano Caddyfile

注意大小写,caddyfile和Caddyfile不是同一份文件,这里的C要大写
配置如下

blog.example.com {
    reverse_proxy ghost:2368
}

blog.example.com改成你的域名,把上面这段复制进去,ctrl+O保存,回车确定,
ctrl+X退出。

在当前目录执行

docker compose up -d

等待容器启动成功

四、部署ghost本体

mkdir -p /opt/stacks/ghost
cd /opt/stacks/ghost

创建配置文件

nano compose.yaml

复制以下配置进去

name: ghost

services:
  ghost:
    image: ghost:6
    container_name: ghost
    restart: unless-stopped
    depends_on:
      - mysql
    environment:
      url: https://你的域名.com
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: "改成一个强密码"
      database__connection__database: ghost
      NODE_ENV: production
    volumes:
      - ghost_content:/var/lib/ghost/content
    networks:
      - web
      - internal

  mysql:
    image: mysql:8.0
    container_name: ghost_mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: "改成另一个强密码"
      MYSQL_DATABASE: ghost
      MYSQL_USER: ghost
      MYSQL_PASSWORD: "改成一个强密码"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - internal

volumes:
  ghost_content:
  mysql_data:

networks:
  web:
    external: true
    name: web
  internal:

MYSQL_PASSWORD,database__connection__password这两个密码要一致。因为你的ghost要连接你的数据库,密码必须一致。ROOT密码不同。域名要改成你的域名

保存文件并退出

启动ghost

docker compose up -d

等待启动成功后,访问你的域名可以打开网站。

第一次创建管理员账号,需要访问:

https://你的域名/ghost
创建一个管理员账号,就可以开始你的内容创作了

视频示范

文字写下来的那一刻,或许只是一次记录;但时间久了,它会慢慢成为来路上的痕迹,也成为某个后来者偶然停留的灯光。