11.Docker实战-部署 Ghost 开源内容管理系统
Docker 环境下部署 Ghost 开源内容管理系统
文章目录
- Docker 环境下部署 Ghost 开源内容管理系统
- 实验目标
- 实验环境准备
- 实验步骤
- 步骤 1:创建项目目录结构
- 步骤 2:编写 Docker Compose 配置文件
- 步骤 3:启动服务
- 步骤 4:访问和配置 Ghost
- 步骤 5:创建第一篇文章
- 步骤 6:服务管理操作
- 步骤 7:备份与恢复
- 备份数据
- 恢复数据
- 步骤 8:自定义配置(可选)
- 步骤 9:清理环境
- 实验总结
Ghost 是一款专注于内容创作的开源内容管理系统 (CMS),特别适合博客、杂志和出版物。本实验将通过 Docker 和 Docker Compose 在容器环境中部署一个完整的 Ghost 服务,包括 Ghost 应用本身和 MySQL 数据库。
实验目标
- 理解多容器应用的协作关系
- 掌握使用 Docker Compose 编排服务的方法
- 学会配置 Ghost 与数据库的连接
- 实现 Ghost 服务的持久化存储和端口映射
- 熟悉 Ghost 的基本配置和使用
实验环境准备
确保已安装以下软件:
- Docker (20.10 或更高版本)
- Docker Compose (v2 或更高版本)
验证安装:
docker --version
docker compose version # 注意v2版本使用"docker compose"而非"docker-compose"
实验步骤
步骤 1:创建项目目录结构
首先创建一个专用目录来存放 Ghost 相关配置:
# 创建项目目录
mkdir -p ghost-blog && cd ghost-blog# 创建数据持久化目录
mkdir -p data/ghost data/mysql# 设置目录权限
chmod -R 777 data # 简化权限设置,生产环境需更精细配置
步骤 2:编写 Docker Compose 配置文件
创建docker-compose.yml
文件,定义 Ghost 和 MySQL 服务:
Ghost与MySQL的Docker Compose配置
version: '3.8'services:# MySQL数据库服务db:image: mysql:8.0container_name: ghost-mysqlrestart: alwaysenvironment:# 数据库根密码MYSQL_ROOT_PASSWORD: ghostrootpassword# 为Ghost创建的数据库名MYSQL_DATABASE: ghostdb# 数据库用户名MYSQL_USER: ghostuser# 数据库用户密码MYSQL_PASSWORD: ghostpasswordvolumes:# 持久化MySQL数据- ./data/mysql:/var/lib/mysqlnetworks:- ghost-networkhealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]interval: 10stimeout: 5sretries: 5# Ghost服务ghost:image: ghost:5-alpinecontainer_name: ghost-blogrestart: alwaysdepends_on:db:condition: service_healthyenvironment:# 生产环境设置NODE_ENV: production# 数据库连接配置database__client: mysqldatabase__connection__host: dbdatabase__connection__user: ghostuserdatabase__connection__password: ghostpassworddatabase__connection__database: ghostdb# 博客URL,替换为你的IP或域名url: http://localhost:3001# 端口设置server__port: 2368volumes:# 持久化Ghost内容和配置- ./data/ghost:/var/lib/ghost/contentports:# 映射到宿主机3001端口- "3001:2368"networks:- ghost-networknetworks:ghost-network:driver: bridge
配置说明:
- 使用 MySQL 8.0 作为数据库,比 SQLite 更适合生产环境
- 定义了健康检查确保数据库就绪后才启动 Ghost
- 所有数据通过卷 (volumes) 持久化存储
- 两个服务通过专用网络 (ghost-network) 通信
- Ghost 默认运行在 2368 端口,映射到宿主机 3001 端口
步骤 3:启动服务
在项目目录下执行以下命令启动服务:
# 启动服务(后台运行)
docker compose up -d# 查看服务状态
docker compose ps# 查看日志
docker compose logs -f
首次启动时,系统会:
- 拉取所需的 Docker 镜像
- 创建并启动 MySQL 容器
- 初始化数据库
- 启动 Ghost 容器并连接到数据库
成功启动后,你会看到类似以下的输出:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
ghost-blog ghost:5-alpine "docker-entrypoint.s…" ghost 10s ago Up 8s (healthy) 0.0.0.0:3001->2368/tcp
ghost-mysql mysql:8.0 "docker-entrypoint.s…" db 10s ago Up 9s (healthy) 3306/tcp, 33060/tcp
步骤 4:访问和配置 Ghost
- 打开浏览器,访问
http://localhost:3001
,你将看到 Ghost 的默认首页 - 访问管理后台:
http://localhost:3001/ghost
- 首次访问需要创建管理员账号:
- 点击 “Create your account”
- 填写用户名、邮箱和密码
- 完成设置向导
- 基本配置:
- 在管理后台,点击左侧菜单的 “Settings”
- 更改博客标题:Settings → General → Site title
- 配置导航菜单:Settings → Navigation
- 设置主题:Settings → Design
步骤 5:创建第一篇文章
- 在管理后台点击左侧菜单的 “Posts”
- 点击 “+ New post” 按钮
- 输入标题和内容(支持 Markdown 格式)
- 点击右上角的 “Publish” 按钮发布文章
- 访问首页查看发布的文章
步骤 6:服务管理操作
# 停止服务
docker compose stop# 启动服务
docker compose start# 重启服务
docker compose restart# 查看Ghost容器日志
docker compose logs -f ghost# 进入Ghost容器内部
docker exec -it ghost-blog /bin/sh# 进入MySQL容器
docker exec -it ghost-mysql mysql -u root -p
# 输入密码:ghostrootpassword
步骤 7:备份与恢复
备份数据
# 创建备份目录
mkdir -p backups# 备份Ghost数据
tar -czf backups/ghost-data-$(date +%Y%m%d).tar.gz ./data/ghost# 备份MySQL数据
docker exec ghost-mysql mysqldump -u root -pghostrootpassword --all-databases > backups/mysql-backup-$(date +%Y%m%d).sql
恢复数据
# 停止服务
docker compose down# 恢复Ghost数据(替换为实际备份文件名)
tar -xzf backups/ghost-data-xxxxxx.tar.gz -C ./# 恢复MySQL数据(替换为实际备份文件名)
cat backups/mysql-backup-xxxxxx.sql | docker exec -i ghost-mysql mysql -u root -pghostrootpassword# 启动服务
docker compose up -d
步骤 8:自定义配置(可选)
可以通过修改docker-compose.yml
文件来自定义 Ghost:
-
更改端口映射:修改
ports
配置,如"80:2368"
将使用 80 端口 -
配置邮件服务:添加邮件相关环境变量:
environment:# 其他配置...mail__transport: SMTPmail__options__host: smtp.example.commail__options__port: 587mail__options__secure: falsemail__options__auth__user: your-email@example.commail__options__auth__pass: your-email-password
-
使用 Nginx 作为反向代理(高级配置):
添加 Nginx 服务到docker-compose.yml
,配置 SSL 和域名
步骤 9:清理环境
实验结束后,如需清理环境:
# 停止并删除容器、网络(数据卷保留)
docker compose down# 停止并删除容器、网络和数据卷(完全清理)
docker compose down -v# 返回上级目录并删除项目文件夹
cd .. && rm -rf ghost-blog
实验总结
- 使用 Docker Compose 编排多容器应用(Ghost + MySQL)
- 配置容器间的网络通信和依赖关系
- 实现数据持久化存储,确保容器重启后数据不丢失
- 基本的容器管理操作(启动、停止、日志查看等)
- Ghost CMS 的初始化配置和内容发布流程
- 数据备份与恢复的基本方法
Ghost 作为一款轻量级 CMS,非常适合个人博客和小型内容网站。使用 Docker 部署不仅简化了安装过程,还能保证环境一致性,便于迁移和升级。