使用 Docker Compose 高效部署 Ghost 博客

Share
使用 Docker Compose 高效部署 Ghost 博客
Photo by Thought Catalog / Unsplash

1. 为什么选择 Docker 部署 Ghost?

Ghost 是一款非常强大且现代的开源博客平台,但它的原生安装(基于 Node.js)对环境依赖较多,稍有不慎就会遇到版本冲突。使用 Docker Compose 部署,可以把 Ghost 主程序和 MySQL 数据库完美隔离,实现一键启动、方便迁移、无痛升级

本文将分享一份经过生产环境验证的 docker-compose.yaml 配置文件,并针对 MySQL 8.0 的常见认证报错进行优化。

2. 环境准备与 Docker 安装

在 Ubuntu/Debian 系统中,建议使用官方推荐的现代方式安装 Docker 社区版及 Compose 插件,避免因版本过旧导致命令不兼容:

# 更新系统软件包
sudo apt update

# 安装 Docker 及 Compose 插件
sudo apt install docker.io docker-compose-plugin -y

安装完成后,你可以通过 docker compose version 来验证是否安装成功。

3. 编写 docker-compose.yaml 配置文件

在服务器上创建一个独立目录(例如 mkdir ghost-blog && cd ghost-blog),然后创建 docker-compose.yaml 文件。

注意:请将配置文件中类似 <你的_XXX> 的注释部分替换为你自己的实际安全密码和配置。

services:
  db:
    image: mysql:8.0
    restart: always
    # 核心避坑:强制指定传统密码认证方式,防止 Ghost 无法连接 MySQL 8.0
    command: --default-authentication-plugin=mysql_native_password
    environment:
      # 数据库名称
      MYSQL_DATABASE: ghost
      # 数据库普通用户名
      MYSQL_USER: ghost
      # 【安全提示】请替换为强随机密码,勿使用弱口令
      MYSQL_PASSWORD: "<填写你的本地数据库安全密码_例如_gHoSt_789_pAsS>"
      # 【安全提示】请替换为强随机的管理员密码
      MYSQL_ROOT_PASSWORD: "<填写你的数据库ROOT安全密码_例如_mYsQl_rOoT_123>"
    volumes:
      # 持久化存储数据库数据
      - ./mysql_data:/var/lib/mysql

  ghost:
    image: ghost:5-alpine # 建议锁定大版本,alpine版本体积更小、更安全
    restart: always
    ports:
      - "2368:2368"
    environment:
      database__client: mysql
      database__connection__host: db
      database__connection__user: ghost
      # 【核心注意】这里的密码必须与上方服务的 MYSQL_PASSWORD 完全一致
      database__connection__password: "<填写你的本地数据库安全密码_与上方相同>"
      database__connection__database: ghost
      
      # 博客的正式访问 URL(测试阶段可填 http://服务器IP:2368)
      # 一旦配置了 HTTPS 反向代理,务必改为 https://你的域名
      url: "https://<你的正式访问域名_例如_blog.example.com>"

      # 邮件发送配置(以163网易邮箱为例)
      mail__transport: SMTP
      mail__options__host: smtp.163.com
      mail__options__port: 465
      mail__options__secureConnection: "true" # 465端口通常为 true
      mail__options__auth__user: "<你的发件邮箱地址_例如_username@163.com>"
      # 【安全提示】此处填写的是邮箱服务商提供的“客户端授权码”,非邮箱登录密码
      mail__options__auth__pass: "<你的邮箱SMTP授权码_勿填登录密码>"
      mail__from: "博客管理员 <<你的发件邮箱地址_与上方相同>>"
    volumes:
      # 持久化存储博客的图片、主题和内容
      - ./ghost_content:/var/lib/ghost/content
    depends_on:
      - db

4. 一键启动与常用运维命令

① 启动博客

docker-compose.yaml 文件的同级目录下,执行以下命令在后台启动服务:

docker compose up -d

② 查看运行状态与排查日志

如果启动后网页无法访问,可以通过以下命令查看 Ghost 的实时运行日志,重点排查数据库连接和邮件配置:

# 查看实时日志
docker compose logs -f ghost

③ 停止服务

如果需要修改配置文件,可以安全地停止容器(由于配置了 volumes,你的数据和文章不会丢失):

docker compose down

Read more

阿里云服务器科学上网架构升级指南

阿里云服务器科学上网架构升级指南

本手册旨在指导高级用户将其阿里云海外实例(以硅谷节点为例)的代理服务从传统 Shadowsocks (SS) 协议迁移至 VLESS-REALITY 架构。该方案的核心价值在于:通过模拟合法的 TLS 流量(如访问苹果或微软官网),在保障高速访问的同时,极大地降低了因协议特征被识别而导致 IP 被封锁的风险,从而保护服务器上并存的 Web 服务(如个人博客、简历等)不受牵连。 1. 协议演进:为何弃用 Shadowsocks 转向 VLESS-REALITY随着防火墙(GFW)对加密流量识别能力的提升,传统协议的生存空间已被严重压缩。下表从架构视角对比了两种方案的差异: 维度Shadowsocks (SS)VLESS-REALITY流量特征具有高度可识别的加密特征。无特征:完全模拟合法的 HTTPS 握手流量。安全性容易触发协议主动探测。防主动探测:通过目标网站(Dest)证书链校验。IP 封锁风险极高:一旦识别,IP 往往被阻断。

By 樊泽豪
【避坑指南】从 TinyDB 文件损坏,聊聊文件截断与磁盘刷盘的底层原理

【避坑指南】从 TinyDB 文件损坏,聊聊文件截断与磁盘刷盘的底层原理

在 Python 轻量级开发中,TinyDB 因其“零部署、文件即数据库、支持对象化查询”的特性,成为了存储配置信息、多租户元数据的神器。 但在高频写入或异常崩溃的场景下,你是否遇到过这样的诡异现象:导出的 JSON 文件末尾莫名其妙多出了几个 NULNUL(\x00)空字节,导致整个数据库报 JSON 无法解析的错误? 本文将带你还原这个经典的“文件空洞”Bug,并分享如何通过自定义存储类 MyJSONStorage 彻底解决它。 一、 现象还原:消失的尾巴与诡异的 NUL 在默认情况下,TinyDB 的 JSONStorage 是这样写入文件的: 1. seek(0) 指针回到文件开头。 2. write(json_data) 写入序列化后的 JSON 字符串。 3. truncate(

By 樊泽豪
搭建K3s集群,零成本打造生产级私有云

搭建K3s集群,零成本打造生产级私有云

简介 用一套经典的云原生“黄金组合”( K3s + Rancher + Longhorn + MetalLB),在本地裸机上构建具备调度、高可用存储、独立网络与可视化运维的完整私有云基础设施。打磨出媲美公有云的生产级 K8s 体验。 ┌──────────────────────────────────────────────────────────┐ │ Rancher Web 控制台 (管理与可视面) │ └──────────────────────────┬───────────────────────────────┘ │ 统一管控 ┌──────────────────────────▼───────────────────────────────┐ │ K3s 集群 (容器编排内核) │ ├──────────────────────────┬─────────────────────────────

By 樊泽豪
Docker常用操作

Docker常用操作

安装 Windows安装Docker到F盘(非系统盘) Start-Process -FilePath 'Docker_Desktop_Installer.exe' -Wait -ArgumentList "install --installation-dir=F:\DockerDesktop" 改变容器、镜像文件位置 以管理员权限启动Docker Desktop,Settings-Resources-Disk iamge location 配置dockerhub国内源 阿里云:容器镜像服务 (aliyun.com) 其他源 more /etc/docker/daemon.json 输入以下文件: { "registry-mirrors": [ "https://kk8u6omk.mirror.aliyuncs.com", "https:

By 樊泽豪