作者: Jerry
連結: https://butterfly.js.org/posts/dc584b87/#Page-Front-matter
來源: Butterfly
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

前言

最近在阿里云上买了一台轻量服务器,初衷是用来做爬虫的,但是试了几天拿到的数据效果不太理想,资源闲置也是浪费干脆搭一个自己的Blog 来做记录和分享。

这篇文档就这么诞生了,主要是记录一下折腾Ghost 博客系统的过程。

安装Docker

本文使用的环境是CentOS 8.2(个人习惯使用RHEL 的系统,和Ghost 官方推荐的Ubuntu 在安装程序和创建用户的部分有一点点不一样而已。)

推荐使用一个用户账号进行下列操作,但是涉及到很多权限的修改。如果对Linux 不熟悉可以直接使用root 账号完成下列操作。

安装依赖

sudo yum install -y yum-utils

配置阿里云的镜像仓库

yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum 源

yum makecache

安装Docker 程序

# 清理现有环境Docker,官方镜像无需进行
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装Docker
yum install docker -y
# 安装前会有如下告警,输入y 并回车
# 可以到https://docs.docker.com/engine/install/centos/ 的install Docker Engine 的那一步检查指纹
警告:/var/cache/dnf/docker-ce-stable-ab4061364e2cf0db/packages/containerd.io-1.4.9-3.1.el8.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
Docker CE Stable - x86_64 21 kB/s | 1.6 kB 00:00
导入 GPG 公钥 0x621E9F35:
Userid: "Docker Release (CE rpm) <[email protected]>"
指纹: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
来自: https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
确定吗?[y/N]: y

启动Docker

# 启动docker 进程
systemctl start docker
# 检查docker 进程状态,状态如下为Active 就是正常的
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2021-09-24 20:46:19 CST; 51s ago
# 将docker 进程加入开机启动
systemctl enable docker

配置阿里云Docker镜像加速

在阿里云控制台找到容器镜像服务,选择最下面的镜像加速器,获取加速器地址。注意每个用户的加速器地址不一致,需要自行去该页面获取。

在服务器上,复制上图中右下角红框中的代码,执行。完成后使用systemctl daemon-reloadsystemctl restart docker 重启docker 服务。

使用Docker-Compose 启动Ghost

安装Docker-Compose

可根据官方文档进行安装:https://docs.docker.com/compose/install/#alternative-install-options

# 下载docker-compose 
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 修改docker-compose 权限
chmod +x /usr/local/bin/docker-compose
# 创建软链
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 测试
docker-compose -v
# 输出docker-compose version 1.29.2, build 5becea4c

环境准备

建立永久的Ghost 和Mariadb 数据存储目录

# 创建docker-compose.yml 中两个映射Volume 的目录
# 记住修改
mkdir /home/ray/ghost_data /home/ray/mariadb_data

创建独立的Docker 网络

# 可选项,如果不需要,则将下面docker-compose.yml 中关于网络设置的部分删除
docker network create ghost-network

使用compose 启动docker

在用户根目录创建文件docker-compose.yml

vim ~/docker-compose.yml
# 将下面的内容粘贴到该文件,并保存


version: '2'
services:
# 使用mariadb 作为后台的数据库
mariadb:
image: mariadb:10.6.4
volumes:
# 使用/home/ray/mariadb_data 作数据库存储,需要与上一步骤建立的目录保持一致
- '/home/ray/mariadb_data:/var/lib/mysql'
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- ALLOW_EMPTY_PASSWORD=no
# 下列账号密码根据使用情况自行更改
- MARIADB_ROOT_PASSWORD=xxxxxx
# 若Ghost 使用ROOT 账号可以删除下面的USER和PASSWORD
- MARIADB_USER=xxxxxx
- MARIADB_PASSWORD=xxxxxx
- MARIADB_DATABASE=ghost_database
- MARIADB_MASTER_HOST=mariadb
# 上一步骤若不进行network 配置则删除该部分
networks:
- ghost-network
ghost:
image: ghost:4.15.0
# Ghost 镜像通过外部的3301 端口连接
ports:
- '3301:2368'
volumes:
# 使用/home/ray/ghost_data 存储Ghost 数据,需要与上一步骤建立的目录保持一致
- '/home/ray/ghost_data:/var/lib/ghost/content'
depends_on:
- mariadb
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- url=http://47.107.106.229:3301 # 注意这里改成自己的公网IP,否则启动博客后页面跳转有问题
- ALLOW_EMPTY_PASSWORD=no
- GHOST_DATABASE_HOST=mariadb
- GHOST_DATABASE_PORT_NUMBER=3306
- GHOST_DATABASE_NAME=ghost_database
# 数据库账户和密码与Mariadb 中设置保持一致
- GHOST_DATABASE_USER=root
- GHOST_DATABASE_PASSWORD=xxxxxx
- mail__transport=SMTP
# 我使用的是qq 邮箱作为SMTP 服务
- mail__options__host=stmp.qq.com
- mail__options__port=587
# 使用自己的邮箱
- [email protected]
# 使用邮箱SMTP 的授权码,去邮箱的“设置”-“账号”页面申请,使用QQ密码是不行的
- mail__options__auth__pass=xxxxxxxxxxxxxx
# 发件人,可以与auth_user 一致
- [email protected]
# 上一步骤若不进行network 配置则删除该部分
networks:
- ghost-network
# 上一步骤若不进行network 配置则删除该部分
networks:
ghost-network:
external: true

使用docker-compose up拉起服务,第一次拉起会比较慢,因为需要从docker hub 先下载配置中用到的mariadb 和ghost 的docker 镜像。

配置阿里云防火墙

在阿里云的控制台,添加规则放通TCP 3301 端口。

大功告成

然后通过浏览器访问http://47.107.106.229:3301 即可访问博客的主页。

通过http://47.107.106.229:3301/ghost 访问Ghost 控制台。

关于第一次使用注册账号的问题

我测试过将docker 0 的网络配置中的ipv4.dns设置为外网的DNS 尝试去解析smtp.qq.com尝试了几次都显示失败了。显示无法认证不确定是smtp 账号认证的问题还是dns 的问题。

不过在发送邮件之后遇到报错,直接刷新页面,然后使用刚刚填写的账号密码也可以直接进入ghost 的管理页面。

最后在GitHub上找到一个case ,大意是说docker-compose 的方式需要额外加入network_mode: network_mode: bridge 可以解决问题。但因为博客更换为Hexo 搭建,并没有做进一步尝试。